2011-07-31 17 views
3

私は以下のステートメントを頻繁に使用しました。しかし、私たちは本当に上記の文でclock'eventを記述する必要がイベントの必要性

if (clock'event and clock = '1') then 
      [do something] 

をだろうか? はいの場合、なぜですか?

答えて

5

clock'eventの条件がなくてもシミュレーションが完璧に動作しますが、合成が間違っています。

合成可能なVHDLのIEEE規格には、clock'eventを追加するが必要です。 代わりにif rising_edge(clock)を書くのが一般的に受け入れられています。これはあなたの意図をより良く伝えます。 rising_edgefalling_edgeの両方の関数が合成可能なVHDL構造として使用できます。シミュレーションのために

clockはちょうど(ノーメタ値)バック「0」から「1」に切り替わると、 行動は、あなたが取得したいものに同一であると仮定すると
process (clock) is 
-- stuff 
begin 
if clock='1' then -- EVIL! don't do this 
    -- do things 
end if; 
end process; 

clock'eventの状態。繰り返しますが、これはあなたが望むものに合成されません!おそらくDフリップフロップではなく、ラッチを得るでしょう。

(これを合成しようとすると、結果を取り戻す誰のためのボーナスポイント!)

-3

はい、それ以外の場合、次のコードは、クロックの立ち上がりエッジだけでなく、クロック信号がハイの時間全体を実行します。

+3

ない真の感度リストの信号のいずれかが変更されたときに、プロセスにのみトリガされます。 – Philippe

関連する問題