2

VHDLプロセスでaをa+1に割り当てるステートメントを作成する場合、それは良い習慣ですか?

シミュレーターは正常に動作するため、これについて混乱していますが、FPGAに実装しようとすると、合成ツールがラッチの作成について文句を言います。

これは何を意味するのでしょうか?

4

3 に答える 3

7

このようなステートメントは、クロックプロセスでのみ実行する必要があります。合成したい場合は、追加の初期化(リセット)をお勧めします。次のようになります。

process(clk, reset)
begin
   if reset='1' then
      a <= 0;
   elsif rising_edge(clk) then
      a <= a + 1;
   end if;
end process;
于 2013-03-13T06:40:17.220 に答える
5

クロックプロセスでは、これで問題ありません。他のどこでも、おそらくそうではありません。

于 2013-03-12T22:38:30.753 に答える
3

クロックプロセスでそれを行います、それは問題ありません。これは、「の次の値は+1aの現在の値である必要がある」という意味です。a


(プロセスの外で)継続的な割り当てとしてそれを行う場合、あなたが言っているのは、自己参照ループである「aは常にそれに割り当てられた+1を取得している」ということです!

a有効なプロセスの感度リストに含めると、同じ効果が得られます

process (en, a)
begin
   if en = '1' then 
      a <= a + 1;
   end if;
end process;

(このフォームを使用して、透明なラッチを作成できます。

process (en, insig)
begin
   if en = '1' then 
      a <= insig;
   end if;
end process;

)。


クロックされていないプロセスでそれを行う場合、これは以下に敏感ではありませんa

process (en)
begin
   if en = '1' then 
      a <= a + 1;
   end if;
end process;

aの変更間でその値を維持する必要があるため、ポジティブエッジでトリガーされるラッチを作成しますen。事実上、end型フリップフロップのクロックになります。

于 2013-03-13T13:24:35.853 に答える