Sequntial-Circuit Building Blocks - PowerPoint PPT Presentation

Loading...

PPT – Sequntial-Circuit Building Blocks PowerPoint presentation | free to download - id: 1790f9-ZDc1Z



Loading


The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
About This Presentation
Title:

Sequntial-Circuit Building Blocks

Description:

and a Simple Processor. 3. ECE 448 FPGA and ASIC Design with VHDL. Behavioral Design Style: ... WAIT statements are NOT ALLOWED in a processes with SENSITIVITY LIST. ... – PowerPoint PPT presentation

Number of Views:28
Avg rating:3.0/5.0
Slides: 64
Provided by: kam878
Learn more at: http://teal.gmu.edu
Category:

less

Write a Comment
User Comments (0)
Transcript and Presenter's Notes

Title: Sequntial-Circuit Building Blocks


1
Sequntial-Circuit Building Blocks
ECE 448 Lecture 5
2
Required reading
  • S. Brown and Z. Vranesic, Fundamentals of
    Digital Logic with VHDL Design
  • Chapter 7, Flip-Flops, Registers, Counters,
  • and a Simple Processor

3
Behavioral Design Style Registers Counters
4
What is a PROCESS?
  • A process is a sequence of instructions referred
    to as sequential statements.

The keyword PROCESS
  • A process can be given a unique name using an
    optional LABEL
  • This is followed by the keyword PROCESS
  • The keyword BEGIN is used to indicate the start
    of the process
  • All statements within the process are executed
    SEQUENTIALLY. Hence, the order of statements is
    important.
  • A process must end with the keywords END PROCESS.

testing PROCESS BEGIN test_vectorlt00 WAI
T FOR 10 ns test_vectorlt01 WAIT FOR 10
ns test_vectorlt10 WAIT FOR 10
ns test_vectorlt11 WAIT FOR 10 ns END
PROCESS
5
Anatomy of a Process
OPTIONAL
label PROCESS (sensitivity list)
declaration part BEGIN statement part END
PROCESS label
6
Statement Part
  • Contains Sequential Statements to be Executed
    Each Time the Process Is Activated
  • Analogous to Conventional Programming Languages

7
PROCESS with a SENSITIVITY LIST
  • List of signals to which the process is
    sensitive.
  • Whenever there is an event on any of the signals
    in the sensitivity list, the process fires.
  • Every time the process fires, it will run in its
    entirety.
  • WAIT statements are NOT ALLOWED in a processes
    with SENSITIVITY LIST.
  • label process (sensitivity list)
  • declaration part
  • begin
  • statement part
  • end process

8
Processes in VHDL
  • Processes Describe Sequential Behavior
  • Processes in VHDL Are Very Powerful Statements
  • Allow to define an arbitrary behavior that may be
    difficult to represent by a real circuit
  • Not every process can be synthesized
  • Use Processes with Caution in the Code to Be
    Synthesized
  • Use Processes Freely in Testbenches

9
Use of Processes in the Synthesizable Code
10
Component Equivalent of a Process
priority PROCESS (clk) BEGIN IF w(3) '1'
THEN y lt "11" ELSIF w(2) '1' THEN y
lt "10" ELSIF w(1) c THEN y lt a and
b ELSE z lt "00" END IF END PROCESS
  • All signals which appear on the left of signal
    assignment statement (lt) are outputs e.g. y, z
  • All signals which appear on the right of signal
    assignment statement (lt) or in logic expressions
    are inputs e.g. w, a, b, c
  • All signals which appear in the sensitivity list
    are inputs e.g. clk
  • Note that not all inputs need to be included in
    the sensitivity list

11
VHDL Design Styles
VHDL Design Styles
structural
behavioral
Components and interconnects
Concurrent statements
Sequential statements
  • Registers
  • Shift registers
  • Counters
  • State machines

synthesizable
and more if you are careful
12
Registers
13
D latch
Truth table
Graphical symbol
Q(t1)
Clock
D
Q(t)

0
0
1
0
1
1
1
Timing diagram
t
t
t
t
1
2
3
4
Clock
D
Q
Time
14
D flip-flop
Truth table
Graphical symbol
Q(t1)
Clk
D

0
?
0
1
?
1

Q(t)
0
Q(t)
1

