Skip to content

Latest commit

 

History

History
executable file
·
58 lines (45 loc) · 2.79 KB

reducer.md

File metadata and controls

executable file
·
58 lines (45 loc) · 2.79 KB

Data Path Reducer Module

概要

異なるデータ幅のパスを継ぐためのアダプタです.

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の固定長の ワード数がたまった毎に出力させるようにできます。

TODO

残念ながらテストベンチは未完成です。すべてのパターンのテストをしているわけではありません。

注意

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) で公開しています。