125
CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks Hao Zheng Dept of Comp Sci & Eng USF

CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

CDA 4253/CIS 6930 FPGA System DesignSequential Circuit Building Blocks

Hao ZhengDept of Comp Sci & Eng

USF

Page 2: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

2

Outline and Reading

➜ Introduction of behavioral modeling with process➜ Sequential statements inside processes

➜ Modeling combinational/sequential circuits➜ Using processes and sequential statements

➜ Reading – P. Chu, P. Chu, FPGA Prototyping by VHDL Examples➜ Section 3.3 – 3.4, 3.7➜ Chapter 4, Regular Sequential Circuit

Page 3: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

3

VHDL Modeling Styles

Components andinterconnects

structural

VHDL Descriptions

Dataflow

Concurrent statements

behavioral

• Registers• State machines• Instruction decoders

Sequential statements

Subset most suitable for synthesis

• Testbenches

Page 4: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

4

Processes and Sequential Statements

Page 5: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

5

Process Statements

➜ Processes are concurrent statements.➜ Processes describe combinational/sequential

behavior➜ Processes in VHDL are very powerful statements➜ Allow to define arbitrary behavior that may be difficult

to represent by a real circuit➜ Not every process can be synthesized

➜ Use processes with caution in order to write the synthesizable code.

➜ Use processes freely in testbenches for simulation.

Page 6: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

6

Concurrent Statements

➜ simple concurrent signal assignment (Ü)

➜ conditional concurrent signal assignment(when-else)

➜ selected concurrent signal assignment(with-select-when)

➜ Processes

Page 7: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

7

Anatomy of a Process

[label:] process [(sensitivity list)][declaration part]

beginsequential statements

end process [label];

OPTIONAL

Page 8: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

8

Sequential Statements

➜ Used only in processes

➜ Evaluated one at a time sequentially

➜ Include➜ Signal/variable assignments

➜ IF statements

➜ CASE statements

➜ WAIT statements

➜ Other – loop, …

Page 9: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

9

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.

label:

process (sensitivity list)

declarations begin

sequential statementsend process;

wait statements are NOT ALLOWED in a process with a sensitivity list.

Page 10: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

10

Processes – Semantics

Execute Suspend

1. Finish sequential execution, or 2. encounter wait

1. An event on a sensitive signal occurs, or2. Certain amount of delay has passed

Page 11: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

11

Modeling Combinational Circuits

Page 12: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

12

Processes Modeling Combinational Circuits

priority: process(a, b)begin

c <= a and b;end process;

ANDa

bc

To model a combinational circuit, all input signals and signals on LHS of signal assignments must be

included in the sensitivity list!

Page 13: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

13

Processes Modeling Combinational Circuits

priority: processbegin

-- sensitivity list used

-- wait statement

wait on a, b;c <= a and b;

end process;

ANDa

bc

To model a combinational circuit, all input signals and signals on LHS of signal assignments must be

included in the sensitivity list!

Page 14: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

14

Wrong Processes

priority: process (a, b)begin

wait on a, b;c <= a and b;

end process;

ANDa

bc

wait statements are NOT ALLOWED in a process with a sensitivity list.

Page 15: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

15

Sequential Statement: wait

wait until boolean_condition;-- wait until a=‘1’ and b=‘0’;

wait on signal_list;-- wait on a, b;

wait for time;-- wait for 10 ns;

wait; -- suspend the process forever

Synthesis – Do not use WAIT when modeling a design.

Page 16: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

16

Process for Conditional Concurrent Signal Assignment

architecture arch of ex is begin

r <= a + b + c when m=n elsea – b when m>0 elsec + 1;

end architecture arch;

Page 17: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

17

Process for Conditional Concurrent Signal Assignment – IF Statement

architecture arch of ex is begin

process(a, b, c, m, n)begin

if m=n thenr <= a + b + c;

elsif m > 0 thenr <= a – b;

elser <= c + 1;

end if;end process;

end architecture arch;

Page 18: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

18

If Statement – Syntax

RTL Hardware Design by P. Chu

Chapter 5 17

Syntaxif boolean_expr_1 then

sequential_statements;elsif boolean_expr_2 then

sequential_statements;elsif boolean_expr_3 then

sequential_statements;. . .else

sequential_statements;end if;

Page 19: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

19

Process for Selected Concurrent Signal Assignment

architecture arch of ex is begin

with sel selectr <= a + b + c when “00” else

a – b when “10” elsec + 1 when others;

end architecture arch;

Page 20: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

20

Process for Selected Concurrent Signal Assignment – Case Statement

architecture arch of ex is begin

process(a, b, c, sel)begin

case sel iswhen “00” =>

r <= a + b + c;when “10” =>

r <= a – b;when others =>

r <= c + 1;end case;

end process;end architecture arch;

Page 21: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

21

Case Statement – Syntax

RTL Hardware Design by P. Chu

Chapter 5 38

Syntaxcase case_expression iswhen choice_1 =>

sequential statements;when choice_2 =>

sequential statements;. . .when choice_n =>

sequential statements;end case;

Page 22: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

22

Comparison to Concurrent Statementslarge <= a when a > b else b;small <= b when a > b else a;

process(a, b)begin

if a > b thenlarge <= a;small < = b;

elselarge <= b;small <= a;

end if;end process;

