異なるデータ幅のパスを継ぐためのアダプタです.
REDUCER とは配管用語で径違い継ぎ手、つまり直径違う配管(パイプ)を接続 するために用いる管継手のことです. 論理回路の世界でも、ビット幅の異なるデータパスどうしを継ぐことが多い のでこのような汎用のアダプタを作って REDUCER という名前をつけました.
ちょっと汎用的に作りすぎたせいか、多少回路が冗長です.
特にI_WIDTHが大きいとかなり大きな回路になってしまいます.
例えば32bit入力64bit出力の場合、
WORD_BITS=8 、ENBL_BITS=1、I_WIDTH=4、O_WIDTH=8 とするよりも、
WORD_BITS=32、ENBL_BITS=4、I_WIDTH=1、O_WIDTH=2 としたほうが
回路はコンパクトになります.
O_WIDTH>I_WIDTHの場合、最初のワードデータを出力する際のオフセットを設定できます.
例えばWORD_BITS=8、I_WIDTH=1、O_WIDTH=4(1バイト入力4バイト出力)の場合、
OFFSET="0000"に設定すると、最初に入力したバイトデータは1バイト目から出力されます.
OFFSET="0001"に設定すると、最初に入力したバイトデータは2バイト目から出力されます.
OFFSET="0011"に設定すると、最初に入力したバイトデータは3バイト目から出力されます.
OFFSET="0111"に設定すると、最初に入力したバイトデータは4バイト目から出力されます.
少し変わった使い方として、I_WIDTH以下の任意のワード数を入力して、O_WIDTHの固定長の ワード数がたまった毎に出力させるようにできます。
残念ながらテストベンチは未完成です。すべてのパターンのテストをしているわけではありません。
1.5.1以前のバージョンでは、2013年9月2日現在、Xilinx Vivado2013.2 にて、以下のジェネリック変数で論理合成すると、 論理合成が終了しないという問題があることがわかっています。
generic map (
WORD_BITS => 8,
STRB_BITS => 1,
I_WIDTH => 8,
O_WIDTH => 4,
QUEUE_SIZE => 0,
VALID_MIN => 0,
VALID_MAX => 0,
I_JUSTIFIED => 0,
FLUSH_ENABLE=> 0
)
1.5.2以降のバージョンでは、正常に論理合成できるようになりました。 さらに、若干の動作周波数が向上しています。 その代償として、可読性が少し悪くなっています。
二条項BSDライセンス (2-clause BSD license) で公開しています。