现有一方波输入信号,想在它每个上升沿出现时,就输出一个窄脉冲信号!
求教:如何在检测方波上升沿时,输出一个窄脉冲
清风淡:这个简单:
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=1那clk 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
文章评论(0条评论)
登录后参与讨论