41
Modeling & Simulating ASIC Designs with VHDL Reference: Smith text: Chapters 10 & 12

Modeling & Simulating ASIC Designs with VHDL

  • Upload
    laksha

  • View
    52

  • Download
    0

Embed Size (px)

DESCRIPTION

Modeling & Simulating ASIC Designs with VHDL. Reference: Smith text: Chapters 10 & 12. HDLs in Digital System Design. Model and document digital systems Hierarchical models System, RTL (Register Transfer Level), Gates Different levels of abstraction Behavior, structure - PowerPoint PPT Presentation

Citation preview

Page 1: Modeling & Simulating ASIC Designs with VHDL

Modeling & SimulatingASIC Designs with VHDL

Reference: Smith text: Chapters 10 & 12

Page 2: Modeling & Simulating ASIC Designs with VHDL
Page 3: Modeling & Simulating ASIC Designs with VHDL

HDLs in Digital System Design Model and document digital systems

Hierarchical models System, RTL (Register Transfer Level), Gates

Different levels of abstraction Behavior, structure

Verify circuit/system design via simulation Automated synthesis of circuits from HDL

models using a technology library output is primitive cell-level netlist (gates, flip

flops, etc.)

Page 4: Modeling & Simulating ASIC Designs with VHDL

Anatomy of a VHDL model “Entity” describes the external view of a

component “Architecture” describes the internal behavior

and/or structure of the component Example: 1-bit full adder A

B

Cin

Sum

Cout

Full Adder

Page 5: Modeling & Simulating ASIC Designs with VHDL

Example: 1-Bit Full Adderentity full_add1 is port ( -- I/O ports

a: in bit; -- addend input b: in bit; -- augend input cin: in bit; -- carry input sum: out bit;-- sum output cout: out bit); -- carry output

end full_add1 ;Comments follow double-dash

Type of signal

Signal direction (mode)Signal name

I/O PortDeclarations

Page 6: Modeling & Simulating ASIC Designs with VHDL

Port: Identifier: Mode Data_type; Identifier (naming) rules:

Can consist of alphabet characters (a-z), numbers (0-9), and underscore (_)

First character must be a letter (a-z) Last character cannot be an underscore Consecutive underscores are not allowed Upper and lower case are equivalent (case

insensitive) VHDL keywords cannot be used as identifiers

1 of 3

Page 7: Modeling & Simulating ASIC Designs with VHDL

Port: Identifier: Mode Data_type; Mode

in - driven into the entity from an external source (can read, but not update within architecture)

out - driven from within the entity (can drive but not read within architecture) inout – bidirectional; drivers both within

the entity and external (can read or write within architecture) buffer – like “out” but can read and write

2 of 3

Page 8: Modeling & Simulating ASIC Designs with VHDL

Port: Identifier: Mode Data_type; Data_type: = scalar or aggregate signal type Scalar (single-value) signal types:

bit – values are ‘0’ or ‘1’ std_logic – same as bit, but for standard

simulation/synthesis (IEEE standard 1164) integer - values [-231 … +(231-1)] on 32-bit host

Aggregate (multi-value) signal types: bit_vector – array of bits std_logic_vector – array of std_logic (IEEE 1164) All vectors must have a range specified: Ex. bit_vector(3 downto 0) or std_logic_vector(0

to 3)3 of 3

Page 9: Modeling & Simulating ASIC Designs with VHDL

-- For simulation and synthesis, std_logic preferred over bit. -- Provides additional logic states as data valuestype STD_LOGIC is ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't Care);

You must include the library and package declarations in the VHDL model before the entity. (Example on next slide)

IEEE std_logic_1164 package

Page 10: Modeling & Simulating ASIC Designs with VHDL

Example: 8-bit full adder-- Adder with 8-bit inputs/outputslibrary ieee; --supplied libraryuse ieee.std_logic_1164.all; --package of definitionsentity full_add8 is port ( a: in std_logic_vector(7 downto 0);

b: in std_logic_vector(7 downto 0); cin: in std_logic; sum: out std_logic _vector(7 downto 0); cout: out std_logic);

