16 |
RISC-Vプロセッサの設計 (19) |
1段FIFOの検討
全く同様に1段FIFOを検討します。ここでの改善点はFullになっている場合にDEQ$ \cap $ENQを実行すると、1サイクル毎にアップデート可能な制御を行うことです。
No. | State | DEQ/ENQ | d0入力制御 |
---|---|---|---|
0 | --- | CLR | D.C. |
1 | State0(E:1, F:0) | !DEQ$ \cap $!ENQ | D.C. |
2 | !DEQ$ \cap $ENQ | d_in | |
3 | DEQ$ \cap !$ENQ | D.C. | |
4 | DEQ$ \cap $ENQ | D.C. | |
9 | State1(E:0, F:1) | !DEQ$ \cap $!ENQ | d0 |
10 | !DEQ$ \cap $ENQ | D.C. | |
11 | DEQ$ \cap !$ENQ | D.C. | |
12 | DEQ$ \cap $ENQ | d_in |
表より、ENQがアサートされたらd_inを入力する制御とします。
次にステート遷移表です。
No. | Current State | ENQ/DEQ | 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:1) | |
3 | DEQ$ \cap $!ENQ | ERROR | |
4 | DEQ$ \cap $ENQ | ERROR | |
9 | State1(E:0, F:1) | !DEQ$ \cap $!ENQ | State1(E:0, F:1) |
10 | !DEQ$ \cap $ENQ | ERROR | |
11 | DEQ$ \cap $!ENQ | State0(E:1, F:0) | |
12 | DEQ$ \cap $ENQ | State1(E:0, F:1) |
これをこのまま実装するとState1の時にENQをアサートしようとしても、既にfullであるため、キューに入らない事態になります。これをfull=0として見せてやれば同時にDEQする時に限りキューに入れることができます。