gpt4 book ai didi

VHDL 边缘检测

转载 作者:行者123 更新时间:2023-12-01 02:24:44 25 4
gpt4 key购买 nike

我想检测串行数据信号 (din) 上的边缘。我在 VHDL 中编写了以下代码,该代码运行成功,但检测到的边沿有一个时钟周期延迟,即在每个边沿有一个 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;

最佳答案

干得好

library ieee;
use ieee.std_logic_1164.all;

entity double_edge_detector is
port (
clk_50mhz : in std_logic;
rst : in std_logic;
din : in std_logic;
change : out std_logic
);
end double_edge_detector;

architecture bhv of double_edge_detector is

signal din_delayed1 :std_logic;

begin
process(clk_50mhz)
begin
if rising_edge(clk_50mhz) then
if rst = '1' then
din_delayed1 <= '0';
else
din_delayed1 <= din;
end if;
end if;

end process;

change <= (din_delayed1 xor din); --rising or falling edge (0 -> 1 xor 1 -> 0)


end bhv;

关于VHDL 边缘检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com