新手请教VHDL延迟的问题
CLK和IN是输入,OUT是要延迟输出的信号。我想要在IN的上升沿使OUT输出高电平保持4个CLK后再恢复为低电平
我是新手,写来写去,折腾了好久,都仿真出不了图上预期的效果
希望得到大家的指点,谢谢!
本帖最后由 雪夜虫子 于 2021-12-23 10:43 编辑
先取IN的上升沿(IN AND (NOT IN_dly1)),再把上升沿延迟3个周期,最后把上升沿和它的延迟1周期、2周期、3周期的三个版本OR一下。
也可以先取IN的上升沿,用上升沿将一个信号(OUT_A)拉高,同时启动一个模三的计数器,在计数器计数3个周期时把信号(OUT_A)拉低,最后用OUT_A和上升沿OR一下。这个可以满足任意周期长度的需要,且只有1个OR,时序会更好。 本帖最后由 gaominjie 于 2021-12-23 13:36 编辑
雪夜虫子 发表于 2021-12-23 10:41
先取IN的上升沿(IN AND (NOT IN_dly1)),再把上升沿延迟3个周期,最后把上升沿和它的延迟1周期、2周期、 ...
谢谢您的耐心指导!我试着用第2种方法,可我没有准确理解您的意思,而且代码也不一定对,等您有空了再指点我一下。谢谢!
signal OUT_A: std_logic;
signal INBUF: std_logic_vector(0 to 1);
process(CLK)
begin
if CLK'event and CLK = '1' then
INBUF(0) <= IN_PIN;
INBUF(1) <= INBUF(0);
end if;
end process;
process(CLK)
variable CNT3: integer range 0 to 3;
begin
if CLK'event and CLK = '1' then
if INBUF(0) = '1' and INBUF(1) = '0' then --IN上升沿
OUT_A <= '1';
CNT3 := CNT3 + 1;
end if;
if CNT3 = 3 then
CNT3 := 0;
OUT_A <= '0';
end if;
OUT_PIN <= OUT_A or INBUF(0);
end if;
end process; 您说的计数器 我的代码整错了 我再想想
页:
[1]