シリアルデータ信号 (din) のエッジを検出したい。次のコードを VHDL で記述しましたが、正常に実行されていますが、エッジは 1 クロック周期の遅延で検出されます。つまり、各エッジで 1 clk_50mhz 周期の遅延で変更出力が生成されます。誰でも遅滞なくエッジを検出するのを手伝ってくれませんか。ありがとうございました。
process (clk_50mhz)
begin
if clk_50mhz'event and clk_50mhz = '1' then
if (rst = '0') then
shift_reg <= (others => '0');
else
shift_reg(1) <= shift_reg(0);
shift_reg(0) <= din;
end if;
end if;
end process;
process (clk_50mhz)
begin
if clk_50mhz'event and clk_50mhz = '1' then
if rst = '0' then
change <= '0' ;
elsif(clk_enable_2mhz = '1') then
change <= shift_reg(0) xor shift_reg(1);
end if ;
end if ;
end process ;
コードを次のように変更すると、エッジを検出できます
process (clk_50mhz)
begin
if clk_50mhz'event and clk_50mhz = '1' then
if (RST = '0') then
shift_reg <= (others=>'0');
else
shift_reg(1) <= shift_reg(0);
shift_reg(0) <= din;
end if;
end if;
end process;
change <= shift_reg(1) xor din;