Changes

Jump to navigation Jump to search
965 bytes added ,  18:55, 17 July 2007
m
Line 1: Line 1:  +
{| align="right" border="1"
 +
|
 +
{| align="right" width="100px" style="text-align:center" cellspacing="0"
 +
! colspan="2" style="background:#ffff66" | VHDL Tutorial
 +
|-
 +
| colspan="2" style="background:#ffff99" | A brief guide to VHDL design with a design example; the introduction and core of the tutorial.
 +
|-
 +
| style="background:#ffff66" | < prev
 +
| style="background:#ffff66" | [[VHDL: Where to start|next >]]
 +
|}
 +
|}
 +
 
FPGA programming using a hardware description language is not a commonly taught skill in physics programs, but is a necessary skill for designing the electronics required for this project.  This tutorial aims to layout the design process and teach the basics of hardware description language; in particular [http://en.wikipedia.org/wiki/Vhdl VHDL].  The main competitor to VHDL is [http://en.wikipedia.org/wiki/Verilog Verilog]; tutorials and information regarding Verilog can be found through Google web searching.
 
FPGA programming using a hardware description language is not a commonly taught skill in physics programs, but is a necessary skill for designing the electronics required for this project.  This tutorial aims to layout the design process and teach the basics of hardware description language; in particular [http://en.wikipedia.org/wiki/Vhdl VHDL].  The main competitor to VHDL is [http://en.wikipedia.org/wiki/Verilog Verilog]; tutorials and information regarding Verilog can be found through Google web searching.
    
== Design example ==
 
== Design example ==
   −
To illustrate the discussions in this tutorial, a design example is discussed along the way.  The design example is the [[http://zeus.phys.uconn.edu/wiki/index.php?title=Programming_the_FPGA#Emulator_.28D.29|emulator for the AD5535 DAC]].  As each step of the design process is discussed, the DAC emulator will be used for illustration.
+
To illustrate the discussions in this tutorial, a design example is discussed along the way.  The design example is the [[Programming_the_DAC#Emulator|emulator for the AD5535 DAC]].  As each step of the design process is discussed, the DAC emulator will be used for illustration.
   −
== Where to start ==
+
== The tutorial ==
   −
The first part of the design process is completely independent of any codeThe first step is to define the "black box" of your circuit; that is, draw a box and say what goes in and what comes out.  VHDL allows three types of ''pins'' (connections to the outside world):
+
Due to the length of the tutorial, it had to be broken into several pagesHere are the links to the various sections of the tutorialThe first three sections discuss VHDL itselfThe final section is about using the development environment provided by Xilinx; you can read this section first or last as you see fit.
* '''in''': An ''in'' pin can be read from but never written to.
  −
* '''out''': An ''out'' pin can be written to but never read from.
  −
* '''inout''': An ''inout'' pin can be both read from and written to, providing the flexibility to allow bidirectional communication on a single lineAt first this seems the ideal choice and that you would always want inout pins; in actual fact you want to avoid inout pins unless you absolutely need them for bidirectional communication.
      +
* [[VHDL: Where to start]] - Section one of the tutorial, focusing on preparing your design for coding.
 +
* [[VHDL: Enter the code monkey]] - Section two of the tutorial, focusing on outlining the framework of your code.
 +
:''See also: [http://en.wikipedia.org/wiki/Code_monkey code monkey]''
 +
* [[VHDL: The real code]] - Section three of the tutorial, focusing on coding the body of your design.
 +
* [[VHDL: Xilinx ISE]] - Section four of the tutorial, focusing on using the development environment.
    +
== Extras ==
   −
Having defined your block box, you need to fill in your black box.
+
Here is some extra information regarding VHDL to be used as reference material.
    +
=== VHDL Resolution Table ===
    +
VHDL STD_LOGIC and STD_LOGIC_VECTOR both operate on 9-value logic defined by IEEE.  The nine states are:
 +
* U: uninitialized
 +
* X: forcing unknown
 +
* 0: forcing 0
 +
* 1: forcing 1
 +
* Z: high impedance
 +
* W: weak unknown
 +
* L: weak 0
 +
* H: weak 1
 +
* &#8211;: don't care
   −
== VHDL Resolution Table ==
+
If you have two or more drivers for the same line, then VHDL must somehow resolve the conflict.  The resolution table is given below.
    
{| style="text-align:center"
 
{| style="text-align:center"
|+VHDL Resolution Table
+
|+ '''VHDL Resolution Table'''
 
|-
 
|-
!  !! U !! X !! 0 !! 1 !! Z !! W !! L !! H !! -
+
!  !! U !! X !! 0 !! 1 !! Z !! W !! L !! H !! &#8211;
 
|-
 
|-
 
! U
 
! U
Line 49: Line 75:  
| U || X || 0 || 1 || H || W || W || H || X
 
| U || X || 0 || 1 || H || W || W || H || X
 
|-
 
|-
! -
+
! &#8211;
 
| U || X || X || X || X || X || X || X || X
 
| U || X || X || X || X || X || X || X || X
 
|}
 
|}
   −
VHDL Logic States
+
=== Links ===
* U: uninitialized
+
 
* X: forcing unknown
+
In case you can't follow the near-incoherent ramblings that constitute my tutorial, here are links to some others.  And always remember: Google is a programmer's best friend.
* 0: forcing 0
+
* http://esd.cs.ucr.edu/labs/tutorial/
* 1: forcing 1
+
* http://www.vhdl-online.de/tutorial/
* Z: high impedance
  −
* W: weak unknown
  −
* L: weak 0
  −
* H: weak 1
  −
* -: don't care
 
461

edits

Navigation menu