Posts Issued on December 9, 2022

posted by sakurai on December 9, 2022 #567

2段FIFOの検討

BSVのデフォルトである2段FIFOの動作を、新規設計するつもりで一から検討します。

2段FIFOなのでレジスタを2段持ち、それぞれd0とd1と名前を付けます。ライブラリと同様にd0からFIFO出力を固定的に出力するものとします。

図%-%.1
図567.1 2段FIFOの動作
図567.1の説明を以下に示します。
  • 2段FIFOのFIFOの有効段の数は0個、1個、2個なので、その数をステートと扱えば、サブシステムのステートにはState0~State2の3種類があることになります。
  • 一度に2個をキューに入れることはできないので、エンキュー(以下ENQ)の場合は、State0⇒State1⇒State2のように遷移します。
  • 逆にデキュー(以下DEQ)の場合はState2⇒State1⇒State0のように遷移します。
  • State0のときにDEQ、State2のときにENQが起きるとエラーとなります(赤色で表現)。
  • DEQの場合に後段へデータを出力しますが、必ずd0から出力するように制御します。そのため、ENQの際にはステートにより格納する段が変わります。
  • 具体的にはState0のときにENQであればd0に格納
  • State1のときにENQであればd1に格納
  • State2のときにENQであればエラー(前述)、DEQであればd0を外に移してd1をd0に移し、d1を無効化
  • State1のときにDEQであればd0を外に移してd0を無効化
  • 上記無効化のフラグビットは不要です。ステート遷移先はステートと遷移条件で決まり、ステートにより有効段はあらかじめ確定しているためです。具体的にはState0は有効段無し、State1は有効段はd0のみ、State2は有効段はd0とd1と定まっています。

左矢前のブログ 次のブログ右矢