一度くらいソースコードを乗せないと^-^;
私がものすごいハマった件についてのエントリです。VHDLで、信号が変わったタイミングを拾いたい!っていうときが、少なからずあると思います。
たとえば、LからHになる瞬間をキャプチャしたいってとき。
______---------_______
なんて信号が変化するときに回路ロジックとしては
______-_______________
ってな信号出したいことがあるとします。
このときには、入力信号を一度F/Fで受けてからXORで比較して出力する形にするとうまくいきます。
--------------------------------------------------
library ieee ;
use ieee.std_logic_1164.all ;
entity inptest is
port (
clock : in std_logic; -- 基準クロック
input : in std_logic; -- 入力シグナル
output : out std_logic -- 出力シグナル
);
end inptest;
architecture rtl of inptest is
signal reg_input : std_logic;
begin
process ( clock )
begin
if ( rising_edge( clock ) ) then
reg_input <= input;
if ( reg_input /= input and input = '1' ) then
output <= '1';
else
output <= '0';
end if;
end if;
end process;
end rtl;
---------------------------------------------------
入力信号と出力信号を確認してみると、

となって、入力のパルスに対応して出力されていることがわかります。
このとき、中身のRTLは

のように生成されていて、入力に対してクロック遅延を持ったレジスタと入力そのものがXORになっているのがわかるかと思います。
投稿日時 : 2007年3月12日 20:59