end full_add8 ;

Page 11: Modeling & Simulating ASIC Designs with VHDL

Format for Architecture bodyarchitecture architecture_name of entity_name is-- data type definitions (ie, states, arrays, etc.)-- internal signal declarationssignal signal_name: signal_type;

:signal signal_name: signal_type;-- component declarations – see format below-- function and procedure declarationsbegin

-- behavior of the model is described here and consists of concurrent interconnecting:-- component instantiations-- processes-- concurrent statements including:Signal Assignment statementsWhen-Else statementsWith-Select-When statements

end architecture architecture_name;Note: entity and architecture in the end statement is optional.

Page 12: Modeling & Simulating ASIC Designs with VHDL

Architecture defines function/structure-- behavioral model (no circuit structure

implied)architecture dataflow of full_add1 is signal x1: std_logic; -- internal signalbegin

x1 <= a xor b after 1 ns;sum <= x1 xor cin after 1 ns;

cout <= (a and b) or (a and cin) or (b and cin) after 1 ns;

end;

Page 13: Modeling & Simulating ASIC Designs with VHDL

Structural architecture example(no “behavior” specified)architecture structure of full_add1 is

component xor -- declare component to be used

port (x,y: in bit; z: out bit);

end component;for all: xor use entity work.xor(eqns); -- if multiple arch’ssignal x1: bit; -- signal internal to this component

beginG1: xor port map (a, b, x1); -- instantiate 1st xor gateG2: xor port map (x1, cin, sum); -- instantiate 2nd xor gate

…add circuit for carry output…end;

Page 14: Modeling & Simulating ASIC Designs with VHDL

Associating signals with formal ports component AndGate port (Ain_1, Ain_2 : in BIT; -- formal

parameters Aout : out BIT); end component;

-- positional association: A1:AndGate port map (X, Y, Z1); -- named association:A2:AndGate port map (Ain_2=>Y, Aout=>Z2,

Ain_1=>X); -- both (positional must begin from leftmost

formal):A3:AndGate port map (X, Aout => Z3, Ain_2 =>

Y);

Page 15: Modeling & Simulating ASIC Designs with VHDL

Example: D flip-flopentity DFF is port (Preset: in bit;

Clear: in bit; Clock: in bit; Data: in bit; Q: out bit; Qbar: out bit);

end DFF;

Data

Clock

Q

Qbar

Preset

Clear

Page 16: Modeling & Simulating ASIC Designs with VHDL

7474 D flip-flop equationsarchitecture eqns of DFF is

signal A,B,C,D: bit;signal QInt, QBarInt: bit;

beginA <= not (Preset and D and B) after 1 ns;B <= not (A and Clear and Clock) after 1 ns;C <= not (B and Clock and D) after 1 ns;D <= not (C and Clear and Data) after 1 ns;Qint <= not (Preset and B and QbarInt) after

1 ns;QBarInt <= not (QInt and Clear and C) after

1 ns;Q <= QInt; -- Can drive but not read

“outs” QBar <= QBarInt; -- Can read & drive “internals”

end;

Page 17: Modeling & Simulating ASIC Designs with VHDL

4-bit Register (Structural Model) entity Register4 is port ( D: in bit_vector(0 to 3);

Q: out bit_vector(0 to 3); Clk: in bit; Clr: in bit; Pre: in bit);

end Register4; D(3)

Q(3)

D(2) D(1) D(0)

Q(2) Q(1) Q(0)

CLKPRECLR

Page 18: Modeling & Simulating ASIC Designs with VHDL

Register Structurearchitecture structure of Register4 is

component DFF -- declare library component to be used port (Preset: in bit; Clear: in bit; Clock: in bit; Data: in bit; Q: out bit; Qbar: out bit);

