再利用可能なバレル シフターを作成しようとしています。ビットの入力配列を受け取り、それらを特定の数の位置 (別の入力によって決定される) だけシフトします。モジュールをパラメータ化して、任意のn
.
必要な選択行の数はn
--> によって決定されます。つまり、SHIFT_CNT = log2(NUMBITS-1)+1
以下のコードです。std_logic_vector
または以外のポートを持つことは、私の組織では (全体的に考えても) 悪い形式と考えられているため、選択行の数にstd_logic
a を使用しました。入力ジェネリックに基づいてstd_logic_vector
の長さを調整する必要があります。std_logic_vector
2 番目のジェネリックを使用せずにこれを行う方法はありますか? この投稿を見たことがありますが、ジェネリックを扱っていません。この投稿では、ジェネリックを完全に排除するか、ログ値をジェネリックとして使用します。これは、将来のユーザーにとって直感的ではありません (またINPUT
、2 の累乗でない場合に問題が発生する可能性があります)。
以下の宣言SHIFT_CNT
は間違いなく間違っています。2 番目のジェネリックを使用せずにエンティティ宣言で長さを自動的に生成する方法はありますか?
entity BarrelShifter is
generic ( NUMBITS : integer :=8);
Port ( INPUT : in std_logic_vector (NUMBITS-1 downto 0);
OUTPUT : out std_logic_vector (NUMBITS-1 downto 0);
SHIFT_CNT : in std_logic_vector ((NUMBITS-1)'length downto 0)
);
end BarrelShifter;