Файл: Digital design with CPLD applications and VHDL (R. Dueck, 2000).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.06.2025

Просмотров: 8079

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

10.5

• Unused States in State Machines

485

FIGURE 10.33

unused3

Example 10.4

X /00

0/00

State Diagram for Two-pulse

111

Generator Showing Unused

unused2

States

110

X /00

in1/out1, out2

start

unused1

X /00

000

X /01

1/00

101

pulse2

wait1

1/00

100

001

X /10

0/00

pulse1

wait2

011

010

1/00

0/00

Thus the machine waits for a HIGH-LOW-HIGH input sequence and generates a pulse

sequence on two outputs.

EXAMPLE 10.5

Use classical state machine design techniques to implement the state machine described in

the modified state diagram of Figure 10.33. Draw the state machine as a Graphic Design

File in Max PLUS II and create a simulation to verify its function.

Solution Table 10.6 shows the state table of the state machine represented by Figure 10.33.

Table 10.6 State Table for State Machine of

Figure 10.33

Present

Next

State

Input

State

Outputs

Q2Q1Q0

in1

Q2Q1Q0

out1

out2

000

0

000

0

0

000

1

001

0

0

001

0

010

0

0

001

1

001

0

0

010

0

010

0

0

010

1

011

0

0

011

0

100

1

0

011

1

100

1

0

100

0

000

0

1

100

1

000

0

1

101

0

000

0

0

101

1

000

0

0

110

0

000

0

0

110

1

000

0

0

111

0

000

0

0

111

1

000

0

0


486 C H A P T E R 1 0 • State Machine Design

Figure 10.34 shows the Karnaugh maps used to simplify the next-state equations for the state variable flip-flops. The output equations can be simplified by inspection.

The next-state and output equations for the state machine are:

Q0 in1

Q0 in1

Q0 in1

Q2 Q1

00

01

11

10

Q2 Q1

00

01

11

10

Q2 Q1

00

01

11

10

00

0

0

0

0

00

0

0

0

1

00

0

1

1

0

01

0

0

1

1

01

1

1

0

0

01

0

1

0

0

11

0

0

0

0

11

0

0

0

0

11

0

0

0

0

10

0

0

0

0

10

0

0

0

0

10

0

0

0

0

D2

D1

D0

FIGURE 10.34

Example 10.5

K-Maps for Two-pulse Generator

D2 Q2Q1Q0

D1 Q2Q1Q0 Q2Q1Q0in1 D0 Q2Q0in1 Q2Q1in1 out1 Q2Q1Q0

out2 Q2Q1Q0

Figure 10.35 shows the Graphic Design File schematic for the state machine. Figure 10.36 shows the MAX PLUS II simulation waveforms.

We can monitor the state variables in the MAX PLUS II simulation file by adding a group of waveforms for the buried nodes q2, q1, and q0. These are shown on the simulation as q[2..0].Q, meaning the Q outputs of the flip-flops named q2, q1, q0.

To add the buried nodes, select Enter Node from SNF from the Node menu in the simulator window. In the dialog box shown in Figure 10.37, check the box that says All, and click on List. Select the nodes q2.Q, q1.Q, and q0.Q from the Available Nodes and Groups and transfer them to the Selected Nodes and Groups. ClickOK. Select the three new waveforms and from the Node menu, select Group. Click OK in the resulting dialog box.


487

INPUT

in1

q2

q1

q0

NOT

NOT

NOT

NOT

AND3

DFF

d2

d2

PRN

q2

AND3

D

Q

CLRN

OR2

d1

AND4

DFF

d1

PRN

q1

D

Q

AND3

CLRN

OR2

d0

AND3

DFF

d0

PRN

q0

D

Q

INPUT

clk

CLRN

AND3

OUTPUT

out1

AND3

OUTPUT

out2

FIGURE 10.35

Example 10.5

Two-pulse Generator


488 C H A P T E R 1 0 • State Machine Design

FIGURE 10.36

Example 10.5

Simulation of a Two-pulse

Generator (GDF)

FIGURE 10.37

Adding Buried Nodes to a

Simulation

EXAMPLE 10.6

Write the VHDL code required to implement the two-pulse generator described in Exam-

ples 10.4 and 10.5. Create a MAX PLUS II simulation to verify the operation of the

design. Based on your examination of the simulations for the VHDL design and the GDF

design of the previous example, how do the two designs differ in their operation? What is

the reason for the difference?

Solution The VHDL code for the state machine in design entity two_pulse.vhd fol-

lows. The unused states are accounted for in the others clause.

-- two_pulse.vhd

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY two_pulse IS

PORT(

clk, in1

: IN

STD_LOGIC;

output

: OUT

STD_LOGIC_VECTOR (1 to 2));

END two_pulse;

ARCHITECTURE a OF two_pulse IS

TYPE SEQUENCE IS (start, wait1, wait2, pulse1, pulse2);

SIGNAL pulse_state : SEQUENCE;

BEGIN

PROCESS(clk)

BEGIN

IF (clk‘EVENT and clk = ‘1’) THEN

CASE pulse_state IS


two_pulse.vhd two_pulse.scf two_pulse.rpt

10.38

10.6

of a Two-pulse (VHDL)

10.6

• Unused States in State Machines

489

WHEN start =>

IF in1 = ‘0’ THEN

pulse_state

<= start;

output

<= “00”;

ELSIF in1 = ‘1’ THEN

pulse_state <= wait1;

output

<= “00”;

END IF;

WHEN wait1 =>

IF in1 ‘0’ THEN

pulse_state

<= wait2;

output

<= “00”;

ELSIF in1 = ‘1’ THEN

pulse_state <= wait1;

output

<= “00”;

END IF;

WHEN wait2 =>

IF in1 = ‘0’ THEN

pulse_state

<= wait2;

output

<= “00”;

ELSIF in1 = ‘1’ THEN

pulse_state <= pulse1;

output

<= “00”;

END IF;

WHEN pulse1 =>

pulse_state

<= pulse2;

output

<= “10”;

WHEN pulse2 =>

pulse_state

<= start;

output

<= “01”;

WHEN others =>

pulse_state

<= start;

output

<= “00”;

END CASE;

END IF;

END PROCESS;

END a;

Figure 10.38 shows the MAX PLUS II simulation of the state machine.

If you closely examine the simulation waveforms in Figures 10.36 and 10.38, you will note that the pulse outputs in Figure 10.38 (VHDL design) occur one clock cycle later than they do in Figure 10.36 (graphical design). This is because the VHDL compiler has synthesized each output with a D flip-flop, as we did for the single-pulse circuit in Figure