end component; signal Qbar: bit_vector(0 to 3); -- dummy for unused FF outputsbegin -- Signals connect to ports in order listed above

F3: DFF port map (Pre, Clr, Clk, D(3), Q(3), Qbar(3));F2: DFF port map (Pre, Clr, Clk, D(2), Q(2), Qbar(2));F1: DFF port map (Pre, Clr, Clk, D(1), Q(1), Qbar(1));F0: DFF port map (Pre, Clr, Clk, D(0), Q(0), Qbar(0));

end;

Page 19: Modeling & Simulating ASIC Designs with VHDL

Conditional Signal Assignment signal a,b,c,d,y: std_logic; signal S: std_logic_vector(0 to 1);begin with S select

y <= a after 1 ns when “00”,b after 1 ns when “01”,c after 1 ns when “10”,d after 1 ns when “11”;

--Alternative “default”: d after 1 ns when others;

00

01

10

11

a

b

c

d

S

y

4-to-1 Mux

Page 20: Modeling & Simulating ASIC Designs with VHDL

32-bit-wide 4-to-1 multiplexer

signal a,b,c,d,y: bit_vector(0 to 31); signal S: bit_vector(0 to 1);begin with S select

y <= a after 1 ns when “00”,b after 1 ns when “01”,c after 1 ns when “10”,d after 1 ns when “11”;

--a,b,c,d,y can be any type, as long as they are the same

00

01

10

11

a

b

c

d

S

y

4-to-1 Mux

Page 21: Modeling & Simulating ASIC Designs with VHDL

Conditional Signal Assignment – Alternate Format

y <= a after 1 ns when (S=“00”) elseb after 1 ns when (S=“01”) elsec after 1 ns when (S=“10”) elsed after 1 ns;

Use any boolean expression for each condition:y <= a after 1 ns when (F=‘1’) and (G=‘0’)

00

01

10

11

a

b

c

d

S

y

4-to-1 Mux

Page 22: Modeling & Simulating ASIC Designs with VHDL

VHDL “Process” Construct[label:] process (sensitivity list)

declarations begin

sequential statements end process;

Process statements executed once at start of simulation

Process halts at “end” until an event occurs on a signal in the “sensitivity list”

Allows conventional programming language methods to describe circuit behavior

Page 23: Modeling & Simulating ASIC Designs with VHDL

Modeling sequential behavior-- Edge-triggered flip flop/registerentity DFF is port (D,CLK: in bit;

Q: out bit);end DFF;architecture behave of DFF isbegin

process(clk) -- “process sensitivity list”beginif (clk’event and clk=‘1’) then Q <= D after 1 ns;end if;end process;

end;

Process statements executed sequentially (sequential statements) clk’event is an attribute of signal clk which is TRUE if an event has occurred on

clk at the current simulation time

D Q

CLK

Page 24: Modeling & Simulating ASIC Designs with VHDL

Edge-triggered flip-flopAlternative methods for specifying clock

process (clk)begin if rising_edge(clk) then -- std_logic_1164 function

Q <= D ; end if;end process;

Leonardo also recognizes not clk’stable as equivalent to clk’event

Page 25: Modeling & Simulating ASIC Designs with VHDL

Alternative to sensitivity listprocess -- no “sensitivity list”begin wait on clk; -- suspend process until event on clk

if (clk=‘1’) then Q <= D after 1 ns;end if;

end process;

Other “wait” formats: wait until (clk’event and clk=‘1’) wait for 20 ns;

This format does not allow for asynchronous controls Process executes endlessly if no sensitivity list or

wait statement!

D Q

CLK

Page 26: Modeling & Simulating ASIC Designs with VHDL

Level-Sensitive D latch vs. D flip-flopentity Dlatch is port (D,CLK: in bit;

Q: out bit);end Dlatch;architecture behave of Dlatch isbegin