Timing diagram
t
t
t
t
1
2
3
4
Clock
D
Q
Time
15
D latch
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY latch IS PORT ( D, Clock IN
STD_LOGIC Q OUT STD_LOGIC) END
latch ARCHITECTURE Behavior OF latch IS
BEGIN PROCESS ( D, Clock ) BEGIN IF Clock
'1' THEN Q lt D END IF END PROCESS
END Behavior
16
D flip-flop
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY flipflop IS PORT ( D, Clock
IN STD_LOGIC Q OUT STD_LOGIC) END
flipflop ARCHITECTURE Behavior_1 OF flipflop
IS BEGIN PROCESS ( Clock ) BEGIN IF
Clock'EVENT AND Clock '1' THEN Q lt D
END IF END PROCESS END Behavior_1
Q
D
Clock
17
D flip-flop
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY flipflop IS PORT ( D, Clock
IN STD_LOGIC Q OUT STD_LOGIC) END
flipflop ARCHITECTURE Behavior_1 OF flipflop
IS BEGIN PROCESS ( Clock ) BEGIN IF
rising_edge(Clock) THEN Q lt D END IF
END PROCESS END Behavior_1
Q
D
Clock
18
D flip-flop
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY flipflop IS PORT ( D, Clock
IN STD_LOGIC Q OUT STD_LOGIC) END
flipflop ARCHITECTURE Behavior_2 OF flipflop
IS BEGIN PROCESS BEGIN WAIT UNTIL
rising_edge(Clock) Q lt D END PROCESS
END Behavior_2
Q
D
Clock
19
D flip-flop with asynchronous reset
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY flipflop IS PORT ( D, Resetn, Clock
IN STD_LOGIC Q OUT STD_LOGIC)
END flipflop ARCHITECTURE Behavior OF
flipflop IS BEGIN PROCESS ( Resetn, Clock )
BEGIN IF Resetn '0' THEN Q lt '0'
ELSIF Clock'EVENT AND Clock '1' THEN Q
lt D END IF END PROCESS END Behavior
Q
D
Clock
Resetn
20
D flip-flop with synchronous reset
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY flipflop IS PORT ( D, Resetn, Clock
IN STD_LOGIC Q OUT STD_LOGIC)
END flipflop ARCHITECTURE Behavior OF
flipflop IS BEGIN PROCESS(Clock) BEGIN
IF rising_edge(Clock) THEN IF Resetn '0'
THEN Q lt '0' ELSE Q lt D END IF
END IF END PROCESS END Behavior
Q
D
Clock
Resetn
21
Asychronous vs. Synchronous
  • In the IF loop, asynchronous items are
  • Before the rising_edge(Clock) statement
  • In the IF loop, synchronous items are
  • After the rising_edge(Clock) statement

22
8-bit register with asynchronous reset
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY reg8 IS PORT ( D IN
STD_LOGIC_VECTOR(7 DOWNTO 0) Resetn,
Clock IN STD_LOGIC Q OUT
STD_LOGIC_VECTOR(7 DOWNTO 0) ) END reg8
ARCHITECTURE Behavior OF reg8
IS BEGIN PROCESS ( Resetn, Clock ) BEGIN IF
Resetn '0' THEN Q lt "00000000" ELSIF
rising_edge(Clock) THEN Q lt D END IF
END PROCESS END Behavior
23
N-bit register with asynchronous reset
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY regn IS GENERIC ( N INTEGER 16 )
PORT ( D IN STD_LOGIC_VECTOR(N-1 DOWNTO
0) Resetn, Clock IN STD_LOGIC Q
OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0) ) END regn
ARCHITECTURE Behavior OF regn
IS BEGIN PROCESS ( Resetn, Clock ) BEGIN IF
Resetn '0' THEN Q lt (OTHERS gt '0')
ELSIF rising_edge(Clock) THEN Q lt D
END IF END PROCESS END Behavior
24
N-bit register with enable
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY regn IS GENERIC ( N INTEGER 8 )
PORT ( D IN STD_LOGIC_VECTOR(N-1 DOWNTO
0) Enable, Clock IN STD_LOGIC Q
OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0) ) END
regn ARCHITECTURE Behavior OF regn
IS BEGIN PROCESS (Clock) BEGIN IF
rising_edge(Clock) THEN IF Enable '1'
THEN Q lt D END IF END IF END
PROCESS END Behavior
Enable
Q
D
Clock
regn
25
A word on generics
  • Generics are typically integer values
  • In this class the entity inputs and outputs
    should be std_logic or std_logic_vector
  • But the generics can be integer
  • Generics are given a default value
  • GENERIC ( N INTEGER 16 )
  • This value can be overwritten when entity is
    instantiated as a component
  • Generics are very useful when instantiating an
    often-used component
  • Need a 32-bit register in one place, and 16-bit
    register in another
  • Can use the same generic code, just configure
    them differently

