VHDL Quick Start

advertisement
VHDL Quick Start
Peter J. Ashenden
The University of Adelaide
Objective
• Quick introduction to VHDL
– basic language concepts
– basic design methodology
• Use The Student’s Guide to VHDL
or The Designer’s Guide to VHDL
– self-learning for more depth
– reference for project work
© 1998, Peter J. Ashenden
VHDL Quick Start
2
Modeling Digital Systems
• VHDL is for writing models of a system
• Reasons for modeling
–
–
–
–
–
requirements specification
documentation
testing using simulation
formal verification
synthesis
• Goal
– most reliable design process, with minimum cost and
time
– avoid design errors!
© 1998, Peter J. Ashenden
VHDL Quick Start
3
Domains and Levels of Modeling
Functional
Structural
high level of
abstraction
low level of
abstraction
Geometric
© 1998, Peter J. Ashenden
VHDL Quick Start
“Y-chart” due to
Gajski & Kahn
4
Domains and Levels of Modeling
Functional
Structural
Algorithm
(behavioral)
Register-Transfer
Language
Boolean Equation
Differential Equation
Geometric
© 1998, Peter J. Ashenden
VHDL Quick Start
“Y-chart” due to
Gajski & Kahn
5
Domains and Levels of Modeling
Functional
Structural
Processor-Memory
Switch
Register-Transfer
Gate
Transistor
Geometric
© 1998, Peter J. Ashenden
VHDL Quick Start
“Y-chart” due to
Gajski & Kahn
6
Domains and Levels of Modeling
Functional
Structural
Polygons
Sticks
Standard Cells
Floor Plan
Geometric
© 1998, Peter J. Ashenden
VHDL Quick Start
“Y-chart” due to
Gajski & Kahn
7
Basic VHDL Concepts
• Interfaces
• Behavior
• Structure
• Test Benches
• Analysis, elaboration, simulation
• Synthesis
© 1998, Peter J. Ashenden
VHDL Quick Start
8
Modeling Interfaces
• Entity declaration
– describes the input/output ports of a module
entity name
port names
port mode (direction)
entity reg4 is
port ( d0, d1, d2, d3, en, clk : in bit;
q0, q1, q2, q3 : out bit );
end entity reg4;
reserved words
© 1998, Peter J. Ashenden
punctuation
port type
VHDL Quick Start
9
VHDL-87
• Omit entity at end of entity declaration
entity reg4 is
port ( d0, d1, d2, d3, en, clk : in bit;
q0, q1, q2, q3 : out bit );
end reg4;
© 1998, Peter J. Ashenden
VHDL Quick Start
10
Modeling Behavior
• Architecture body
– describes an implementation of an entity
– may be several per entity
• Behavioral architecture
– describes the algorithm performed by the module
– contains
• process statements, each containing
• sequential statements, including
• signal assignment statements and
• wait statements
© 1998, Peter J. Ashenden
VHDL Quick Start
11
Behavior Example
architecture behav of reg4 is
begin
storage : process is
variable stored_d0, stored_d1, stored_d2, stored_d3 : bit;
begin
if en = '1' and clk = '1' then
stored_d0 := d0;
stored_d1 := d1;
stored_d2 := d2;
stored_d3 := d3;
end if;
q0 <= stored_d0 after 5 ns;
q1 <= stored_d1 after 5 ns;
q2 <= stored_d2 after 5 ns;
q3 <= stored_d3 after 5 ns;
wait on d0, d1, d2, d3, en, clk;
end process storage;
end architecture behav;
© 1998, Peter J. Ashenden
VHDL Quick Start
12
VHDL-87
• Omit architecture at end of architecture body
• Omit is in process statement header
architecture behav of reg4 is
begin
storage : process
...
begin
...
end process storage;
end behav;
© 1998, Peter J. Ashenden
VHDL Quick Start
13
Modeling Structure
• Structural architecture
– implements the module as a composition of subsystems
– contains
• signal declarations, for internal interconnections
– the entity ports are also treated as signals
• component instances
– instances of previously declared entity/architecture pairs
• port maps in component instances
– connect signals to component ports
• wait statements
© 1998, Peter J. Ashenden
VHDL Quick Start
14
Structure Example
bit0
d_latch
d
q
d0
q0
clk
bit1
d_latch
d
q
d1
q1
clk
bit2
d_latch
d
q
d2
q2
clk
bit3
d_latch
d
q
d3
en
clk
© 1998, Peter J. Ashenden
gate
and2
a
y
q3
clk
int_clk
b
VHDL Quick Start
15
Structure Example
• First declare D-latch and and-gate entities and
architectures
entity d_latch is
port ( d, clk : in bit; q : out bit );
end entity d_latch;
entity and2 is
port ( a, b : in bit; y : out bit );
end entity and2;
architecture basic of d_latch is
begin
latch_behavior : process is
begin
if clk = ‘1’then
q <= d after 2 ns;
end if;
wait on clk, d;
end process latch_behavior;
end architecture basic;
architecture basic of and2 is
begin
and2_behavior : process is
begin
y <= a and b after 2 ns;
wait on a, b;
end process and2_behavior;
end architecture basic;
© 1998, Peter J. Ashenden
VHDL Quick Start
16
Structure Example
• Now use them to implement a register
architecture struct of reg4 is
signal int_clk : bit;
begin
bit0 : entity work.d_latch(basic)
port map ( d0, int_clk, q0 );
bit1 : entity work.d_latch(basic)
port map ( d1, int_clk, q1 );
bit2 : entity work.d_latch(basic)
port map ( d2, int_clk, q2 );
bit3 : entity work.d_latch(basic)
port map ( d3, int_clk, q3 );
gate : entity work.and2(basic)
port map ( en, clk, int_clk );
end architecture struct;
© 1998, Peter J. Ashenden
VHDL Quick Start
17
VHDL-87
• Can’t directly instantiate entity/architecture pair
• Instead
– include component declarations in structural
architecture body
• templates for entity declarations
– instantiate components
– write a configuration declaration
• binds entity/architecture pair to each instantiated
component
© 1998, Peter J. Ashenden
VHDL Quick Start
18
Structure Example in VHDL-87
• First declare D-latch and and-gate entities and
architectures
entity d_latch is
port ( d, clk : in bit; q : out bit );
end d_latch;
entity and2 is
port ( a, b : in bit; y : out bit );
end and2;
architecture basic of d_latch is
begin
latch_behavior : process
begin
if clk = ‘1’then
q <= d after 2 ns;
end if;
wait on clk, d;
end process latch_behavior;
end basic;
architecture basic of and2 is
begin
and2_behavior : process
begin
y <= a and b after 2 ns;
wait on a, b;
end process and2_behavior;
end basic;
© 1998, Peter J. Ashenden
VHDL Quick Start
19
Structure Example in VHDL-87
• Declare corresponding components in register
architecture body
architecture struct of reg4 is
component d_latch
port ( d, clk : in bit; q : out bit );
end component;
component and2
port ( a, b : in bit; y : out bit );
end component;
signal int_clk : bit;
...
© 1998, Peter J. Ashenden
VHDL Quick Start
20
Structure Example in VHDL-87
• Now use them to implement the register
...
begin
bit0 : d_latch
port map ( d0, int_clk, q0 );
bit1 : d_latch
port map ( d1, int_clk, q1 );
bit2 : d_latch
port map ( d2, int_clk, q2 );
bit3 : d_latch
port map ( d3, int_clk, q3 );
gate : and2
port map ( en, clk, int_clk );
end struct;
© 1998, Peter J. Ashenden
VHDL Quick Start
21
Structure Example in VHDL-87
• Configure the register model
configuration basic_level of reg4 is
for struct
for all : d_latch
use entity work.d_latch(basic);
end for;
for all : and2
use entity work.and2(basic)
end for;
end for;
end basic_level;
© 1998, Peter J. Ashenden
VHDL Quick Start
22
Mixed Behavior and Structure
• An architecture can contain both behavioral and
structural parts
– process statements and component instances
• collectively called concurrent statements
– processes can read and assign to signals
• Example: register-transfer-level model
– data path described structurally
– control section described behaviorally
© 1998, Peter J. Ashenden
VHDL Quick Start
23
Mixed Example
multiplier
multiplicand
shift_reg
control_
section
shift_
adder
reg
product
© 1998, Peter J. Ashenden
VHDL Quick Start
24
Mixed Example
entity multiplier is
port ( clk, reset : in bit;
multiplicand, multiplier : in integer;
product : out integer );
end entity multiplier;
architecture mixed of mulitplier is
signal partial_product, full_product : integer;
signal arith_control, result_en, mult_bit, mult_load : bit;
begin
arith_unit : entity work.shift_adder(behavior)
port map ( addend => multiplicand, augend => full_product,
sum => partial_product,
add_control => arith_control );
result : entity work.reg(behavior)
port map ( d => partial_product, q => full_product,
en => result_en, reset => reset );
...
© 1998, Peter J. Ashenden
VHDL Quick Start
25
Mixed Example
…
multiplier_sr : entity work.shift_reg(behavior)
port map ( d => multiplier, q => mult_bit,
load => mult_load, clk => clk );
product <= full_product;
control_section : process is
-- variable declarations for control_section
-- …
begin
-- sequential statements to assign values to control signals
-- …
wait on clk, reset;
end process control_section;
end architecture mixed;
© 1998, Peter J. Ashenden
VHDL Quick Start
26
Test Benches
• Testing a design by simulation
• Use a test bench model
– an architecture body that includes an instance of the
design under test
– applies sequences of test values to inputs
– monitors values on output signals
• either using simulator
• or with a process that verifies correct operation
© 1998, Peter J. Ashenden
VHDL Quick Start
27
Test Bench Example
entity test_bench is
end entity test_bench;
architecture test_reg4 of test_bench is
signal d0, d1, d2, d3, en, clk, q0, q1, q2, q3 : bit;
begin
dut : entity work.reg4(behav)
port map ( d0, d1, d2, d3, en, clk, q0, q1, q2, q3 );
stimulus : process is
begin
d0 <= ’1’; d1 <= ’1’; d2 <= ’1’; d3 <= ’1’; wait for 20 ns;
en <= ’0’; clk <= ’0’; wait for 20 ns;
en <= ’1’; wait for 20 ns;
clk <= ’1’; wait for 20 ns;
d0 <= ’0’; d1 <= ’0’; d2 <= ’0’; d3 <= ’0’; wait for 20 ns;
en <= ’0’; wait for 20 ns;
…
wait;
end process stimulus;
end architecture test_reg4;
© 1998, Peter J. Ashenden
VHDL Quick Start
28
Regression Testing
• Test that a refinement of a design is correct
– that lower-level structural model does the same as a
behavioral model
• Test bench includes two instances of design under
test
– behavioral and lower-level structural
– stimulates both with same inputs
– compares outputs for equality
• Need to take account of timing differences
© 1998, Peter J. Ashenden
VHDL Quick Start
29
Regression Test Example
architecture regression of test_bench is
signal d0, d1, d2, d3, en, clk : bit;
signal q0a, q1a, q2a, q3a, q0b, q1b, q2b, q3b : bit;
begin
dut_a : entity work.reg4(struct)
port map ( d0, d1, d2, d3, en, clk, q0a, q1a, q2a, q3a );
dut_b : entity work.reg4(behav)
port map ( d0, d1, d2, d3, en, clk, q0b, q1b, q2b, q3b );
stimulus : process is
begin
d0 <= ’1’; d1 <= ’1’; d2 <= ’1’; d3 <= ’1’; wait for 20 ns;
en <= ’0’; clk <= ’0’; wait for 20 ns;
en <= ’1’; wait for 20 ns;
clk <= ’1’; wait for 20 ns;
…
wait;
end process stimulus;
...
© 1998, Peter J. Ashenden
VHDL Quick Start
30
Regression Test Example
…
verify : process is
begin
wait for 10 ns;
assert q0a = q0b and q1a = q1b and q2a = q2b and q3a = q3b
report ”implementations have different outputs”
severity error;
wait on d0, d1, d2, d3, en, clk;
end process verify;
end architecture regression;
© 1998, Peter J. Ashenden
VHDL Quick Start
31
Design Processing
• Analysis
• Elaboration
• Simulation
• Synthesis
© 1998, Peter J. Ashenden
VHDL Quick Start
32
Analysis
• Check for syntax and semantic errors
– syntax: grammar of the language
– semantics: the meaning of the model
• Analyze each design unit separately
–
–
–
–
entity declaration
architecture body
…
best if each design unit is in a separate file
• Analyzed design units are placed in a library
– in an implementation dependent internal form
– current library is called work
© 1998, Peter J. Ashenden
VHDL Quick Start
33
Elaboration
• “Flattening” the design hierarchy
– create ports
– create signals and processes within architecture body
– for each component instance, copy instantiated entity
and architecture body
– repeat recursively
• bottom out at purely behavioral architecture bodies
• Final result of elaboration
– flat collection of signal nets and processes
© 1998, Peter J. Ashenden
VHDL Quick Start
34
Elaboration Example
bit0
d_latch
d
q
reg4(struct)
d0
q0
clk
bit1
d_latch
d
q
d1
q1
clk
bit2
d_latch
d
q
d2
q2
clk
bit3
d_latch
d
q
d3
en
clk
© 1998, Peter J. Ashenden
gate
and2
a
y
q3
clk
int_clk
b
VHDL Quick Start
35
Elaboration Example
bit0
d_latch(basic)
d
q
reg4(struct)
d0
q0
clk
bit1
d_latch(basic)
d
q
d1
q1
clk
bit2
d_latch(basic)
d
q
d2
q2
clk
bit3
d_latch(basic)
d
q
d3
en
clk
© 1998, Peter J. Ashenden
gate
and2(basic)
a
y
b
q3
clk
int_clk
process with variables
and statements
VHDL Quick Start
36
Simulation
• Execution of the processes in the elaborated model
• Discrete event simulation
– time advances in discrete steps
– when signal values change— events
• A processes is sensitive to events on input signals
– specified in wait statements
– resumes and schedules new values on output signals
• schedules transactions
• event on a signal if new value different from old
value
© 1998, Peter J. Ashenden
VHDL Quick Start
37
Simulation Algorithm
• Initialization phase
– each signal is given its initial value
– simulation time set to 0
– for each process
• activate
• execute until a wait statement, then suspend
– execution usually involves scheduling transactions on
signals for later times
© 1998, Peter J. Ashenden
VHDL Quick Start
38
Simulation Algorithm
• Simulation cycle
– advance simulation time to time of next transaction
– for each transaction at this time
• update signal value
– event if new value is different from old value
– for each process sensitive to any of these events, or
whose “wait for … ” time-out has expired
• resume
• execute until a wait statement, then suspend
• Simulation finishes when there are no further
scheduled transactions
© 1998, Peter J. Ashenden
VHDL Quick Start
39
Synthesis
• Translates register-transfer-level (RTL) design into
gate-level netlist
• Restrictions on coding style for RTL model
• Tool dependent
– see lab notes
© 1998, Peter J. Ashenden
VHDL Quick Start
40
Basic Design Methodology
Requirements
RTL Model
Simulate
Synthesize
Gate-level
Model
ASIC or FPGA
Test Bench
Place & Route
Timing
Model
© 1998, Peter J. Ashenden
Simulate
Simulate
VHDL Quick Start
41
Download