L16 – VHDL for State Machines with binary encoding VHDL – binary encoded states  Another example      Counter – enumeration states Binary encoded states Gray Code Controlled counters Ref:

Download Report

Transcript L16 – VHDL for State Machines with binary encoding VHDL – binary encoded states  Another example      Counter – enumeration states Binary encoded states Gray Code Controlled counters Ref:

L16 – VHDL for State
Machines with binary
encoding
VHDL – binary encoded states

Another example





Counter – enumeration states
Binary encoded states
Gray Code
Controlled counters
Ref: text Unit 10, 17, 20
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
2
Counter example



Specification – Write a synthesizable VHDL
description of a 3-bit counter that counts from
0 to 7 in binary, i.e., 000, 001, 010, …, 110,
111.
A 3-bit counter has 8 states, so,s1, …, s8.
The state occur sequentially without control.
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
3
Start the HDL


This is a problem that one should be able to
do without a state diagram to start.
The entity




ENTITY cnt3bit IS
PORT(clk : IN bit;
cnt : OUT bit_vector(2 downto 0));
END cnt3bit;
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
4
The ARCHITECTURE










ARCHITECTURE one OF cnt3bit IS
TYPE state_type IS (s0,s1,s2,s3,s4,s5,s6,s7);
SIGNAL state,next_state : state_type;
BEGIN
--F/F process
PROCESS
BEGIN
WAIT UNTIL clk='1' AND clk'event;
state <= next_state;
END PROCESS;
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
5
The next state process














--next_state process
PROCESS (state)
BEGIN
CASE state IS
WHEN s0 => next_state <= s1;
WHEN s1 => next_state <= s2;
WHEN s2 => next_state <= s3;
WHEN s3 => next_state <= s4;
WHEN s4 => next_state <= s5;
WHEN s5 => next_state <= s6;
WHEN s6 => next_state <= s7;
WHEN s7 => next_state <= s0;
END CASE;
END PROCESS;
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
6
The output process















--output process
PROCESS (state)
BEGIN
CASE state IS
WHEN s0 => cnt <= "000";
WHEN s1 => cnt <= "001";
WHEN s2 => cnt <= "010";
WHEN s3 => cnt <= "011";
WHEN s4 => cnt <= "100";
WHEN s5 => cnt <= "101";
WHEN s6 => cnt <= "110";
WHEN s7 => cnt <= "111";
END CASE;
END PROCESS;
END one; --end of the architecture
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
7
Notes on code

Standard VHDL coding style





An enumeration type for coding of the state
Signals for state and state type
3 processes for modeling
1st process – latching of next_state into state
2nd process – generation of next_state


Here simple as no control signals
3rd process – generation of output given the state
– a Moore machine.
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
8
The testbench

ENTITY is blank



ENTITY testcnt3bit IS
END testcnt3bit;
Declarative region of Arch










ARCHITECTURE one OF testcnt3bit IS
COMPONENT cnt3bit IS
PORT (clk : IN bit;
cnt : OUT bit_vector(2 downto 0));
END COMPONENT;
FOR all : cnt3bit USE ENTITY work.cnt3bit(one);
-- declare signal for stimulus and response of the DUT
SIGNAL clk : bit;
SIGNAL cnt : bit_vector(2 downto 0);
BEGIN
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
9
In the testbench arch




BEGIN
-- As tb has clk will never go quiescent
-- set up clk 50% duty cycle 10 ns period
clk <= not clk AFTER 5 ns;



-- instantiate component
u1 : cnt3bit PORT MAP (clk,cnt);



END one;
Testbench is very simple – apply the clk and
instantiate the component.
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
10
The VHDL simulation

Waveform shows binary counting output
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
11
When entered into Quartis

Automatically did a one-hot encoding



5 ALUTs – 8 registers – 4 pins
5 total combinational functions
Does a one hot encoding make sense?

Class discussion
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
12
Compare to a binary encoding



Code the binary coding straight into VHDL
ENTITY is the same
Declarative region of the ARCHITECTURE




Declarations are different
ARCHITECTURE two OF cnt3bit IS
SIGNAL state,next_state : bit_vector(2 downto 0);
BEGIN
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
13
And in the processes







-- latching of next_state
PROCESS
BEGIN
WAIT UNTIL clk='1' AND clk'event;
state <= next_state;
END PROCESS;
No difference here as both state and next_state
are of the same type. (just bit_vector now)
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
14
Next State Process














--next_state process
PROCESS (state)
BEGIN
CASE state IS
WHEN “000” => next_state <= “001”;
WHEN “001” => next_state <= “010” ;
WHEN “010” => next_state <= “011” ;
WHEN “011” => next_state <= “100” ;
WHEN “100” => next_state <= “101” ;
WHEN “101” => next_state <= “110” ;
WHEN “110” => next_state <= “111” ;
WHEN “111” => next_state <= “000” ;
END CASE;
END PROCESS;
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
15
Output Process

For this style the output process is simply
assigning the state to the output as this is a
Moore machine. This can be done with a
concurrent signal assignment statement.


cnt <= state;
END one;
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
16
Modify the testbench


In the declarative region add the 2nd arch and cnt for the 2nd arch
(note change in instantiation labels)











ARCHITECTURE one OF testcnt3bit IS
COMPONENT cnt3bit IS
PORT (clk : IN bit;
cnt : OUT bit_vector(2 downto 0));
END COMPONENT;
FOR u1 : cnt3bit USE ENTITY work.cnt3bit(one);
FOR binenc : cnt3bit USE ENTITY work.cnt3bit(two);
-- declare signal for stimulus and response of the DUT
SIGNAL clk : bit;
SIGNAL cnt,cntbin : bit_vector(2 downto 0);
BEGIN
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
17
After the begin




BEGIN
-- As tb has clk will never go quiescent
-- set up clk 50% duty cycle 10 ns period
clk <= not clk AFTER 5 ns;




-- instantiate component
u1 : cnt3bit PORT MAP (clk,cnt);
binenc : cnt3bit PORT MAP (clk,cntbin);



END one;
Note instantiation of 2nd architecture which has output
cntbin.
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
18
Simulation

Result from simulation
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
19
Results from Quartis



Generating the FPGA for cnt3bitbin
This time encoding prevented choice of
one-hot methodology.
Conclusion:

Tool is not always right!!
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
20
A closer look

3 F/Fs

3 LUTs
4 pins

9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
21
Controlling the binary assignment


Being able to control the binary assign results
in more control for the designer and easier
design of other counters.
Can result in more efficient use of FPGA
resources.
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
22
Time for live demo



Demo of code in Modelsim
Demo of setup in Quartis
Probably want to take note of steps and
editing shortcuts.
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
23
Lecture summary

HDL from code to simulation


For the 101 sequence detector
Testbench for the sequence detector
9/2/2012 – ECE 3561 Lect
9
Copyright 2012 - Joanne DeGroat, ECE, OSU
24