26
Counters
27
2-bit up-counter with synchronous reset
LIBRARY ieee USE ieee.std_logic_1164.all USE
ieee.std_logic_unsigned.all ENTITY upcount
IS PORT ( Clear, Clock IN STD_LOGIC Q
OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ) END
upcount ARCHITECTURE Behavior OF upcount IS
SIGNAL Count std_logic_vector(1 DOWNTO
0) BEGIN upcount PROCESS ( Clock ) BEGIN IF
rising_edge(Clock) THEN IF Clear '1'
THEN Count lt "00" ELSE Count lt
Count 1 END IF END IF END PROCESS
Q lt Count END Behavior
28
4-bit up-counter with asynchronous reset (1)
LIBRARY ieee USE ieee.std_logic_1164.all USE
ieee.std_logic_unsigned.all ENTITY upcount
IS PORT ( Clock, Resetn, Enable IN
STD_LOGIC Q OUT STD_LOGIC_VECTOR (3
DOWNTO 0)) END upcount
29
4-bit up-counter with asynchronous reset (2)
ARCHITECTURE Behavior OF upcount IS SIGNAL Count
STD_LOGIC_VECTOR (3 DOWNTO 0) BEGIN PROCESS
( Clock, Resetn ) BEGIN IF Resetn '0'
THEN Count lt "0000" ELSIF
rising_edge(Clock) THEN IF Enable '1'
THEN Count lt Count 1 END IF END
IF END PROCESS Q lt Count END Behavior
30
Shift Registers
31
Shift register
Q(1)
Q(0)
Q(2)
Q(3)
Sin
Clock
Enable
32
Shift Register With Parallel Load
Load
D(3)
D(1)
D(2)
Sin
Clock
Enable
Q(0)
Q(1)
Q(2)
Q(3)
33
4-bit shift register with parallel load (1)
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY shift4 IS PORT ( D IN
STD_LOGIC_VECTOR(3 DOWNTO 0) Enable IN
STD_LOGIC Load IN STD_LOGIC Sin
IN STD_LOGIC Clock IN STD_LOGIC Q
OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) END
shift4
34
4-bit shift register with parallel load (2)
ARCHITECTURE Behavior_1 OF shift4 IS SIGNAL Qt
STD_LOGIC_VECTOR(3 DOWNTO 0) BEGIN PROCESS
(Clock) BEGIN IF rising_edge(Clock) THEN IF
Load '1' THEN Qt lt D ELSIF Enable
1 THEN Qt(0) lt Qt(1) Qt(1) lt Qt(2)
Qt(2) lt Qt(3) Qt(3) lt Sin END
IF END IF END PROCESS Q lt Qt END
Behavior_1
35
N-bit shift register with parallel load (1)
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY shiftn IS GENERIC ( N INTEGER 8 )
PORT ( D IN STD_LOGIC_VECTOR(N-1 DOWNTO 0)
Enable IN STD_LOGIC Load IN
STD_LOGIC Sin IN STD_LOGIC Clock
IN STD_LOGIC Q OUT STD_LOGIC_VECTOR(N-1
DOWNTO 0) ) END shiftn
36
N-bit shift register with parallel load (2)
ARCHITECTURE Behavior OF shiftn IS SIGNAL Qt
STD_LOGIC_VECTOR(N-1 DOWNTO 0) BEGIN PROCESS
(Clock) BEGIN IF rising_edge(Clock) THEN IF
Load '1' THEN Qt lt D ELSIF Enable
1 THEN Genbits FOR i IN 0 TO N-2
LOOP Qt(i) lt Qt(i1) END LOOP
Qt(N-1) lt Sin END IF END IF END
PROCESS Q lt Qt END Behavior
37
Generic ComponentInstantiation
38
N-bit register with enable
LIBRARY ieee USE ieee.std_logic_1164.all
ENTITY regn IS GENERIC ( N INTEGER 8 )
PORT ( D IN STD_LOGIC_VECTOR(N-1 DOWNTO
0) Enable, Clock IN STD_LOGIC Q
OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0) ) END
regn ARCHITECTURE Behavior OF regn
IS BEGIN PROCESS (Clock) BEGIN IF
(Clock'EVENT AND Clock '1' ) THEN IF Enable
'1' THEN Q lt D END IF END
IF END PROCESS END Behavior
Enable
Q
D
Clock
regn
39
Circuit built of medium scale components
s(0)
En
r(0)
p(0)
0
1
r(1)
q(0)
Enable
w
p(1)
w
y
0
y
0
0
z(0)
t(0)
0
q(1)
w
r(2)
1
w
y
p(2)
y
1
1
1
z(1)
t(1)
r(3)
w
ena
D
Q
2
y
z
w
2
z(2)
t(2)
3
priority
r(4)
p(3)
y
0
En
3
z(3)
t(3)
regn
dec2to4
1
r(5)
Clock
Clk
s(1)
40
Structural description example (1)
  • LIBRARY ieee
  • USE ieee.std_logic_1164.all
  • ENTITY priority_resolver IS
  • PORT (r IN STD_LOGIC_VECTOR(5 DOWNTO 0)
  • s IN STD_LOGIC_VECTOR(1 DOWNTO 0)
  • clk IN
    STD_LOGIC
  • en IN STD_LOGIC
  • t OUT STD_LOGIC_VECTOR(3 DOWNTO 0) )
  • END priority_resolver
  • ARCHITECTURE structural OF priority_resolver IS
  • SIGNAL p STD_LOGIC_VECTOR (3 DOWNTO 0)
  • SIGNAL q STD_LOGIC_VECTOR (1 DOWNTO 0)
  • SIGNAL z STD_LOGIC_VECTOR (3 DOWNTO 0)
  • SIGNAL ena STD_LOGIC

41
Structural description example (2)
COMPONENT mux2to1 PORT (w0, w1, s
IN STD_LOGIC f OUT STD_LOGIC )
END COMPONENT COMPONENT priority PORT (w
IN STD_LOGIC_VECTOR(3 DOWNTO 0) y OUT
STD_LOGIC_VECTOR(1 DOWNTO 0) z OUT
STD_LOGIC ) END COMPONENT COMPONENT
dec2to4 PORT (w IN STD_LOGIC_VECTOR(1 DOWNTO
0) En IN STD_LOGIC y OUT
STD_LOGIC_VECTOR(3 DOWNTO 0) ) END COMPONENT
42
Structural description example (3)
COMPONENT regn GENERIC ( N INTEGER 8 )
PORT ( D IN STD_LOGIC_VECTOR(N-1
DOWNTO 0) Enable, Clock IN STD_LOGIC
Q OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0)
) END COMPONENT
43
Structural description example (4)
  • BEGIN
  • u1 mux2to1 PORT MAP (w0 gt r(0) ,
  • w1 gt
    r(1),

  • s gt s(0),

  • f gt p(0))
  • p(1) lt r(2)
  • p(1) lt r(3)
  • u2 mux2to1 PORT MAP (w0 gt r(4) ,
  • w1 gt
    r(5),

  • s gt s(1),

  • f gt p(3))
  • u3 priority PORT MAP (w gt p,
  • y
    gt q,
  • z gt ena)
  • u4 dec2to4 PORT MAP (w gt q,
  • En
    gt ena,

44
Structural description example (5)
  • u5 regn GENERIC MAP (N gt 4)
  • PORT MAP (D gt z ,
  • Enable gt
    En ,

  • Clock gt Clk,
  • Q
    gt t )
  • END structural

45
ROM
46
Instruction ROM example (1)
  • LIBRARY ieee
  • USE ieee.std_logic_1164.all
  • USE ieee.std_logic_arith.all
  • ENTITY instruction_rom IS
  • GENERIC ( w INTEGER 16
  • n INTEGER 8
  • m INTEGER 3)
  • PORT (
  • Instr_addr IN STD_LOGIC_VECTOR(m-1 DOWNTO
    0)
  • Instr out STD_LOGIC_VECTOR(w-1 DOWNTO 0)
  • )
  • END instruction_rom

47
Instruction ROM example (2)
  • ARCHITECTURE ins_rom OF insstruction_rom IS
  • SIGNAL temp INTEGER RANGE 0 TO n-1
  • TYPE vector_array IS ARRAY (0 to n-1) OF
    STD_LOGIC_VECTOR(w-1 DOWNTO 0)
  • CONSTANT memory vector_array
  • ( "0000_0000_0000_0000",
  • "0000_0000_0000_0000",
  • "1101_0100_0101_1001",
  • "1101_0100_0101_1000",
  • "0110_1000_1000_0111",
  • "0100_1001_1001_1010",
  • "1111_0110_0111_0101",
  • "1111_0110_0111_0100",
  • BEGIN
  • temp lt conv_integer(unsigned(Instr_addr))
  • Instr lt memory(temp)
  • END instruction_rom

48
Mixing Design Styles Inside of an Architecture
49
VHDL Design Styles
VHDL Design Styles
structural
behavioral
Components and interconnects
Concurrent statements
Sequential statements
  • Registers
  • Shift registers
  • Counters
  • State machines

synthesizable
50
Mixed Style Modeling
  • architecture ARCHITECTURE_NAME of ENTITY_NAME is
  • Here you can declare signals, constants,
    functions, procedures
  • Component declarations
  • No variable declarations !!
  • begin
  • Concurrent statements
  • Concurrent simple signal assignment
  • Conditional signal assignment
  • Selected signal assignment
  • Generate statement
  • Component instantiation statement
  • Process statement
  • inside process you can use only sequential
    statements
  • end ARCHITECTURE_NAME

51
Sequential Logic Synthesis for Beginners
52
For Beginners
  • Use processes with very simple structure only
  • to describe
  • - registers
  • - shift registers
  • - counters
  • - state machines.
  • Use examples discussed in class as a template.
  • Create generic entities for registers, shift
    registers, and
  • counters, and instantiate the corresponding
    components in
  • a higher level circuit using GENERIC MAP PORT
    MAP.
  • Supplement sequential components with
  • combinational logic described using concurrent
    statements.

53
Sequential Logic Synthesis for Intermediates
54
For Intermmediates
  • Use Processes with IF and CASE statements only.
    Do not use LOOPS or VARIABLES.
  • Sensitivity list of the PROCESS should include
    only signals that can by themsleves change the
    outputs of the sequential circuit (typically,
    clock and asynchronous set or reset)
  • Do not use PROCESSes without sensitivity list
  • (they can be synthesizable, but make simulation
    inefficient)

55
For Intermmediates (2)
  • Given a single signal, the assignments to this
    signal should
  • only be made within a single process block in
    order to avoid
  • possible conflicts in assigning values to this
    signal.
  • Process 1 PROCESS (a, b)
  • BEGIN
  • y lt a AND b
  • END PROCESS
  • Process 2 PROCESS (a, b)
  • BEGIN
  • y lt a OR b
  • END PROCESS

56
Sequential Logic Synthesis for Advanced
57
For Advanced
  • Describe the algorithm you are trying to
  • implement in pseudocode.
  • Translate the pseudocode directly to VHDL
  • using processes with IF, CASE, LOOP,
  • and VARIABLES.
  • Multiple precautions needed,
  • Template and examples covered later
  • in class.

58
Non-synthesizable VHDL
59
Delays
  • Delays are not synthesizable
  • Statements, such as
  • wait for 5 ns
  • a lt b after 10 ns
  • will not produce the required delay, and
  • should not be used in the code intended
  • for synthesis.

60
Initializations
  • Declarations of signals (and variables)
  • with initialized values, such as
  • SIGNAL a STD_LOGIC 0
  • cannot be synthesized, and thus should
  • be avoided.
  • If present, they will be ignored by the
  • synthesis tools.
  • Use set and reset signals instead.

61
Dual-edge triggered register/counter (1)
  • In FPGAs register/counter can change only
  • at either rising (default) or falling edge of the
  • clock.
  • Dual-edge triggered clock is not synthesizable
  • correctly, using either of the descriptions
  • provided below.

62
Dual-edge triggered register/counter (2)
  • PROCESS (clk)
  • BEGIN
  • IF (clkEVENT AND clk1 ) THEN
  • counter lt counter 1
  • ELSIF (clkEVENT AND clk0 ) THEN
  • counter lt counter 1
  • END IF
  • END PROCESS

63
Dual-edge triggered register/counter (3)
  • PROCESS (clk)
  • BEGIN
  • IF (clkEVENT) THEN
  • counter lt counter 1
  • END IF
  • END PROCESS
  • PROCESS (clk)
  • BEGIN
  • counter lt counter 1
  • END PROCESS
About PowerShow.com