Page 23: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

23

Unintended Memory

process(a)begin

if a > b thengt <= ‘1’;

elsif a = b theneq <= ‘1’;

end if;end process;

Implicit memory is introduced to hold gtand eq.

To model a combinational circuit, all input signals and signals on LHS of signal assignments must be

included in the sensitivity list!

Page 24: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

24

Avoid Unintended Memory

process(a, b)begin

if a > b thengt <= ‘1’;eq <= ‘0’

elsif a = b thengt <= ‘0’;eq <= ‘1’;

elsegt <= ‘0’;eq <= ‘0’;

end if;end process;

1. All inputs and signals on LHS of signal assignments are included in the sensitivity list.

2. A signal must be assigned in every branch.

Page 25: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

25

Signal Assignments in Processes

XOR

AND

d2d1

d3o

s

-- Is this process the-- right model?process (d1, d2, d3)begin

s <= d1 xor d2;

o <= s and d3;

end process;

Page 26: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

26

Signal Assignments in Processes

XOR

AND

d2d1

d3o

s

-- Is this process the-- right model?process (d1, d2, d3)begin

s <= d1 xor d2;o <= s and d3;

end process;

0

d1

d2

d3

o

d1

d2

d3

o

s

Note: To revert to EPWave opening in a new browser window, set that option on your user page.

From: 0ps To: 12ps

Get Signals Radix ! " # 100% $ %

Page 27: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

27

Signal Assignments in Processes

XOR

AND

d2d1

d3o

s

-- This process is the-- right model.process (d1, d2, d3, s)

begin

s <= d1 xor d2;o <= s and d3;

end process;

0

d1 1

d2 1

d3 1

o 0

d1 1

d2 1

d3 1

o 0

s 0

Note: To revert to EPWave opening in a new browser window, set that option on your user page.

From: 0ps To: 3ps

Get Signals Radix ! " # 100% $ % & 0ps

Page 28: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

28

Signal Assignments in Processes

process (d1, d2, d3, s)begin

s <= d1 xor d2;o <= s and d3;

end process;process (d1, d2, d3, s)begin

o <= s and d3;s <= d1 xor d2;

end process;

0

d1

d2

d3

o

d1

d2

d3

o

s

Note: To revert to EPWave opening in a new browser window, set that option on your user page.

From: 0ps To: 11ps

Get Signals Radix ! " # 100% $ %

Page 29: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

29

Comb. Design Ex: Find Max of a, b, c

Page 30: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

30

Modeling Sequential Circuits

Page 31: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

31

Processes Modeling Sequential Circuits

• All signals which appear on the left of signal assignment statement (<=) are outputs e.g. y, z

• All signals which appear on the sensitivity list are inputs e.g. clk

• All signals which appear on the right of signal assignment statement (<=) or in logic expressions are inputs e.g. w, a, b, c

• Note that not all inputs need to be included on the sensitivity list

priority: process(clk)begin

if w(3) = '1' theny <= "11" ;

elsif w(2) = '1' theny <= "10" ;

elsif w(1) = ‘1’ theny <= “01”;

elsey <= "00" ;

end if;end process;-- Not synthesizable!!

w

clkyPriority

Encoder

Page 32: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

32

Clock D 0 1 1

–0 1

0 1

Truth table Graphical symbol

t 1 t 2 t 3 t 4

Time

Clock

D

Q

Timing diagram

Q(t+1)Q(t)

D Q

Clock

D-Latch

Page 33: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

33

-- library not shownentity latch is

port ( D, Clock : in STD_LOGIC ; Q : out STD_LOGIC);

end latch ;

architecture behavioral of latch isbegin

process (D, Clock) begin

if Clock = '1' then

Q <= D ; end if;

end process; end architecture behavioral;

D Q

Clock

Should be avoided!

D-Latch: Level Sensitive

Page 34: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

34

Synchronous Circuit Structure

FF

CombinationalLogic

clock

Page 35: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

35

Processes Modeling Sequential Circuits –Code Template

process(reset, clk)begin

if reset=‘1’ then-- reset logic for memory

elsif rising_edge(clk) then-- functional logic defined-- with sequential statements

end if;end process;

This template is for synthesizable synchronous designs

Page 36: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

36

Processes Modeling Sequential Circuits –Code Templateprocess(clk)begin

if rising_edge(clk) thenif reset=‘1’ then-- reset logic for memory

else-- functional logic defined-- with sequential statements

end if;end if;

end process;

This template is for synthesizable synchronous designs

Page 37: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

37

Clk D ­­

0 1

0 1

Truth table

t 1 t 2 t 3 t 4

Time

Clock

D

Q

Timing diagram

Q(t+1)

Q(t)

D Q

Clock

Graphical symbol

0 –Q(t)1 –

D Flip-Flop: Edge Triggered

Page 38: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

38

D Q

Clock

-- library not shownentity dff is

port( D, Clock : in STD_LOGIC ; Q : out STD_LOGIC) ;

end entity dff;

architecture behavioral of dff isbegin

process(Clock) begin

if rising_edge(Clock) then

Q <= D ; end if;

end process; end architecture behavioral;

D Flip-Flop: Edge Triggered

Page 39: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

39

D Q

Clock

-- library not shownentity dff is

port ( D, Clock : in STD_LOGIC; Q : out STD_LOGIC);

