0

単に次のようなコードを持っている:

if(rising_edge(clk)) then
    temp(0):="001";
    temp(1):="011";
    temp(2):="101";
    temp(3):="000";
    temp(0):=temp(3)xor temp(5);
end if

上記の例では、このすべての変数の割り当てが 1 クロック サイクルで行われるため、かなり非現実的です。ビヘイビアー シミュレーションでは問題なく動作しますが、合成後では問題が発生します。次の行にジャンプする前に変数がその値を取得するまで待機させるために、遅延または待機(待機ステートメントは合成不可能)のようなsthを追加できますか?

4

2 に答える 2

0

合成では、待機などの遅延を行うことはできません。合成で明確に定義された制御可能な遅延は、パイプライン (遅延単位としてのクロック サイクル) でのみ作成できます。

于 2013-03-26T06:47:31.413 に答える
0

これらすべてを 1 クロック サイクルで実行するのは簡単です。ハードウェアは非常に高速で、FPGA のクロック レートはプロセッサに比べてそれほど高くありません。

変数を使用しているため、中間結果がすぐに使用されます。より明示的な遅延が必要な場合は、信号を使用できます。信号を含む上記のコードはtemp(3)、前の立ち上がりエッジから使用します。

于 2013-03-25T19:02:19.530 に答える