4

シリアルデータ信号 (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; 
4

2 に答える 2