end entity dff;

architecture behavioral of dff isbegin

process(Clock) begin

if Clock’event and Clock=‘1’ then

Q <= D ; end if;

end process; end architecture behavioral;

D Flip-Flop: Edge Triggered

Page 40: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

40

-- library not shownentity dff is

port( D, Clock : in STD_LOGIC ; Q : out STD_LOGIC) ;

end entity dff;

architecture behavioral of dff isbegin

process(Clock)begin

if falling_edge(Clock) then

Q <= D ; end if;

end process; end architecture behavioral;

D Q

Clock

To be synthesizable, each process is sensitive on a single clock edge

D Flip-Flop: Edge Triggered

Page 41: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

41

-- library not shownentity dff is

port( D, Clock : in STD_LOGIC ; Q : out STD_LOGIC) ;

end entity dff;

architecture behavioral of dff isbegin

process(Clock)begin

if rising_edge(Clock) thenQ <= D ;

elsif falling_edge(Clock) thenQ <= not D ;

end if; end process;

end architecture behavioral;

D Q

Clock

D Flip-Flop: Not Allowed!

Page 42: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

42

D FF with Asynchronous Reset

D Q

Clock

Resetn

-- library not shownentity dff is

port ( D, clock : in STD_LOGIC ; resetn : in std_logic;Q : out STD_LOGIC);

end entity dff;

architecture behavioral of dff isbegin

process(resetn, clock) begin

if resetn = ‘0’ thenQ <= ‘0’;

elsif rising_edge(clock) thenQ <= D ;

end if; end process;

end architecture behavioral;

Page 43: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

43

D Q

Clock

Resetn

D FF with Synchronous Reset-- library not shownentity dff is

port ( D, clock : in STD_LOGIC; resetn : in std_logic;Q : out STD_LOGIC);

end entity dff;architecture behavioral of dff isbegin

process(clock)begin

if rising_edge(clock) then

if resetn = ‘0’ thenQ <= ‘0’;

elseQ <= D;

end if; end process;

end behavioral;

Page 44: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

44

--Library not shownENTITY 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 behavioral OF reg8 ISBEGIN

PROCESS (resetn, clock)BEGIN

IF resetn = '0' THENQ <= "00000000”;

ELSIF rising_edge(clock) THENQ <= D ;

END IF ;END PROCESS ;