process(D, clk)beginif (clk=‘1’) then Q <= D after 1 ns;end if;end process;

end;Latch, Q changes whenever the latch is enabled by CLK=‘1’

(rather than edge-triggered)

D Q

CLK

Page 27: Modeling & Simulating ASIC Designs with VHDL

Defining a “register” for an RTL model (not gate-level)entity Reg8 is port (D: in bit_vector(0 to 7);

Q: out bit_vector(0 to 7); LD: in bit);

end Reg8;architecture behave of Reg8 isbegin

process(LD) beginif (LD’event and LD=‘1’) then Q <= D after 1 ns;end if;end process;

end;D and Q could be any abstract data type

Reg8

D(0 to 7)

Q(0 to 7)

LD

Page 28: Modeling & Simulating ASIC Designs with VHDL

Basic format for synchronous and asynchronous inputs

process (clock, asynchronously_used_signals )begin if (boolean_expression) then asynchronous signal_assignments elsif (boolean_expression) then asynchronous signal assignments elsif (clock’event and clock = contstant) then synchronous signal_assignments end if ;end process;

Page 29: Modeling & Simulating ASIC Designs with VHDL

Synchronous vs. Asynchronous Flip-Flop Inputsentity DFF is port (D,CLK: in bit; PRE,CLR: in bit;

Q: out bit);end DFF;architecture behave of DFF isbegin

process(clk,PRE,CLR)beginif (CLR=‘0’) then -- async CLR has precedence Q <= ‘0’ after 1 ns;elsif (PRE=‘0’) then -- then async PRE has precedence Q <= ‘1’ after 1 ns;elsif (clk’event and clk=‘1’) then Q <= D after 1 ns; -- sync operation only if CLR=PRE=‘1’end if;end process;

end;

CLRD Q

CLK PRE

Page 30: Modeling & Simulating ASIC Designs with VHDL

Modeling Finite State Machines (Synchronous Sequential Circuits)

FSM design & synthesis process:1. Design state diagram (behavior)2. Derive state table3. Reduce state table4. Choose a state assignment5. Derive output equations6. Derive flip-flop excitation equations

Synthesis steps 2-6 can be automated, given the state diagram

Page 31: Modeling & Simulating ASIC Designs with VHDL

Synchronous Sequential Circuit Model

Comb.Logic

FFs

Inputsx

Outputsz

Next StateY

Present Statey

Mealy Outputs z = f(x,y), Moore Outputs z = f(y)

Next State Y = f(x,y)

Clock

Page 32: Modeling & Simulating ASIC Designs with VHDL

Synchronous Sequential Circuit (FSM) Example

B /0 C /1 A /1

0 /0

1 /1 1 /0

1 /1

0 /0

0 /0X /Z P resen t

s ta teIn p u t x

0 1

N ex t s ta te /o u tp u t

A /0 A /0 C /0

A B C

A

BC

Page 33: Modeling & Simulating ASIC Designs with VHDL

FSM Example – entity definitionentity seqckt is port (

x: in bit; -- FSM inputz: out bit; -- FSM outputclk: in bit ); -- clock

end seqckt;

Page 34: Modeling & Simulating ASIC Designs with VHDL

FSM Example - behavioral modelarchitecture behave of seqckt is

type states is (A,B,C); -- symbolic state names (enumerate)signal curr_state,next_state: states;

begin-- Model the memory elements of the FSMprocess (clk)begin

if (clk’event and clk=‘1’) thenpres_state <= next_state;

end if;end process;

(continue on next slide)

Page 35: Modeling & Simulating ASIC Designs with VHDL

FSM Example - continued-- Model next-state and output functions of the FSMprocess (x, pres_state) -- function inputsbegin

case pres_state is -- describe each state when A => if (x = ‘0’) then

z <= ‘0’;next_state <= A;

else -- if (x = ‘1’)z <= ‘0’;next_state <= B;

end if;(continue next slide for pres_state = B and C)

