原创 如何在检测方波上升沿时,输出一个窄脉冲

2009-11-3 15:23 9614 11 11 分类: FPGA/CPLD

  现有一方波输入信号,想在它每个上升沿出现时,就输出一个窄脉冲信号!


求教:如何在检测方波上升沿时,输出一个窄脉冲



清风淡:这个简单:
signal clk_r1 : std_logic;
process(clk)
begin
     if rising_edge(clk) then
          clk_r1 <= Square_wave;
    end if;
end process;

pulse_signal <= clk and (not clk_r1);

pulses_signal  
就是要输出的脉冲信号。


lanyabt (2008-3-06 21:25:06)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


signal shift:std_logic_vector(1 downto 0);

process(clk)
begin
     if clk'event and clk='1' then
           shift(1)<=shift(0);
           shift(0)<=square_wave;
    end if;
end process;

process(clk)
begin
     if clk'event and clk='1' then
          if shift="01" then
               plus<='1';
          else
               plus<='0';
         end if;
end process;


清风淡


lanyabt 兄,你的写法,出来的脉冲要比方波的上升沿延迟一个clk的时钟周期哦。

两种方法我都用过。


lanyabt


QUOTE:


原帖由 清风淡 2008-3-7 18:31 发表 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
lanyabt
兄,你的写法,出来的脉冲要比方波的上升沿延迟一个clk的时钟周期哦。

两种方法我都用过。


是啊

不过你那种写法我觉得不合适
在时钟上升沿到来之后假设检测到方波上升
clk=1   clk_1=1clk and (not clk_1)怎么会有个脉冲呢?
如果你说clk_1会落后于clk的话由一个冒险行为获得一个脉冲也没什么意义把.


 


 


Verilog程序的:

module edge_check(risingedge,clk,state);
output risingedge;
input clk,state;  //state
表示边沿信号
reg [2:0]a;  //a
用来存储相邻的边沿信号的三个状态
always@(posedge clk)
a<={a[1:0],state};
assign risingedge=(a[1:0]==2'b01) ? 1:0;
endmodule

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条