END behavioral ;`

Resetn

Clock

reg8

8 8

D Q

8-Bit Register

Page 45: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

45

--library not shownENTITY 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 behavioral OF regn ISBEGIN

PROCESS (Resetn, Clock)BEGIN

IF Resetn = '0' THENQ <= (others => '0’);

ELSIF rising_edge(Clock) THENQ <= D ;

END IF ;END PROCESS;

END behavioral;

Resetn

Clock

regn

N N

D Q

Generic N-bit Register

Page 46: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

46

others stands for any index value that has not been previously referenced to.

Q <= �00000001� can be written as Q <= (0 => �1’, others =>�0�)

Q <= �10000001� can be written as Q <= (7 => �1�, 0 => �1�, others =>�0�)

or Q <= (7 | 0 => �1�, others =>�0�)

Q <= �00011110� can be written as Q <= (4 downto 1 =>�1�, others =>�0�)

Use of Keyword OTHERS

Page 47: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

47

Example

x <= “0000_0001_0000_0001”other way to write the bit string?

Page 48: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

48

-- library not shownENTITY regne IS

GENERIC (N : INTEGER := 8);PORT ( Enable, Clock : IN STD_LOGIC;

D : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));

END regne ;

ARCHITECTURE behavioral OF regne ISBEGIN

PROCESS (Clock)BEGIN

IF rising_edge(Clock) THENIF Enable = '1' THEN

Q <= D;END IF;

END IF;END PROCESS;

END behavioral;

QD

Enable

Clock

regn

N N

N-bit Register with Enable

Page 49: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

49

FF Coding Guidelines (Xilinx)

➜ Do not set or reset FFs asynchronously ➜ Such FFs not supported, or➜ Requiring additional resources -> hurts performance

➜ Do not describe Flip-Flops with both a set and a reset ➜ No FFs with both set and reset

➜ Always describe enable, set, or reset control inputs of Flip-Flop primitives as active-High ➜ additional inverter may hurt performance

➜ See XST user guide for more information

Page 50: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

50

Shift Registers

Page 51: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

51

Shift Register – Internal Structure

D QSin

Clock

D Q D Q D Q

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

Enable

ENTITY sr4 ISPORT (Enable: IN STD_LOGIC;

Sin : IN STD_LOGIC;Clock : IN STD_LOGIC;Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END sr4;

Page 52: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

52

Shift Register – Model

ARCHITECTURE behavioral OF sr4 ISsignal reg: STD_LOGIC_VECTOR(3 downto 0);

BEGINPROCESS (Clock)BEGIN

IF rising_edge(Clock) THENIF Enable = �1� THEN

-- shift right reg <= reg(3 downto 1) & sin;

END IF;END IF ;

END PROCESS ;-- output logicQ <= reg;

END behavioral;

Page 53: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

53

Shift Register With Parallel Load

D(3)

D Q

Clock

Enable

SinD(2)

D Q

D(1)

D Q

D(0)

D Q

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

Load

Page 54: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

54

ENTITY sr4_pl ISPORT (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 sr4_pl;

QEnable

Clock

4

D

Load

Sin

4

4-bit Shift Register with Parallel Load

Page 55: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

55

ARCHITECTURE behavioral OF sr4_pl ISSIGNAL reg : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGINPROCESS (Clock)BEGIN

IF rising_edge(Clock) THENIF Enable = �1� THEN

IF Load = '1' THENreg <= D; -- parallel load

ELSEreg <= reg(3 downto 1) & sin; -- shift right

END IF;END IF;

END IF ;END PROCESS;Q <= reg; -- output logic

END behavioral;

QEnable

Clock

4

D

Load

Sin

4

4-bit Shift Register with Parallel Load

Page 56: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

56

ENTITY srn_pl ISGENERIC ( 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 srn_pl ;

QEnable

Clock

N

D

Load

Sin

N

N-bit Shift Register with Parallel Load

Page 57: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

57

ARCHITECTURE behavioral OF shiftn ISsignal reg: STD_LOGIC_VECTOR(N-1 downto 0);

BEGINPROCESS (Clock)BEGIN

IF rising_edge(Clock) THENIF Enable = �1� THEN

IF Load = '1' THENreg <= D ;

ELSEreg <= reg(N-1 downto 1) & sin;

END IF ;END IF;

END IF ;END PROCESS ;Q <= reg;

END behavioral;

QEnable

Clock

N

D

Load

Sin

N

N-bit Shift Register with Parallel Load

Page 58: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

58

Counters

Page 59: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

59

architecture behavioral of upcount isSIGNAL Count : std_logic_vector(1 DOWNTO 0);

beginprocess(Clock)begin

if rising_edge(Clock) thenIF Clear = '1' THEN

Count <= "00”;ELSE

Count <= Count + 1 ;END IF ;

end if;end process;Q <= Count; -- output internal state

end behavioral;

2-bit Counter with Synchronous Reset

QClear

Clock

upcount

2

Page 60: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

60

ARCHITECTURE behavioral OF upcount _ar ISSIGNAL Count : STD_LOGIC_VECTOR (3 DOWNTO 0) ;

BEGINPROCESS (Clock, Resetn)BEGIN

IF Resetn = '0' THENCount <= "0000”;

ELSIF rising_edge(Clock) THENIF Enable = '1' THEN

Count <= Count + 1 ;END IF;

END IF ;END PROCESS ;Q <= Count;

END behavioral ;

QEnable

Clockupcount

4

Resetn

Counter with Asynchronous Reset

Page 61: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

61

➜ Modify the model below to make it generic

LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.std_logic_unsigned.all ;

ENTITY upcount_ar IS

PORT (Clock, Resetn, Enable: IN STD_LOGIC ;

Q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)) ;END upcount_ar ;

N-bit Generic Counter: Exercise

Page 62: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

62

ARCHITECTURE behavioral OF upcount _ar ISSIGNAL Count : STD_LOGIC_VECTOR (3 DOWNTO 0) ;

BEGINPROCESS (Clock, Resetn)BEGIN

IF Resetn = '0' THENCount <= "0000”;

ELSIF rising_edge(Clock) THENIF Enable = '1' THEN

Count <= Count + 1 ;END IF;

END IF ;END PROCESS ;Q <= Count;

END behavioral ;

N-bit Generic Counter: Exercise

Page 63: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

63

A Timer that Outputs a Tick per Second

Page 64: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

64

A Timer that Outputs a Tick per Second

LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.numeric_std.all ;

ENTITY timer_1s ISPORT(

Clock, Resetn : IN STD_LOGIC_VECTOR(26 DOWNTO 0);tick : OUT STD_LOGIC

) ;END timer_1s;

Page 65: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

65

A Timer that Outputs a Tick per SecondARCHITECTURE behavioral OF timer_1s IS

SIGNAL Count : unsigned(26 DOWNTO 0);BEGIN

PROCESS (Clock, Resetn)BEGIN

IF Resetn = '0' THENCount <= (others => ‘0’);

ELSIF rising_edge(Clock) THENif Count = 100000000 then

Count <= 0;else

Count <= Count + 1 ;END IF ;

END PROCESS ;tick <= ‘1’ when Count = 100000000 else

‘0’;END behavioral ;

Page 66: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

66

Mod-m CounterCounts from 0 to m-1, and wraps around

LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.numeric_std.all ;

ENTITY mod_m_counter ISgeneric(

N : integer : 4; –- number of bitsM : integer : 10 –- mod-M

);PORT(

Clock, Reset : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);q : out std_logic_vector(N-1 downto 0);

tick : OUT STD_LOGIC) ;

END mod_m_counter;

Page 67: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

67

Mod-mCounter

ARCHITECTURE arch OF mod_m_counter ISSIGNAL reg : unsigned(N-1 downto 0);

BEGINPROCESS (Clock, Reset)BEGIN

IF Reset = '0' THENreg <= (others => ‘0’);

ELSIF rising_edge(Clock) THENif (reg = M-1) then

reg <= (others => ‘0’);else

reg <= reg+1;end if;

END IF ;END PROCESS ;q <= std_logic_vector(reg);tick <= ‘1’ when reg = M-1 else

‘0’;END arch;

reg <= (reg + 1) mod M;

Page 68: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

68

Another Timer Design

➜ User sets a time in seconds➜ Outputs a tick when time is expired

Page 69: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

69

Mixing Description Styles Inside of an Architecture

Page 70: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

70

VHDL Description Styles

Components andinterconnects

structural

VHDL Description Styles

dataflow

Concurrent statements

behavioral

• Registers• Shift registers• Counters• State machines

Sequential statements

synthesizable

Page 71: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

71

architecture ARCHITECTURE_NAME of ENTITY_NAME is

-- Declarations: signals, constants, functions,

-- procedures, component declarations, ...

begin

-- Concurrent statements:

-- Concurrent simple signal assignment

-- Conditional signal assignment

-- Selected signal assignment

-- Component instantiation statements

-- Process statement

-- inside process you can use

-- only sequential statements

end ARCHITECTURE_NAME;

Mixed Style Modeling

Concurrent Statements

Page 72: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

72

PRNG Example (1)ENTITY PRNG IS

PORT( Coeff : in std_logic_vector(4 downto 0);Load_Coeff : in std_logic;Seed : in std_logic_vector(4 downto 0);Init_Run : in std_logic;Clk : in std_logic;

Current_State : out std_logic_vector(4 downto 0));END PRNG;

ARCHITECTURE mixed OF PRNG issignal Ands : std_logic_vector(4 downto 0);signal Sin : std_logic;signal Coeff_Q : std_logic_vector(4 downto 0);signal Sr5_Q : std_logic_vector(4 downto 0);

-- continue on the next slide

Page 73: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

73

PRNG Example (2)BEGIN

-- Data FlowSin <= Ands(0) XOR Ands(1) XOR Ands(2) XOR Ands(3) XOR Ands(4);Current_State <= sr4_Q;Ands <= Coeff_Q AND Sr5_Q;

-- BehavioralCoeff_Reg: PROCESS(Clk)BEGIN

IF rising_edge(Clk) THENIF Load_Coeff = '1' THEN

Coeff_Q <= Coeff;END IF;

END IF;END PROCESS;

-- StructuralSr4_pl_0 : ENTITY work.Sr4(behavioral)

generic map(N => 5);PORT MAP (D => Seed, Load => Init_Run, Sin => Sin,

Clock => Clk, Q => Sr5_Q);END mixed;

Page 74: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

Sequential Logic Modeling

Page 75: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

75

Sequential Logic – Overview

clk

registerinputs reg_nextreg

output

Page 76: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

76

Sequential Logic – VHDL Style 1

architecture arch of seq_template is

signal reg : std_logic_vector(N-1 downto 0);

begin

process(clk, reset)

begin

if reset=‘1’ then

reg <= (others => ‘0’);

elsif rising_edge(clk) then

reg <= f(inputs, reg);

end if;

end process;

end architecture arch;

Page 77: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

77

Sequential Logic – VHDL Style 2

architecture arch of disp_mux is

signal reg, reg_next : std_logic_vector(N-1 downto 0);

begin

process(clk, reset)

begin

if reset=‘1’ then

reg <= (others => ‘0’);

elsif rising_edge(clk) then

reg <= reg_next;

end if;

end process;

reg_next <= f(inputs, reg);

end architecture arch;

Register update

Comb. logic

Page 78: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

78

VHDL Variables

Page 79: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

79

Chapter 3: VHDL Support

Signal Assignment in a Process VHDL Coding Example---- Signal assignment in a process---- Download: http://www.xilinx.com/txpatches/pub/documentation/misc/xstug_examples.zip-- File: VHDL_Language_Support/signals_variables/signal_in_process.vhd--entity signal_in_process is

port (A, B : in BIT;S : out BIT );

end signal_in_process;

architecture archi of signal_in_process isbegin

process (A, B)begin

S <= ’0’ ;if ((A and B) = ’1’) then

S <= ’1’ ;end if;

end process;end archi;

Variable and Signal Assignment in a Process VHDL Coding Example---- Variable and signal assignment in a process---- Download: http://www.xilinx.com/txpatches/pub/documentation/misc/xstug_examples.zip-- File: VHDL_Language_Support/signals_variables/variable_in_process.vhd--library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;

entity variable_in_process isport (

A,B : in std_logic_vector (3 downto 0);ADD_SUB : in std_logic;S : out std_logic_vector (3 downto 0) );

end variable_in_process;

architecture archi of variable_in_process isbegin

process (A, B, ADD_SUB)variable AUX : std_logic_vector (3 downto 0);

beginif ADD_SUB = ’1’ then

AUX := A + B ;else

AUX := A - B ;end if;S <= AUX;

end process;end archi;

VHDL If-Else Statementsif-else and if-elsif-else statements use true-false conditions to execute statements.

• If the expression evaluates to true, the if branch is executed.

• If the expression evaluates to false, x, or z, the else branch is executed.

• A block of multiple statements is executed in an if or else branch.

• begin and end keywords are required.

• if-else statements can be nested.

XST User Guide for Virtex-6, Spartan-6, and 7 Series DevicesUG687 (v 14.5) March 20, 2013 www.xilinx.com 47

Send Feedback

Page 80: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

80

Differences: Signals vs Variables

• Variables can only be declared and used within processes or procedures.- Used to hold temporary results.

• Signals can only be declared in architecture.- Used for inter-process communications.

• Variables are updated immediately.• Signals are updated after current execution of a

process is finished.• Synthesis results:- Variables: similar to signals, but maybe optimized away- Signals: wires, registers, or latches.

Page 81: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

81

Differences: Signals vs Variablesprocess (a, b, c, s)begin

s <= a and b;

o <= s xor c;

end process;

process (a, b, c)variable s : std_logic;

begin

s := a and b;

o <= s xor c;

end process;

process (a, b, c, s)begin

o <= s xor c;

s <= a and b;

end process;

process (a, b, c)variable s : std_logic;

begin

o <= s xor c;

s := a and b;

end process;

Page 82: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

82

Differences: Signals vs Variablesprocess (a, b, c, s)begin

s <= a and b;

o <= s xor c;

end process;

process (a, b, c)variable s : std_logic;

begin

s := a and b;

o <= s xor c;

end process;

Page 83: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

83

Differences: Signals vs Variables

process (a, b, c)variable s : std_logic;

begin

o <= s xor c;

s := a and b;

end process;

Page 84: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

84

Differences: Signals vsVariables

architecture sig_ex of test issignal s : std_logic;

begin

process (clk)

begin

if rising_edge(clk) thens <= a and b;

o <= s xor c;

end if;

end process;

end sig_ex;

FF

FF

AND

XOR

ab

c

out1

out2

Page 85: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

85

Differences: Signals vsVariables

architecture var_ex of test isbegin

process (clk)

variable s : std_logic;

begin

if rising_edge(clk) thens := a and b;

o <= s xor c;

end if;

end process;

end var_ex;

ANDXOR

abc

FF

out3

out4

Page 86: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

86

Signals vs Variables – Summary

C1

C2

S1

S2

X1

X2

process (clk)begin

if rising_edge(clk) then

S1 <= C1(X1, S1, S2);

S2 <= C2(X2, S1, S2);

end if;end process;

Page 87: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

87

Signals vs Variables – Summary

C1

C2

V

S

X1

X2

process (clk)begin

if rising_edge(clk) then

V := C1(X1, S);

S <= C2(X2, S);

end if;end process;

Page 88: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

Case Studies

Page 89: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

Stopwatch

Page 90: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

90

Stopwatch

00.0 00.1 00.9 01.0... ... 99.9

AB.C• A: count of 10 seconds;• B: count of 1 seconds;• C: count of 0.1 seconds.

How to measure 0.1 second?

Page 91: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

91

Stopwatch – Concept

MsecCounter

SecondCounter

Second10Counter

clkgo

d1_end2_enMsecTickGen

mstick

d0d1d2

Page 92: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

92

Stopwatch – VHDL Code

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity stop_watch is

port(clk, go, clr : in std_logic;

d0 : out std_logic_vector(3 downto 0);

d1 : out std_logic_vector(3 downto 0);

d2 : out std_logic_vector(3 downto 0));

end entity stop_watch;

Page 93: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

93

Stopwatch – VHDL Code

architecture caecade_arch of stop_watch is

constant DVSR : integer := 10000000;

signal ms_reg, ms_next : unsigned(23 downto 0);

signal d0_reg, d1_reg, d2_reg

: unsigned(3 downto 0);

signal d0_next, d1_next, d2_next

: unsigned(3 downto 0);

signal d1_en, d2_en : std_logic;

signal ms_tick, d0_tick, d1_tick, d2_tick

: std_logic;

begin

-- to continue on the next slide

Page 94: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

94

Stopwatch – VHDL Codearchitecture caecade_arch of stop_watch is

... –- see previous slide

begin

-- register update

process(clk)

begin

if rising_edge(clk) then

ms_reg <= ms_next;

d0_reg <= d0_next;

d1_reg <= d1_next;

d2_reg <= d2_next;

end if;

end process;

Page 95: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

95

Stopwatch – VHDL Code-- next state logic

-- 0.1 sec tick generator

ms_next <= (others =>’0’) when clr=‘1’ or

(ms_reg=DVSR and go=‘1’) else

ms_reg+1 when go=‘1’ else

ms_reg;

ms_tick <= ms_reg=DVSR; -- generate ms_tick

-- 0.1 second counter

do_next <= “0000” when clr=‘1’ or

(ms_tick=‘1’ and d0_reg=9) else

d0_reg+1 when ms_tick=‘1’ else

d0_reg;

d0_tick <= d0_reg=9;

Page 96: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

96

Stopwatch – VHDL Code-- next state logic

-- 1 sec counter

d1_en <= ms_tick=‘1’ and d0_tick=‘1’;

d1_next <= “0000” when clr=‘1’ or

(d1_en=‘1’ and d1_reg=9) else

d1_reg+1 when d1_en=‘1’ else

d1_reg;

d1_tick <= d1_reg=9;

-- 10 second counter

d2_en <= d1_en and d1_tick=‘1’;

d2_next <= “0000” when clr=‘1’ or

(d2_en=‘1’ and d2_reg=9) else

d2_reg+1 when d2_en=‘1’ else

d2_reg;

Page 97: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

97

Stopwatch – VHDL Code-- output logic

d0 <= d0_reg;

d1 <= d1_reg;

d2 <= d2_reg;

end architecture cascade;

Page 98: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

Non-Synthesizable VHDL

Page 99: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

99

Testbench Code

-- clock generator

process

begin

clk <= ‘0’;

wait for 10ns;

clk <= ‘1’;

wait for 10ns;

end process;

Page 100: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

100

Testbench Code

-- test vector generator

process

begin

-- initialization

wait until falling_edge(clk);

-- generate some random inputs

wait until rising_edge(clk);

-- generate other random inputs

end process;

Page 101: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

101

Testbench Code-- test vector generator

process

begin

...

-- generate randome inputs

for i in 1 to 10 loop --wait for 10 cycles.

wait until rising_edge(clk);

end loop;

-- check if outputs are correct

end process;

Page 102: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

102

DelaysDelays are not synthesizable.

Statements, such aswait for 5 ns

a <= b after 10 ns

will not produce the required delay, and should not be used in the code intended for synthesis.

Page 103: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

103

Signal Initialization

➜ Declarations of signals (and variables) with initialized values, such as

signal a : STD_LOGIC := �0;

are allowed by Xilinx.➜ Models become less portable➜ Set and reset signals explicitly instead.➜Define reset logic for each synchronous process

Page 104: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

104

Dual-Edge Triggered Register/Counter

➜ In FPGAs, registers/counters change only on either rising or falling edge of the clock, but not both.

➜ Dual edge triggered processes are not synthesizable.➜ A single process is sensitive to either rising edge or

falling edge, but not both, of the clock.

Page 105: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

105

Dual-Edge Triggered Register/Counter

PROCESS (clk)

BEGIN

IF rising_edge(clk ) THEN

counter <= counter + 1;

ELSIF falling_edge(clk) THEN

counter <= counter + 1;

END IF;

END PROCESS;

Page 106: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

106

Dual-Edge Triggered Register/CounterPROCESS (clk)BEGIN

IF (clk’EVENT) THENcounter <= counter + 1;

END IF;END PROCESS;

PROCESS (clk)BEGIN

counter <= counter + 1;END PROCESS;

processbegin

wait on clk then

...

end if

end process;

Page 107: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

107

Given a single signal, the assignments to this signal should only be made within a single process block in order to avoidpossible conflicts in assigning values to this signal.

Single Driver Rule for Signals

Process 1: PROCESS (a, b)BEGIN

y <= a AND b;END PROCESS;

Process 2: PROCESS (a, b)BEGIN

y <= a OR b;END PROCESS;

Page 108: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

108

Backup

Page 109: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

109

7-Segment Display Multiplexer

Basys3™ FPGA Board Reference Manual

Figure 17. An un-illuminated seven-segment display and nine illumination patterns corresponding to decimal digits.

The anodes of the seven LEDs forming each digit are tied together into one “common anode” circuit node, but the LED cathodes remain separate, as shown in Fig. 18. The common anode signals are available as four “digit enable” input signals to the 4-digit display. The cathodes of similar segments on all four displays are connected into seven circuit nodes labeled CA through CG (for example, the four “D” cathodes from the four digits are grouped together into a single circuit node called “CD”). These seven cathode signals are available as inputs to the 4-digit display. This signal connection scheme creates a multiplexed display, where the cathode signals are common to all digits but they can only illuminate the segments of the digit whose corresponding anode signal is asserted.

To illuminate a segment, the anode should be driven high while the cathode is driven low. However, since the Basys3 uses transistors to drive enough current into the common anode point, the anode enables are inverted. Therefore, both the AN0..3 and the CA..G/DP signals are driven low when active.

AF

E

D

C

B

G

Common anode

Individual cathodes

DP

AN3 AN2 AN1 AN0

CA CB CC CD CE CF CG DP

Four-digit Seven Segment Display

Figure 18. Common anode circuit node.

A scanning display controller circuit can be used to show a four-digit number on this display. This circuit drives the anode signals and corresponding cathode patterns of each digit in a repeating, continuous succession at an update rate that is faster than the human eye can detect. Each digit is illuminated just one-fourth of the time, but because the eye cannot perceive the darkening of a digit before it is illuminated again, the digit appears continuously illuminated. If the update, or “refresh”, rate is slowed to around 45Hz, a flicker can be noticed in the display.

For each of the four digits to appear bright and continuously illuminated, all four digits should be driven once every 1 to 16ms, for a refresh frequency of about 1 KHz to 60Hz. For example, in a 62.5Hz refresh scheme, the entire display would be refreshed once every 16ms, and each digit would be illuminated for 1/4 of the refresh cycle, or 4ms. The controller must drive the cathodes low with the correct pattern when the corresponding anode signal is driven high. To illustrate the process, if AN0 is asserted while CB and CC are asserted, then a “1” will be displayed

Copyright Digilent, Inc. All rights reserved. Other product and company names mentioned may be trademarks of their respective owners. Page 16 of 19

CASESTUDY 89

an0

an1

a ,.-,.

I

an3 an2 an1 an0 1 1 1 0

Figure 4.5 Time-multiplexed seven-segment LED display.

Figure 4.6 Timing diagram of a time-multiplexed seven-segment LED display.

A B C D E F G DP

81

7-Segment Display Controller

disp_mux

8

8

8

8

in0

in2

in2

in3

sseg

an

8

4

hex2sseg 4

hex2sseg 4

hex2sseg 4

hex2sseg 4

clk

Page 110: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

110

7-Segment Display Controller

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity disp_mux is

port(clk, reset : in std_logic;

in3, in2, in1, in0 :

in std_logic_vector(7 downto 0);

an : out std_logic_vector(3 downto 0);

sseg : out std_logic_vector(7 downto 0));

end entity disp_mux;

Page 111: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

111

7-Segment Display Controller

architecture arch of disp_mux is

constant N : integer := 18;

signal q_reg, q_next : unsigned(N-1 downto 0);

signal sel : std_logic_vector(1 downto 0);

begin

process(clk, reset)

begin

if reset=‘1’ then

q_reg <= (others => ‘0’);

elsif rising_edge(clk) then

q_reg <= q_next;

end if;

end process;

q_next <= q_reg + 1;

counter

Page 112: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

112

7-Segment Display Controller

sel <= std_logic_vector(q_reg(N-1 downto N-2));

process(sel, in0, in1, in2, in3)

begin

case sel is

when “00” => an <= “1110”; sseg <= in0;

when “01” => an <= “1101”; sseg <= in1;

when “10” => an <= “1011”; sseg <= in2;

when others => an <= “0111”; sseg <= in3;

end case;

end process;

end architecture;

How long does it take for ‘sel’ to change?

Page 113: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

113

Generic ComponentInstantiation

Page 114: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

114

ENTITY regn ISGENERIC ( N : INTEGER := 8 ) ;PORT (Enable, Clock : IN STD_LOGIC;

D : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));

END regn;

ARCHITECTURE Behavior OF regn ISBEGIN

PROCESS (Clock)BEGIN

IF rising_edge(Clock) THENIF Enable = '1' THEN

Q <= D ;END IF ;

END IF;END PROCESS ;

END Behavior ;

N-bit Register with Enable

QDEnable

Clock

regn

N N

Page 115: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

115

Circuit Built of Components

w 0

w 3

y 1

y 0

z

w 1

w 2

w 1

En

y 3

w 0

y 2

y 1

y 0

s(0)

0

1

s(1)

0

1

r(0)

r(1)

r(2)r(3)

r(4)

r(5)

p(0)

p(1)

p(2)

p(3)

q(1)q(0)

ena

z(3)

z(2)

z(1)

z(0)dec2to4

priority

t(3)

t(2)

t(1)

t(0)regne

D Q

Clk Clock

Enable

En

Page 116: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

116

ENTITY priority_resolver ISPORT( 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;

-- continue on the next slide

Structural Description – VHDL-93

Page 117: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

117

BEGINu1: ENTITY work.mux2to1(dataflow)

PORT MAP( w0 => r(0), w1 => r(1), s => s(0), f => p(0));

p(1) <= r(2);p(2) <= r(3);

u2: ENTITY work.mux2to1(dataflow)PORT MAP( w0 => r(4), w1 => r(5),

s => s(1), f => p(3));

-- continue on the next slide

Structural Description – VHDL-93

Page 118: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

118

u3: ENTITY work.priority(dataflow)PORT MAP (w => p, y => q, z => ena);

u4: ENTITY work.dec2to4 (dataflow)PORT MAP (w => q, En => ena, y => z);

u5: ENTITY work.regne(behavioral) GENERIC MAP (N => 4) PORT MAP (D => z, Enable => En,

Clock => Clk, Q => t);END structural;

Structural Description – VHDL-93

Page 119: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

119

ENTITY priority_resolver ISPORT ( 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;

-- continue on the next slide

Structural Description – VHDL-87

Page 120: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

120

Structural Description – VHDL-87

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;

Page 121: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

121

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;

COMPONENT regn

GENERIC(N : INTEGER := 8 ) ;

PORT( D : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);

En : IN STD_LOGIC;

Clk : IN STD_LOGIC;

Q : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0));

END COMPONENT ;

Structural Description – VHDL-87

Page 122: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

122

BEGIN

u1: mux2to1 PORT MAP (w0 => r(0), w1 => r(1),s => s(0), f => p(0));

p(1) <= r(2);

p(2) <= r(3);

u2: mux2to1 PORT MAP (w0 => r(4), w1 => r(5),s => s(1), f => p(3));

u3: priority PORT MAP (w => p, y => q, z => ena);

u4: dec2to4 PORT MAP (w => q, En => ena, y => z);

u5: regne GENERIC MAP (N => 4)

PORT MAP ( D => z, En => En,

Clk => Clk, Q => t);

END structural;

Structural Description – VHDL-87

Page 123: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

123

architecture structural of ex isbeginU1 : ENTITY work.regn(behavioral)

GENERIC MAP (N => 4)PORT MAP (D => z,

Resetn => reset,

Clock => clk, Q => t );

-- other concurrent statementsend architecture structural;

Component Instantiation in VHDL-93

Generic map is optional.

Page 124: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

124

architecture structural of ex is

component 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;

begin

U1: regn GENERIC MAP (N => 8)

PORT MAP( D => z,

Resetn => reset ,

Clock => clk,

Q => t);

-- other concurrent statements

end architecture structural;

Component Instantiation in VHDL-87

Page 125: CDA 4253/CIS 6930 FPGA System Design Sequential Circuit ...haozheng/teach/cda4253/slides/...CDA 4253/CIS 6930 FPGA System Design Sequential Circuit Building Blocks HaoZheng Deptof

125

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