V HDL Tutorial
V HDL Tutorial
(VHDL VHSIC Hardware Description Language) (Very High Speed Integrated Circuit)
Question: How do we know that we have not made a mistake when we manually draw a schematic and connect components to implement a function?
Answer: By describing the design in a high-level (=easy to understand) language, we can simulate our design before we manufacture it. This allows us to catch design errors, i.e., that the design does not work as we thought it would. Simulation guarantees that the design behaves as it should.
1) Go through all functions. Compute the next value to appear on the output using current input values and store it in a local data area (a value table inside the function). 2) Go through all functions. Transfer the new value from the local table inside to the data area holding the values of the outputs (=inputs to the next circuit)
Cycle-based simulators
Go through all functions using current inputs and compute next output
Event-based Simulators
Go through all functions whose inputs has changed and compute next output
10
Transport
Delta
11
Inertial Delay
Default delay type Allows for user specified delay Absorbs pulses of shorter duration than the specified delay
12
Transport Delay
Must be explicitly specified by user Allows for user specified delay Passes all input transitions with delay
13
Delta Delay
Delta delay needed to provide support for concurrent operations with zero delay
The order of execution for components with zero delay is not clear
14
15
16
17
Standard Libraries
Include library ieee; before entity declaration. ieee.std_logic_1164 defines a standard for designers to use in describing interconnection data types used in VHDL modeling. ieee.std_logic_arith provides a set of arithmetic, conversion, comparison functions for signed, unsigned, std_ulogic, std_logic, std_logic_vector. Ieee.std_logic_unsigned provides a set of unsigned arithmetic, conversion, and comparison functions for std_logic_vector. See all available packages at
18
http://www.cs.umbc.edu/portal/help/VHDL/stdpkg.html
Entity Declaration
An entity declaration describes the interface of the component. Avoid using Alteras primitive names which can be found at
c:/altera/91/quartus/common/help/webhelp/master.htm#
PORT clause indicates input and output ports. An entity can be thought of as a symbol for a component.
19
Port Declaration
PORT declaration establishes the interface of the object to the outside world. Three parts of the PORT declaration
Name
Any identifier that is not a reserved word.
Mode
In, Out, Inout, Buffer
Data type
Any declared or predefined datatype.
20
Architecture Declaration
Architecture declarations describe the operation of the component. Many architectures may exist for one entity, but only one may be active at a time. An architecture is similar to a schematic of the component.
21
Modeling Styles
VHDL Hierarchy
23
VHDL provides two different types of execution: sequential and concurrent. Different types of execution are useful for modeling of real hardware.
Supports various levels of abstraction.
Sequential statements view hardware from a programmer approach. Concurrent statements are orderindependent and asynchronous.
24
Sequential Style
25
26
Structural Style
27
Sequential Statements
{Signal, Variable} assignments Flow control
if <condition> then <statments> [elsif <condition> then <statments>] else <statements> end if; for <range> loop <statments> end loop; while <condition> loop <statments> end loop; case <condition> is
when <value> => <statements>; when <value> => <statements>; when others => <statements>;
Data Objects
There are three types of data objects:
Signals
Can be considered as wires in a schematic. Can have current value and future values.
30
Constant Declaration
A constant can have a single value of a given type. A constants value cannot be changed during the simulation. Constants declared at the start of an architecture can be used anywhere in the architecture. Constants declared in a process can only be used inside the specific process.
CONSTANT constant_name : type_name [ : = value]; CONSTANT rise_fall_time : TIME : = 2 ns; CONSTANT data_bus : INTEGER : = 16;
31
Variable Declaration
Variables are used for local storage of data. Variables are generally not available to multiple components or processes. All variable assignments take place immediately. Variables are more convenient than signals for the storage of (temporary) data.
32
Signal Declaration
Signals are used for communication between components. Signals are declared outside the process. Signals can be seen as real, physical signals. Some delay must be incurred in a signal assignment.
33
Signal Assignment
A key difference between variables and signals is the assignment delay.
34
Variable Assignment
35
36
While is considered to be an FSM by some synthesis tools. Thus, it needs a wait statement to be synthesized.
37
The wait statement causes the suspension of a process statement or a procedure. wait [sensitivity_clause] [condition_clause] [timeout_clause]; Sensitivity_clause ::= on signal_name
wait wait wait on CLOCK; Clock = 1;
38
39
Structural Style
Circuits can be described like a netlist. Components can be customized. Large, regular circuits can be created.
41
Structural Statements
Structural descriptions can show a more concrete relation between code and physical hardware. Structural descriptions show interconnects at any level of abstraction.
42
Structural Statements
The component instantiation is one of the building blocks of structural descriptions. The component instantiation process requires component declarations and component instantiation statements. Component instantiation declares the interface of the components used in the architecture.
Component Declaration
The component declaration declares the interface of the component to the architecture. Necessary if the component interface is not declared elsewhere (package, library).
44
Component Instantiation
The instantiation statement maps the interface of the component to other objects in the architecture.
45
46
Component Libraries
47
entity ADDER is generic(n: natural :=2); port( A: in std_logic_vector(n-1 downto 0); B: in std_logic_vector(n-1 downto 0); carry: out std_logic; sum: out std_logic_vec
Generics
Generics allow the component to be customized upon instantiation. Generics pass information from the entity to the architecture. Common uses of generics
Customize timing Alter range of subtypes Change size of arrays
ENTITY adder IS GENERIC(n: natural :=2); PORT( A: IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); B: IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); C: OUT STD_LOGIC; SUM: OUT STD_LOGIC_VECTOR(n-1 DOWNTO 0) ); END adder;
48
Technology Modeling
One use of generics is to alter the timing of a certain component. It is possible to indicate a generic timing delay and then specify the exact delay at instantiation.
The example above declares the interface to a component named inv. The propagation time for high-to-low and low-to-high transitions can be specified later.
49
Structural Statements
The GENERIC MAP is similar to the PORT MAP in that it maps specific values to generics declared in the component.
50
Generate Statement
Structural for-loops: The GENERATE statement
Some structures in digital hardware are repetitive in nature. (RAM, ROM, registers, adders, multipliers, ) VHDL provides the GENERATE statement to automatically create regular hardware. Any VHDL concurrent statement may be included in a GENERATE statement, including another GENERATE statement.
51
All objects created are similar. The GENERATE parameter must be discrete and is undefined outside the GENERATE statement.
52
53
54
bit (0 or 1) bit_vector (array of bits) integer real time (physical data type)
55
Integer
Integer
Minimum range for any implementation as defined by standard: -2,147,483,647 to 2,147,483,647 Integer assignment example
56
Real
Real
Minimum range for any implementation as defined by standard: -1.0E38 to 1.0E38 Real assignment example
57
Enumerated
Enumerated
User defined range Enumerated example
58
Physical
Physical
Can be user defined range Physical type example
59
Array
Array
Used to collect one or more elements of a similar type in a single construct. Elements can be any VHDL data type.
60
Record
Record
Used to collect one or more elements of different types in a single construct. Elements can be any VHDL data type. Elements are accessed through field name.
61
Subtype
Subtype
Allows for user defined constraints on a data type. May include entire range of base type. Assignments that are out of the subtype range result in error. Subtype example
62
Integer subtypes:
Subtype Natural is integer range 0 to integerhigh; Subtype Positive is integer range 1 to integerhigh;
63
type Boolean is (false, true); type Bit is (0, 1); type Bit_vector is array (integer range <>) of bit;
64
65
type std_logic is resolved std_ulogic; type std_logic_vector is array (integer range <>) of std_logic;
66
Assignments
67
subtype instruction: bit_vector(31 downto 0); signal regs: array(0 to 15) of instruction;
regs(2) <= regs(0) + regs(1); regs(1)(7 downto 0) <= regs(0)(11 downto 4);
68
Alias Statement
70
Same base type: type a_type is array(0 to 4) of bit; signal a:a_type; signal s:bit_vector(0 to 4);
a<=00101 -- Error, is RHS a bit_vector or an a_type? a<=a_type(00101); -- type qualifier a<=a_type(s); -- type conversion
71
Different base types: Function int2bits(value:integer;ret_size:integer) return bit_vector; Function bits2int(value:bit_vector) return integer:
signal i:integer; signal b:bit_vector(3 downto 0) i<=bits2int(b); b<=int2bits(i,4);
72
Built-In Operators
Logic operators
AND, OR, NAND, NOR, XOR, XNOR (XNOR in VHDL93 only!!)
Relational operators
=, /=, <, <=, >, >=
Addition operators
+, -, &
Multiplication operators
*, /, mod, rem
Miscellaneous operators
**, abs, not
73
Alteras Quartus II is a PLD design software suitable for high-density FPGA designs. Schematic Editor, VHDL/Verilog Editor, Waveform Simulator.
74