Page 36: Modeling & Simulating ASIC Designs with VHDL

FSM Example (continued) when B => if (x=‘0’) then

z <= ‘0’;next_state <= A;

elsez <= ‘1’;next_state <= C;

end if;when C => if (x=‘0’) then

z <= ‘0’;next_state <= C;

elsez <= ‘1’;next_state <= A;

end if; end case;

end process;

Page 37: Modeling & Simulating ASIC Designs with VHDL

Alternative Format for Output and Next State Functions-- Output functionz <= ‘1’ when ((curr_state = B) and (x = ‘1’)) or ((curr_state = C) and (x = ‘1’)) else ‘0’;

-- Next state functionnext_state <= A when ((curr_state = A) and (x =

‘0’)) or ((curr_state = B) and (x = ‘0’)) or ((curr_state = C) and (x = ‘1’))

else B when ((curr_state = 1) and (x =

‘1’)) else C;

Page 38: Modeling & Simulating ASIC Designs with VHDL

library IEEE; use IEEE.STD_LOGIC_1164.all;entity SM1 is port (aIn, clk : in Std_logic; yOut: out Std_logic);end SM1;architecture Moore of SM1 is type state is (s1, s2, s3, s4); signal pS, nS : state;begin process (aIn, pS) begin – next state and output functions case pS is when s1 => yOut <= '0'; nS <= s4; --Moore: yOut = f(pS) when s2 => yOut <= '1'; nS <= s3; when s3 => yOut <= '1'; nS <= s1; when s4 => yOut <= '1'; nS <= s2; end case; end process; process begin wait until clk = '1'; pS <= nS; -- update state variable on next clock end process;end Moore;

Page 39: Modeling & Simulating ASIC Designs with VHDL

library IEEE; use IEEE.STD_LOGIC_1164.all;entity SM2 is port (aIn, clk : in Std_logic; yOut: out Std_logic); end

SM2;architecture Mealy of SM2 is type state is (s1, s2, s3, s4); signal pS, nS : state; begin process(aIn, pS) begin -- Mealy: yOut & nS are functions of aIn

and pS case pS is when s1 => if (aIn = '1') then yOut <= '0'; nS <= s4; else yOut <= '1'; nS <= s3; end if; when s2 => yOut <= '1'; nS <= s3; when s3 => yOut <= '1'; nS <= s1; when s4 => if (aIn = '1') then yOut <= '1'; nS <= s2; else yOut <= '0'; nS <= s1; end if; end case; end process; process begin wait until clk = '1' ; pS <= nS; end process;end Mealy;

Page 40: Modeling & Simulating ASIC Designs with VHDL

when s1 => -- initiate row access ras <= ’0’ ; cas <= ’1’ ; ready <= ’0’ ; next_state <= s2 ; when s2 => -- initiate column access ras <= ’0’ ; cas <= ’0’ ; ready <= ’0’ ; if (cs = ’0’) then next_state <= s0 ; -- end of operation if cs = 0 else next_state <= s2 ; -- wait in s2 for cs = 0 end if ;when s3 => -- start cas-before-ras refresh ras <= ’1’ ; cas <= ’0’ ; ready <= ’0’ ; next_state <= s4 ;when s4 => -- complete cas-before-ras refresh ras <= ’0’ ; cas <= ’0’ ; ready <= ’0’ ; next_state <= s0 ;

end case ;end process ;end rtl ;

Page 41: Modeling & Simulating ASIC Designs with VHDL

Synthesizing arithmetic circuits(12.6.5, 12.6.9, 12.6.10)

Leonardo recognizes overloaded operators and generated corresponding circuits:

“+”, “-”, “*”, and “abs” Special operations: “+1”, “-1”, unary “-” Relational Operators:

“=“, “/=“, “<“, “>“, “<=“, “>=“ Use “ranged integers” instead of unbound

to minimize generated logic. signal i : integer range 0 to 15;