【原创】The solutional manual of the Verilog HDL: A Guide to Digital Design and Synthesis (2nd)—ch07II

7. Design a negative edge-triggered D-flipflop(D_FF) with synchronous clear, active high (D_FF clears only at a negative edge of clock when clear is high). Use behavioral statements only. (Hint: Output q of D_FF must be declared as reg). Design a clock with a period of 10 units and test the D_FF.

my answer:

clip_image002

clip_image004

clip_image006

8. Design the D-flipflop in exercise 7 with asynchronous clear (D_FF clears whenever clear goes high. It does not wait for next negative edge). Test the D_FF.

my answer:

clip_image008

clip_image010

9. Using the wait statement, design a level-sensitive latch that takes clock and d as inputs and q as output. q=d whenever clock=1.

my answer:

clip_image012

clip_image014

clip_image016

(p.s. 在modelsim 6.5b里测试,if可以仿真,wait会卡死。L).

10. Design the 4-to-1 multiplexer in eg 7-19 by using if and else statements. The port interface must remain the same.

my answer:

clip_image018

clip_image020

clip_image022

11. Design the traffic signal controller discussed in this chapter by using if and else statements.

my answer:

1 `define TRUE 1'b1;
2
3 `define FALSE 1'b0;
4
5 //Delays
6
7 `define Y2RDELAY 3 //Yellow to red delay
8
9 `define R2GDELAY 2 //Red to green delay
10
11 module sig_control
12
13 (hwy,cntry,X,clock,clear);
14
15 //I/O ports
16
17 output [1:0] hwy, cntry;
18
19 //2-bit output for 3 states of signal
20
21 //GREEN, YELLOW, RED
22
23 reg [1:0] hwy,cntry;
24
25 //declared output signals are registers
26
27 input X;
28
29 //if TRUE, indicates that there is car on
30
31 //the country road, otherwise FALSE
32
33 input clock,clear;
34
35 parameter RED=2'd0,
36
37 YELLOW=2'd1,
38
39 GREEN=2'd2;
40
41 //State definition HWY CONTRY
42
43 parameter S0=3'd0, //GREEN RED
44
45 S1=3'd1, //YELLOW RED
46
47 S2=3'd2, //RED RED
48
49 S3=3'd3, //RED GREEN
50
51 S4=3'd4; //RED YELLOW
52
53 //Internal state variables
54
55 reg [2:0] state;
56
57 reg [2:0] next_state;
58
59 //state changes only at postive edge of clock
60
61 always @(posedge clock)
62
63 if(clear)
64
65 state<=S0; //Controller starts in S0 state
66
67 else
68
69 state<=next_state; //State change
70
71 //Compute values of main signal and country signal
72
73 always @(state)
74
75 begin
76
77 //case(state)
78
79 //S0: ; //No change, use default
80
81 if(state==S1)
82
83 hwy=YELLOW;
84
85 else if(state==S2)
86
87 hwy=RED;
88
89 else if(state==S3)
90
91 begin
92
93 hwy=RED;
94
95 cntry=GREEN;
96
97 end
98
99 else if(state==S4)
100
101 begin
102
103 hwy=RED;
104
105 cntry=YELLOW;
106
107 end
108
109 else
110
111 begin
112
113 hwy=GREEN; //Default Light Assignment for Highway light
114
115 cntry=RED; //Default light Assignment for Country light
116
117 end
118
119 end
120
121 //State machine using case statements
122
123 always @(state or X)
124
125 begin
126
127 if(state==S0)
128
129 if(X)
130
131 next_state=S1;
132
133 else
134
135 next_state=S0;
136
137 else if(state== S1)
138
139 begin //delay some positive edges of clock
140
141 repeat(`Y2RDELAY) @(posedge clock);
142
143 next_state=S2;
144
145 end
146
147 else if(state== S2)
148
149 begin //delay some positive edges of clock
150
151 repeat(`R2GDELAY) @(posedge clock);
152
153 next_state=S3;
154
155 end
156
157 else if(state== S3)
158
159 if(X)
160
161 next_state=S3;
162
163 else
164
165 next_state=S4;
166
167 else
168
169 begin //delay some positive edges of clock
170
171 repeat(`Y2RDELAY) @(posedge clock);
172
173 next_state=S0;
174
175 end
176
177 //default:next_state=S0;
178
179 //endcase
180
181 end
182
183 endmodule

原文地址:https://www.cnblogs.com/halflife/p/1987253.html