電子書籍の厳選無料作品が豊富!

こんにちは。VHDLのprocessとeventで質問です。
process (CLOCK,RESET)
begin
if(RESET = '1') then
    ...(処理)
elsif(CLOCK'event and CLOCK = '1') then -- ☆
    ...(処理)
end if;
end process;
で書くのは黄金パターンのようですが、
☆の行を以下のようにevent文を取り払うと、何が違うのでしょうか?
elsif(CLOCK = '1') then

諸々の解説を見ると、processは()内の状態が変わったときにendまでのものが同時に処理されるという解説があり、eventはその指定された信号が変わったときにtrueなわけですよね。それでは何故processとeventを併用する必要性があるのでしょうか?

シミュレーションをやった感じでは何にも変わり映えしないのですが…厳密に何が起きているか知りたいのです。

A 回答 (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については記述する方法だと私は認識しています。的外れな回答で申し訳ない。
    • good
    • 0
この回答へのお礼

検証結果がすべてなのかもしれませんね。わざわざありがとうございました。お礼が遅くなってしまいすみませんでした。

お礼日時:2010/04/18 02:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!