Problem Set 8#
Source: DL_P8_Problem_Set_9_28_18.pdf Revision: n/a
1#
Complete the timing diagram below to illustrate the behavior of the counter.
This is a synchronous 4 bit binary counter because the counter begins at 0 and counts up to \(2^4-1\). It has active high asynchronous reset and synchronous counter-enable signals.
After \(2^4-1\) the counter will turn back to 0 and continue counting until the reset is active. After the cycle where the reset was active the value will be 1 and the counter will increment the counter if the counter-enable is active in the moment when the clock rises.
2#
Complete the circuit sketch for a four-bit counter by adding the required next-state logic gates in front of the flip-flops.
The truth table looks as follows:
q0 |
q1 |
q2 |
… |
q0n |
q1n |
q2n |
… |
---|---|---|---|---|---|---|---|
0 |
0 |
0 |
… |
1 |
0 |
0 |
… |
1 |
0 |
0 |
… |
0 |
1 |
0 |
… |
0 |
1 |
0 |
… |
1 |
1 |
0 |
… |
1 |
1 |
0 |
… |
0 |
0 |
1 |
… |
0 |
0 |
1 |
… |
1 |
0 |
1 |
… |
1 |
0 |
1 |
… |
0 |
1 |
1 |
… |
0 |
1 |
1 |
… |
1 |
1 |
1 |
… |
1 |
1 |
1 |
… |
0 |
0 |
0 |
… |
We observe:
the least significant bit is toggled every time.
After reset, a bit is set to 1 if all the less significant bits are set to 1. If the less significant bits are set to 1 again, then this bit is set to 0. In summary a bit is toggled if all the less significant bits are set to 1. But here we define only when a value should change and does not describe the next value combinationally.
A bit only depends on the last value of itself and the bits which are less significant.
q1n is 1 if
(q0 & ~q1) | (~q0 & q1)
. This corresponds to the exclusive-or operatorq0 ^ q1
.q2n is 1 if:
( q0 & q1 & ~q2) | (~q0 & ~q1 & q2) | ( q0 & ~q1 & q2) | (~q0 & q1 & q2)
We observe that q2 must be 0 if q0 and q1 are 1, q2 must be 1 in other conditions of q0 and q1. So either q2 is true or (q0 & q1). This corresponds to the exclusive-or operation:
(q0 & q1) ^ q2
.
We can generalize this formula for the further bits:
process @(posedge clk) begin
assign
q0 = 1 ^ q0;
q1 = q0 ^ q1;
q2 = (q0 & q1) ^ q2;
q3 = (q0 & q1 & q2) ^ q3;
end