computer-aided digital system design vhdlalum.sharif.ir/~rajaei/lec4.pdf · modeling styles 3...

Post on 30-Apr-2020

7 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

VHDL

Ramin Rajaei

ramin_rajaei@ee.sharif.edu

Computer-Aided Digital System Design

بسم اهلل الرحمن الرحیم

Iran University of Science and Technology Department of Computer Engineering

Modeling Styles

2

From the level of abstraction systems can be described in there types:

1. Behavioral

2. Dataflow

3. Structural

© Dr. Ramin Rajaei, CAD

VHDL Hierarchy

Modeling Styles

3

Sequential vs. Concurrent Statements

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 order-independent and asynchronous.

© Dr. Ramin Rajaei, CAD

Examples for Architecture Declaration

4 © Dr. Ramin Rajaei, CAD

Sequential (behavioral) Style Data flow Style

Structural Style

Behavioral

© Dr. Ramin Rajaei, CAD 5

We can describe a system in terms of processing it performs on its input signals and the type of output it signals it produces.

Example :

LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY eq_comp4 is PORT( a,b : in std_logic_vector(3 downto 0); equals : out std_logic); END ; ARCHITECTURE behvioral OF eq_comp4 IS BEGIN comp: PROCESS (a,b) BEGIN IF (a=b) then equals <= '1'; Else equals <= '0'; END IF; END PROCESS comp; END behvioral;

Data Flow

© Dr. Ramin Rajaei, CAD 6

Dataflow architecture specifies how data will be transferred from signal to signal and input to input without the sequential statements.

Primary difference is that behavioral uses processes while dataflow does not.

The other main difference between dataflow and behavioral architectures is that the body of the process statement contains only sequential statements.

Example: library ieee; use ieee.std_logic_1164.all; entity eq_comp4 is port ( a,b : in std_logic_vector(3 downto 0); equals : out std_logic); end eq_comp4; architecture bool of eq_comp4 is begin equals <= not (a(0) xor b(0)) and not (a(1) xor b(1)) and not (a(2) xor b(2)) and not (a(3) xor b(3)); end bool;

Structural

© Dr. Ramin Rajaei, CAD 7

One way to describe a system is to describe component chips and the interconnections assuming that the user is familiar with it.

This kind of definition is the structural definition.

library ieee; use ieee.std_logic_1164.all; entity full_adder is port( a,b,ci : in std_logic; sum,co : out std_logic); end full_adder; architecture bool of full_adder is signal s1,s2,s3 : std_ulogic; begin u0: s1 <= (a xor b); u1: s2 <= (ci and s1); u2: s3 <= (a and b); u3: sum <= (s1 xor ci); u4 : co <= (s2 or s3); end bool;

Example:

What circuit this architecture means?

Standard VHDL operators

Logical - defined for type BIT

AND, NAND OR, NOR XOR, XNOR NOT

Relational - defined for types BIT, BIT_VECTOR, INTEGER = (equal to) =/ (not equal to) < (less than) <= (less than or equal to) > (greater than) >= (greater than or equal to)

© Dr. Ramin Rajaei, CAD 8

Standard VHDL operators

Unary Arithmetic - defined for type INTEGER

- (arithmetic negate)

Arithmetic - defined for type INTEGER

+ (addition)

- (subtraction)

Concatenation - defined for types STRING,

BIT, BIT_VECTOR

&

© Dr. Ramin Rajaei, CAD 9

Concurrency

© Dr. Ramin Rajaei, CAD 10

Sequential Style Syntax

11 © Dr. Ramin Rajaei, CAD

Assignments are executed sequentially inside processes.

A D-Flip Flop

© Dr. Ramin Rajaei, CAD 12

CLK

D Q

DFF CLEAR

Sequential Statements

13

