13 |
RISC-Vプロセッサの設計 (16) |
2段FIFOの検討(3)
ここまでで全ての場合を尽くしたので、d0とdの入力条件を集め、表569.1にまとめます。
No. | State | DEQ/ENQ | d0入力制御 | d1入力制御 |
---|---|---|---|---|
0 | --- | CLR | D.C. | D.C. |
1 | State0(E:1, F:0) | !DEQ$ \cap $!ENQ | D.C. | D.C. |
2 | !DEQ$ \cap $ENQ | d_in | D.C. | |
3 | DEQ$ \cap !$ENQ | D.C. | D.C. | |
4 | DEQ$ \cap $ENQ | D.C. | D.C. | |
5 | State1(E:0, F:0) | !DEQ$ \cap $!ENQ | d0 | D.C. |
6 | !DEQ$ \cap $ENQ | d0 | d_in | |
7 | DEQ$ \cap !$ENQ | D.C. | D.C. | |
8 | DEQ$ \cap $ENQ | d_in | D.C. | |
9 | State2(E:0, F:1) | !DEQ$ \cap $!ENQ | d0 | D.C. |
10 | !DEQ$ \cap $ENQ | D.C. | D.C. | |
11 | DEQ$ \cap !$ENQ | d1 | D.C. | |
12 | DEQ$ \cap $ENQ | D.C. | d_in | |
13 | Undefined(E:1, F:1) | !DEQ$ \cap $!ENQ | D.C. | D.C. |
14 | !DEQ$ \cap $ENQ | D.C. | D.C. | |
15 | DEQ$ \cap !$ENQ | D.C. | D.C. | |
16 | DEQ$ \cap $ENQ | D.C. | D.C. | |
D.C.=Don't care |
- d0に対してd_inからの入力条件をd0diとすると、表のd0入力制御の2, 8より
d0di = (!DEQ && ENQ && empty == 1 && full == 0) /* 2 */ || (DEQ && ENQ && emtpry == 0 && full == 0) /* 8 */
となるが、2に対して4, 14, 16、及び8に対して3, 4, 7のようなD.C.条件を加えて手で論理圧縮すれば、
d0di = (ENQ && empty == 1) || (DEQ && full == 0) - d0に対してd1からの入力条件をd0d1とすると、表のd0入力制御の11より
d0d1 = (DEQ && !ENQ && empty == 0 && full == 1) /* 11 */
となるが、11に対して12, 15, 16を加えて論理圧縮すれば、
d0d1 = DEQ && full == 1 - d0に対してd0からの入力条件をd0h(old)とすると、表のd0入力制御の5, 6, 9より
d0h = (!DEQ && empty == 0 && full == 0) /* 5, 6 */ || (!DEQ && !ENQ && emtpry == 0 && full == 1) /* 9 */
となるが、5, 6, 9に対して10を加えて論理圧縮すれば、
d0h = !DEQ && empty == 0 - d1に対してd_inからの入力条件をd1diとすると、表のd1入力制御の6, 12より
d1di = (!DEQ && ENQ && empty == 0 && full == 0) /* 6 */ || (DEQ && ENQ && emptry == 0 && full == 1) /* 12 */
となるが、6, 12に対して8, 10を加えて論理圧縮すれば、
d1di = ENQ && empty == 0
次にステート遷移表です。
No. | Current State | DEQ/ENQ | Next State |
---|---|---|---|
0 | --- | CLR | State0(E:1, F:0) |
1 | State0(E:1, F:0) | !DEQ$ \cap $!ENQ | State0(E:1, F:0) |
2 | !DEQ$ \cap $ENQ | State1(E:0, F:0) | |
3 | DEQ$ \cap $!ENQ | ERROR | |
4 | DEQ$ \cap $ENQ | ERROR | |
5 | State1(E:0, F:0) | !DEQ$ \cap $!ENQ | State1(E:0, F:0) |
6 | !DEQ$ \cap $ENQ | State2(E:0, F:1) | |
7 | DEQ$ \cap $!ENQ | State0(E:1, F:0) | |
8 | DEQ$ \cap $ENQ | State1(E:0, F:0) | |
9 | State2(E:0, F:1) | !DEQ$ \cap $!ENQ | State2(E:0, F:1) |
10 | !DEQ$ \cap $ENQ | ERROR | |
11 | DEQ$ \cap $!ENQ | State1(E:0, F:0) | |
12 | DEQ$ \cap $ENQ | State2(E:0, F:1) | |
13 | Undefined(E:1, F:1) | !DEQ$ \cap $!ENQ | D.C. |
14 | !DEQ$ \cap $ENQ | D.C. | |
15 | DEQ$ \cap $!ENQ | D.C. | |
16 | DEQ$ \cap $ENQ | D.C. | |
D.C.=Don't care |
この表を、DEQ/ENQ条件をキーとして並べ変えます。
No. | Current State | DEQ/ENQ | Next State |
---|---|---|---|
0 | --- | CLR | State0(E:1, F:0) |
1 | State0(E:1, F:0) | !DEQ$ \cap $!ENQ | State0(E:1, F:0) |
5 | State1(E:0, F:0) | State1(E:0, F:0) | |
9 | State2(E:0, F:1) | State2(E:0, F:1) | |
13 | Undefined(E:1, F:1) | D.C. | |
2 | State0(E:1, F:0) | !DEQ$ \cap $ENQ | State1(E:0, F:0) |
6 | State1(E:0, F:0) | State2(E:0, F:1) | |
10 | State2(E:0, F:1) | ERROR | |
14 | Undefined(E:1, F:1) | D.C. | |
3 | State0(E:1, F:0) | DEQ$ \cap $!ENQ | ERROR |
7 | State1(E:0, F:0) | State0(E:1, F:0) | |
11 | State2(E:0, F:1) | State1(E:0, F:0) | |
15 | Undefined(E:1, F:1) | D.C. | |
4 | State0(E:1, F:0) | DEQ$ \cap $ENQ | ERROR |
8 | State1(E:0, F:0) | State1(E:0, F:0) | |
12 | State2(E:0, F:1) | State2(E:0, F:1) | |
16 | Undefined(E:1, F:1) | D.C. | |
D.C.=Don't care |
ERRORの場合もステートはD.C.とし、別にエラー信号を出力するものとします。従ってD.C.を活用してステートを決定すれば、ステートはemptyとfullの組み合わせで表現できるため、
- CLRのとき、empty = 1, full = 0
- !DEQ && ENQのとき(2, 6)、empty = 0, full = !emtpy
- DEQ && !ENQのとき(7, 11)、empty = !full, full = 0
- 上記以外のときはホールド。emtpy, full共変化無し。