私はある値でロードされた別のレジスタに対してXORを行うシフトレジスタを持つことができます。問題は、これを大規模なベクトル、何千ビットものオーダーのもので行うことです。大きなベクトルのための最も効率的なVHDL?
長さは、ここで、これは大規模な事業になっ合成しようとすると、いくつかの非常に高い数値に設定されている場合、VHDLでこれを行うには明白な方法は、しかし
generic(length : integer := 15);
signal shiftreg : std_logic_vector(length downto 0);
process(clk)
begin
if rising_edge(clk) then
shiftreg<= shiftreg(length-1 downto 0) & input;
endif;
end process;
ようなものになるだろう。これは比較的シンプルな構造なので、長さが単一のブロック内のレジスタの数をはるかに超えているため、時間がかかりすぎると思います。
私の質問は、このような大きなベクトルを合成する方が速い方法で実装する方法があるかどうかです。例えば、
array(length downto 0) of std_logic;
のようなものを使用する方が速いのですか?それとも合成ツールはそれらが同等であると認識していますか?
基本的なマッピングが1回実行されるクッキーカッターのアプローチである、より小さなインスタンス化されたシフトレジスタから '千ビット幅のシフトレジスタを構築することを検討することができます。場所とルートに影響を与える可能性がある 'shiftreg'がどのように使われているのかを実演していません。 'シフトレグ(shiftreg) 'の部分に関連する操作の地域を表現する方法はありますか? – user1155120
shiftregは、前述のように同じサイズの別のレジスタへのXORで使用され、そのXORのビットが合計されて一致しないビットの数が与えられます。 – Zephyr
シフトレジスタとして両方のレジスタを操作し、シフトインする際に一致しないビット数をカウントできますか?あなたは今、この合計をどのようにしていますか?そのアイデアは機能の複雑さを軽減するものではありません。単一のXORゲートと、いくつかの大きな加算機構ではなく、カウンタ。あなたは、合成されている「物」全体がどれほど複雑であるかを記述していません。 – user1155120