• {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>;

• Wait on <signal> until <expression> for <time>;

© Dr. Ramin Rajaei, CAD

Data Objects

14

• There are three types of data objects:

• Signals

• Can be considered as wires in a schematic.

• Can have current value and future values.

• Variables and Constants

• Used to model the behavior of a circuit.

• Used in processes, procedures and functions.

© Dr. Ramin Rajaei, CAD

Signal Declaration and Assignment

© Dr. Ramin Rajaei, CAD 15

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.

A key difference between variables and signals is the assignment delay.

Variable Declaration and Assignment

16

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.

© Dr. Ramin Rajaei, CAD

Constant Declaration

© Dr. Ramin Rajaei, CAD 17

A constant can have a single value of a given type.

A constant’s 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;

Signals vs. Variables

© Dr. Ramin Rajaei, CAD 18

Variable is used when you want to create a serialized code, unlike the normal parallel code.

A variable, can exist only inside a process, and the assignment of values is not parallel. For example, the fallowing code:

Signals vs. Variables

© Dr. Ramin Rajaei, CAD 19

entity sig_var is port (In1: in std_logic; In2: in std_logic; out1: out std_logic); end sig_var;

architecture Behavioral of sig_var is begin process(In1, In2) variable a, b: std_logic; begin a := In1 and In2; b := a and In2; out1 <= b and In2; end process; end Behavioral;

Signals vs. Variables

© Dr. Ramin Rajaei, CAD 20

entity sig_var is port (In1: in std_logic; In2: in std_logic; out1: out std_logic); end sig_var;

architecture Behavioral of sig_var is signal a, b: std_logic; begin process(In1, In2) begin a <= In1 and In2; b <= a and In2; out1 <= b and In2; end process; end Behavioral;

Signals vs. Variables

© Dr. Ramin Rajaei, CAD 21

entity sig_var is port (In1: in std_logic; In2: in std_logic; out1: out std_logic); end sig_var;

architecture Behavioral of sig_var is signal a, b: std_logic; begin a <= In1 and In2; b <= a and In2; out1 <= b and In2; end Behavioral;

Signal vs Variable: synthesis

© Dr. Ramin Rajaei, CAD 22

entity sig_var is port (clk: in std_logic; Din: in std_logic_vector (3 downto 0); out1: out std_logic_vector (3 downto 0)); end sig_var;

architecture Behavioral of sig_var is signal a, b: std_logic_vector (3 downto 0); begin process(clk) begin if (rising_edge(clk)) then a <= Din; b <= a; end if; end process; out1 <= b; end Behavioral;

Signal vs Variable: synthesis

© Dr. Ramin Rajaei, CAD 23

entity sig_var is port (clk: in std_logic; Din: in std_logic_vector (3 downto 0); out1: out std_logic_vector (3 downto 0)); end sig_var;

architecture Behavioral of sig_var is signal a, b: std_logic_vector (3 downto 0); begin process(clk) begin if (rising_edge(clk)) then a <= Din; b <= a; out1 <= b; end if; end process; end Behavioral;

IF – vs. CASE – statement Syntax

© Dr. Ramin Rajaei, CAD 24

FOR – vs. WHILE – statement Syntax

© Dr. Ramin Rajaei, CAD 25

For is considered to be a combinational circuit by some synthesis tools. Thus, it cannot have a wait statement to be synthesized.

While is considered to be an FSM by some synthesis tools. Thus, it needs a wait statement to be synthesized.

WAIT – statement Syntax

© Dr. Ramin Rajaei, CAD 26

• 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 on CLOCK;

• Condition_clause ::= until boolean_expression

wait until Clock = ‘1’;

• Timeout_clause ::= for time_expression

wait for 150 ns;

wait until clk’event and clk= ‘1’;

wait until rising_edge(clk);

Sensitivity-lists vs Wait-on - statement

© Dr. Ramin Rajaei, CAD 27

Example

© Dr. Ramin Rajaei, CAD 28

entity process_example is Port ( clk : in STD_LOGIC; D1, D2: in std_logic; reset: in std_logic; out1 : out STD_LOGIC; out2 : out STD_LOGIC); end process_example; architecture Behavioral of process_example is begin process begin if reset = '1' then out1 <= '0'; else out1 <= D1; end if; if rising_edge(clk) then out2 <= D2; end if; end process; end Behavioral;

Example (cont.)

© Dr. Ramin Rajaei, CAD 29

entity process_example is Port ( clk : in STD_LOGIC; D1, D2: in std_logic; reset: in std_logic; out1 : out STD_LOGIC; out2 : out STD_LOGIC); end process_example; architecture Behavioral of process_example is begin process begin wait until rising_edge (clk); if reset = '1' then out1 <= '0'; else out1 <= D1; end if; out2 <= D2; end process; end Behavioral;

Example (cont.)

© Dr. Ramin Rajaei, CAD 30

Error message: line 36: Bad condition in wait statement, or only one clock per process.

Concurrent Process Equivalents

© Dr. Ramin Rajaei, CAD 31

• All concurrent statements correspond to a process equivalent.

U0: q <= a xor b after 5 ns;

is short hand notation for

U0: process

begin

q <= a xor b after 5 ns;

wait on a, b;

end process;

Structural Statements

© Dr. Ramin Rajaei, CAD 32

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.

At instantiation, only the interface is visible. The internals of the component are hidden.

Component Declaration and Instantiation

33

• The component declaration declares the interface of the component to the architecture.

• Necessary if the component interface is not declared elsewhere (package, library).

The instantiation statement maps the interface of the component to other objects in the architecture.

© Dr. Ramin Rajaei, CAD

Component Instantiation Syntax

34

• The instantiation has 3 key parts

• Name

• Component type

• Port map

© Dr. Ramin Rajaei, CAD

Examples:

© Dr. Ramin Rajaei, CAD 35

architecture first of add4 is begin s <= a + b; -- works with std_logic_vector or integer end; architecture second of add4 is signal c: std_logic_vector(2 downto 0); begin s(0) <= a(0) XOR b(0); c(0) <= a(0) AND b(0); s(1) <= a(1) XOR (b(1) XOR c(0)); c(1) <= ….. end add4;

Example: n-bit Comparator

© Dr. Ramin Rajaei, CAD 36

library ieee;

use ieee.std_logic_1164.all

entity Comparator is

port( A: in std_logic_vector(1 downto 0);

B: in std_logic_vector(1 downto 0);

less: out std_logic;

equal: out std_logic;

greater: out std_logic );

end Comparator;

architecture behv of Comparator is Begin process(A,B) Begin if (A<B) then less <= '1'; equal <= '0'; greater <= '0'; elsif (A=B) then less <= '0'; equal <= '1'; greater <= '0'; else less <= '0'; equal <= '0'; greater <= '1'; end if; end process; end behv;

More Examples for Review

37 © Dr. Ramin Rajaei, CAD

Example:

38 © Dr. Ramin Rajaei, CAD

Synthesis Result

39 © Dr. Ramin Rajaei, CAD

Example:

40 © Dr. Ramin Rajaei, CAD

entity reg4 is port (clk, clr : in bit; d : in bit_vector(0 to 3); q : out bit_vector(0 to 3); end entity reg4; architecture struct of reg4 is component flipflop is generic (Tprop, Tsetup, Thold : delay_length); port ( clk, clr, d : in bit; q : out bit); end component flipflop; begin bit0: component flipflop generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns) port map ( clk => clk, clr => clr, d => d(0), q => q(0) ); bit1: component flipflop generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns) port map ( clk => clk, clr => clr, d => d(1), q => q(1) ); bit2: component flipflop generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns) port map ( clk => clk, clr => clr, d => d(2), q => q(2) ); bit3: component flipflop generic map ( Tprop => 2 ns, Tsetup => 2ns, Thold => 1ns) port map ( clk => clk, clr => clr, d => d(3), q => q(3) ); end architecture struct;

Example: Array of AND-gates

© Dr. Ramin Rajaei, CAD 41

Next Sessions:

© Dr. Ramin Rajaei, CAD 42

In Lec-5, we will have a tutorial for Modelsim.

And also

Exercise 2

top related