Digital design with CPLD applications and VHDL (R. Dueck, 2000)
.pdf828 Answers to Selected Odd-Numbered Problems
10.9—— prob10_9.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY prob10_9 IS PORT(
clk, in1 |
: IN STD_LOGIC; |
|
out1, out2 |
: OUT STD_LOGIC); |
|
END prob10_9; |
|
|
ARCHITECTURE a OF prob10_9 IS |
|
|
TYPE PULSER IS (s0, s1, s2, s3); |
|
|
SIGNAL sequence: PULSER; |
|
|
BEGIN |
|
|
PROCESS (clk) |
|
|
BEGIN |
|
|
IF clk‘EVENT AND clk = ‘1’ THEN |
|
|
CASE sequence IS |
|
|
|
WHEN s0 => |
|
|
IF in1 = ‘1’ THEN |
|
|
sequence <= s0; |
—— no change if in1 = 1 |
|
out1 <= ‘0’; |
|
|
out2 <= ‘0’; |
|
|
ELSE |
|
|
sequence <= s1; |
—— proceed if in1 = 0 |
|
out1 <= ‘1’; |
—— pulse on out1 |
|
out2 <= ‘0’; |
|
|
END IF; |
|
|
WHEN s1 => |
|
|
IF in1 = ‘0’ THEN |
|
|
sequence <= s1; |
—— outputs LOW |
|
out1 <= ‘0’; |
|
|
out2 <= ‘0’; |
|
|
ELSE |
|
|
sequence <= s2; |
|
|
out1 <= ‘0’; |
|
|
out2 <= ‘1’; |
—— pulse on out2 |
|
END IF; |
|
|
WHEN s2 => |
|
sequence <= s0; out1 <= ‘0’; out2 <= ‘0’;
WHEN others =>
sequence <= s0; out1 <= ‘0’; out2 <= ‘0’;
END CASE;
END IF;
END PROCESS;
END a;
See Figure ANS10.9.
Answers to Selected Odd-Numbered Problems |
829 |
FIGURE ANS10.9
10.11LIBRARY ieee;
USE ieee.std_logic_1164.ALL; ENTITY prob10_11 IS
PORT(
clk, go, reset, eoc : IN STD_LOGIC;
sc, oe |
: OUT STD_LOGIC); |
END prob10_11; |
|
ARCHITECTURE a OF prob10_11 IS
TYPE ADC IS (idle, start, waiting, read);
SIGNAL state: ADC;
SIGNAL outputs: STD_LOGIC_VECTOR(1 downto 0);
BEGIN
sc <= outputs(1); oe <= outputs(0); PROCESS (clk)
BEGIN
IF clk‘EVENT AND clk = ‘1’ THEN
IF reset = ‘0’ THEN
state <= idle; outputs <= “01”;
ELSE
CASE state IS
WHEN idle =>
IF go = ‘0’ THEN state <= idle; outputs <= “01”;
ELSIF go = ‘1’ THEN state <= start; outputs <= “11”;
END IF;
WHEN start =>
state <= waiting; outputs <= “01”;
WHEN waiting =>
IF eoc = ‘0’ THEN
state <= waiting; outputs <= “01”;
ELSIF eoc = ‘1’ THEN state <= read; outputs <= “00”;
END IF;
830 Answers to Selected Odd-Numbered Problems
WHEN read =>
state <= idle;
outputs <= “01”;
END CASE;
END IF;
END IF;
END PROCESS;
END a;
See Figure ANS 10.11.
FIGURE ANS10.11
10.13A NAND latch can only debounce a switch with a normally open and a normally closed contact: one to set and the other to reset the latch. The pushbutton on the Altera UP-1 board has only a normally open contact.
10.15 8.33 ms
10.17 Four clock periods. 8.33 ms
10.19—— prob10_19.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY prob10_19 IS PORT(
clk, in1, in2 |
: IN |
STD_LOGIC; |
out1 |
: OUT |
STD_LOGIC); |
END prob10_19; |
|
|
ARCHITECTURE a OF prob10_19 IS
TYPE STATE_TYPE IS (s0, s1, s2, s3, s4);
SIGNAL state: STATE_TYPE;
Answers to Selected Odd-Numbered Problems |
831 |
BEGIN
PROCESS (clk)
BEGIN
IF clk‘EVENT AND clk = ‘1’ THEN
CASE state IS
WHEN s0 =>
state <= s1; out1 <= ‘0’;
WHEN s1 =>
IF in1 = ‘1’ THEN state <= s1; out1 <= ‘0’;
ELSIF in1 = ‘0’ THEN state <= s2; out1 <= ‘1’;
END IF;
WHEN s2 =>
state <= s3; out1 <= ‘0’;
WHEN s3 =>
state <= s4; out1 <= ‘0’;
WHEN s4 =>
IF in2 = ‘1’ THEN state <= s4; out1 <= ‘0’;
ELSIF in2 = ‘0’ THEN state <= s0; out1 <= ‘1’;
END IF;
END CASE;
END IF;
END PROCESS;
END a;
See Figure ANS10.19
FIGURE ANS10.19
Answers to Selected Odd-Numbered Problems |
835 |
TYPE state_type IS (start, wait1, wait2, read, store);
SIGNAL state: state_type;
SIGNAL outputs: STD_LOGIC_VECTOR (1 to 3);
BEGIN
PROCESS (clock, reset)
BEGIN
IF (reset = ‘0’) THEN state <= start; outputs <= “000”;
ELSIF (clock‘EVENT and clock = ‘1’) THEN
CASE state |
IS |
|
WHEN |
start => |
|
|
state <= wait1; |
|
|
outputs |
<= “100”; |
WHEN |
wait1 => |
|
|
IF (eoc |
= ‘1’) THEN |
|
state <= wait1; |
|
outputs <= “000”; |
|
ELSIF (eoc = ‘0’) THEN |
|
state <= wait2; |
|
outputs <= “000”; |
|
END IF; |
|
WHEN wait2 => |
|
IF (eoc = ‘0’) THEN |
|
state <= wait2; |
|
outputs <= “000”; |
|
ELSIF (eoc = ‘1’) THEN |
|
state <= read; |
|
outputs <= “011”; |
|
END IF; |
|
WHEN read => |
|
state <= store; |
|
outputs <= “010”; |
|
WHEN store => |
|
state <= start; |
|
outputs <= “000”; |
|
END CASE; |
END IF; |
|
sc |
<= outputs(1); |
oe |
<= outputs(2); |
en |
<= outputs(3); |
END PROCESS;
END adc;
See Figure ANS12.41.
12.43 23.5 kHz
FIGURE ANS12.41
|
|
|
|
Answers to Selected Odd-Numbered Problems |
837 |
|||||
13.25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Device |
Start Address |
End Address |
Size |
|||
0000H |
|
|
|
|
|
|
|
|
||
EPROM |
0000H |
3FFFH |
16K |
|||||||
|
|
|||||||||
|
|
|
|
|||||||
|
|
|
|
SRAM1 |
4000H |
7FFFH |
16K |
|||
|
|
|
|
SRAM2 |
8000H |
BFFFH |
16K |
|||
4000H |
|
|
SRAM3 |
E000H |
FFFFH |
8K |
||||
RAM0 |
|
|
|
|
|
|
|
|||
|
|
|
13.27 |
16 DIMMs |
|
|
|
|||
|
|
|
|
|
|
|
||||
8000H |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|||
A000H |
RAM1 |
|
|
Device |
Start Address |
End Address |
|
|
||
RAM2 |
|
0 |
0000000H |
0FFFFFFH |
|
|||||
|
|
|
|
|||||||
|
|
|
1 |
1000000H |
1FFFFFFH |
|
||||
BFFFH |
|
|
|
|
||||||
|
|
|
2 |
2000000H |
2FFFFFFH |
|
||||
|
|
|
|
|
||||||
|
|
|
|
3 |
3000000H |
3FFFFFFH |
|
|||
|
|
|
|
4 |
4000000H |
4FFFFFFH |
|
|||
FFFFH |
|
|
|
5 |
5000000H |
5FFFFFFH |
|
|||
|
|
|
6 |
6000000H |
6FFFFFFH |
|
||||
|
|
|
|
|
||||||
FIGURE ANS13.23 |
7 |
7000000H |
7FFFFFFH |
|
||||||
|
|
|
|
8 |
8000000H |
8FFFFFFH |
|
|||
|
|
|
|
9 |
9000000H |
9FFFFFFH |
|
|||
|
|
|
|
10 |
A000000H |
AFFFFFFH |
|
|||
|
|
|
|
11 |
B000000H |
BFFFFFFH |
|
|||
|
|
|
|
12 |
C000000H |
CFFFFFFH |
|
|||
|
|
|
|
13 |
D000000H |
DFFFFFFH |
|
|||
|
|
|
|
14 |
E000000H |
EFFFFFFH |
|
|||
|
|
|
|
15 |
F000000H |
FFFFFFFH |
|
|||
|
|
|
|
|
|
|
|
|
|