2016-11-16 9 views
0

私はある値でロードされた別のレジスタに対して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; 

のようなものを使用する方が速いのですか?それとも合成ツールはそれらが同等であると認識していますか?

+0

基本的なマッピングが1回実行されるクッキーカッターのアプローチである、より小さなインスタンス化されたシフトレジスタから '千ビット幅のシフトレジスタを構築することを検討することができます。場所とルートに影響を与える可能性がある 'shiftreg'がどのように使われているのかを実演していません。 'シフトレグ(shiftreg) 'の部分に関連する操作の地域を表現する方法はありますか? – user1155120

+0

shiftregは、前述のように同じサイズの別のレジスタへのXORで使用され、そのXORのビットが合計されて一致しないビットの数が与えられます。 – Zephyr

+0

シフトレジスタとして両方のレジスタを操作し、シフトインする際に一致しないビット数をカウントできますか?あなたは今、この合計をどのようにしていますか?そのアイデアは機能の複雑さを軽減するものではありません。単一のXORゲートと、いくつかの大きな加算機構ではなく、カウンタ。あなたは、合成されている「物」全体がどれほど複雑であるかを記述していません。 – user1155120

答えて

1

FPGAデザインでは、通常、合成時間は関係ありませんが、面積の使用率とタイミングは通常です。シフトレジスタがターゲットFPGAのリソースの大半を占める場合、シンセシスには長い時間がかかり、動作させる方法を見つけ出すことになります。いくつかの野球場では、現代のミッドレンジFPGAでタイトなタイミングで80%のフルデザインが合成されるのに通常30分かかり、&に3時間かかっています。同じ機能をまだ説明している場合は、コーディングスタイルの影響をあまり受けません。

std_logic_vectorを使用してVHDLにシフトレジスタを記述すると、std_logicの配列として定義した型またはそれ以外のものは、同じものに合成されます。

最新のザイリンクスの部品では、リセット(同期OR非同期)が記述されていない限り、少なくとも1つのLUTを64深度シフトレジスタに使用できます。同じく少数のLUTで1000の深度シフトレジスタを生成することができます。

このシフトレジスタの1000ビットすべてを他のレジスタとXORする場合は、SRL(シフトレジスタとして使用されるLUT)は使用できません。出力。これにより、全体がレジスタに格納されます。レジスタはかなり大きく、レジスタより多くのレジスタを必要とする可能性があります。ここで重要なことは、記述するハードウェアの規模と、それがターゲット部分で実現可能かどうかを考える必要があることです。

本当に深いシフトレジスタが必要な場合は、ブロックラムを使用して100,000を超える深度のシフトレジスタのように動作させることができますが、最終出力にのみアクセスする場合と同じ問題があります。

+0

典型的なタイミングに関するあなたのコメントは私のVHDLに関する一般的な経験と一致しますが、私はこの例では何を見ていません。たとえば、2^16ビットのベクトルの場合、合成後の使用率レポートによると、FPGA上で使用可能なFFの約1/4を使用する必要がありますが、合成するだけで、試行しなくても4時間以上かかります実装。 – Zephyr

+0

@Zephyrシンセサイザーがすべきことをしていないケースに遭遇する可能性があるように、それは聞こえます。シフトレジスタの他にデザインに何か他に何かありますか?私はそれが最適化されていないと想定しているので、何かがあり、ベクトル全体に対して何かが膨大な量のLUTを消費するため、リソースが不足している可能性があります。それにもかかわらず、さらなるロジックのためにすべてのビットにアクセスできる64k深度シフトレジスタが必要な場合は、アプローチを再考することをお勧めします。 – QuantumRipple

+0

現時点では私の質問に記載されているように実装された2つのシフトレジスタと、結果を保持する同じサイズの1つの他のstd_logic_vectorがあります。最終的に私は2シフトレジスタをベクトルにXORし、結果ベクトルのビットを合計しますが、まだ実装されていません。この大きな合成時間はわずか3つの大きなベクトルで打ちます。 – Zephyr

関連する問題