- ベストアンサー
VHDLのprocessとeventについての質問
- VHDLのprocessとeventの書き方について質問です。黄金パターンとされるprocess (CLOCK,RESET)の中で、event文を除去するとどのような違いが生じるか知りたいです。
- processは()内の状態が変わるたびにendまでの処理が同時に行われるとされています。一方、eventは指定した信号が変化したときにのみ実行されます。なぜprocessとeventを組み合わせて使用する必要があるのでしょうか。
- シミュレーションを行った結果、processにeventがあるかないかで変化は見られませんでした。しかし、厳密に何が起きているのか知りたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
私もVHDLをかじっただけの人間なので詳しいことはわかりませんが、参考になれば幸いです。 憶測ですが、言語で決まった書き方をすることはコンパイラに対し、明示的に一定の回路を形成するための指示を与えることができるような気がします。例えば entity Led_test is Port ( CLK : in STD_LOGIC; RESET : in STD_LOGIC; OUT0 : out STD_LOGIC); end Led_test; architecture Behavioral of Led_test is signal sub_out : std_logic; begin process(CLK,RESET)begin if(RESET= '1')then sub_out <= '1'; elsif(CLK'event and CLK = '1')then sub_out <= sub_out xor '1'; else end if; end process; OUT0 <= sub_out; end Behavioral; のような記述をした場合、Xilinx ISE 11でデバイスがXC9572の場合は出力までの遅延が6.5nsと出ました。 一方、eventを省いた場合は出力ラッチが複数あるというWARNINGが発生しましたが、コンパイルは成功し、遅延が10nsとなりました。この原因はデバイスとのfit行程でCLKをクロック信号、RESETをリセット信号として認識したかそうでないかの違いによるものだと思います。現に自動配置されたピンを確認すると前者ではそうなっていました。後者は通常のIOピンに接続されていたので、遅延が長くなったと思われます。 結局、結論はわからないのですが、process文とeventについては記述する方法だと私は認識しています。的外れな回答で申し訳ない。
お礼
検証結果がすべてなのかもしれませんね。わざわざありがとうございました。お礼が遅くなってしまいすみませんでした。