我想让下面的程序输出一个单脉冲,但是为什么没有输出啊
/*将时钟分频后作为新的时钟*/
module wide_pulse(
input wire pulse,
input wire clk,
input wire clr,
//output wire clk_in,
output reg clk_out,
output wire outpw
);
reg delay1;
reg delay2;
reg delay3;
always @(posedge clk) //意在对时钟信号进行分频处理
begin
if(!clr)
clk_out=0;
else
clk_out=~clk_out;
end
always @ (posedge clk_out or posedge clr)
begin
if(clr==1)
begin
delay1<=0;
delay2<=0;
delay3<=0;
end
else
begin
delay1<=pulse;
delay2<=delay1;
delay3<=delay2;
end
end
assign outpw=delay1 & delay2 & ~delay3;
endmodule
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这段代码问题比较多,出不来“单”脉冲问题有
1、逻辑问题, assign outpw=delay1 & delay2 & ~delay3; 改成 outpw=delay1 & ~delay2 即可。
2、复位问题,前一段always低电平复位,后一段高电平复位,也就是说clr不管是置高还是拉低,都有一个模块一直出于复位状态,结果就是。。。没结果。
对于复位还需提一点,楼主的两段always前一段用的是同步复位,后一段用异步复位。
在FPGA里的寄存器一般都带异步复位,所以建议在没有特殊需求的情况下统一用异步复位,可以节约资源。
谢谢啦
一周热门 更多>