求助各位大佬!
目的是观测到外部出现两个下降沿信号后FPGA做下一步动作(例如LED状态翻转闪烁);
外部设备定时发出两个下降沿信号,信号周期及间隔如下图。
信号通过FPGA管脚接入,FPGA内部通过程序边沿检测下降沿并统计数量(数量到达2后重新计数,并发送动作信号),但是最终发现检测结果不准确,有时候能检测到,有时候检测不到。万分感谢您的解答和建议!
下面是veriloG代码
`//边沿检测
initial num<=1’b0; //下降沿数量
reg [2:0]num;
always @(negedge signal) //输入信号
begin
if(num==3’d2)
num<=1’b1;
else
num<=num+1’b1;
end
//检测下降沿数量为2时led翻转
initial led<=1’b0;
always @(posedge CLK_50M)
begin
if(num==3’d2)
led <= ~led;
else
led <= led;
end`
哈哈,一楼二楼说的很对,我直接给你写参考代码吧!reference_code.v
判断下降沿那里改成“ else if (signal_reg[1] && (!signal_reg[0])) begin”行吗
老司机,编码很规范,大厂待过
把signal打两拍,然后去采它的下降沿,而不是直接将signal作为时钟。
你这个还是找本教程看一下,FPGA设计要求尽可能采用同步设计而不是异步设计。你代码中检查输入信号这种处理是完全错误的,FPGA的代码不是像C代码一样,C代码你写的if它就是if,但是FPGA他是工具按你写的代码去推断电路,记住它是推断你的代码表示什么电路,所以你要按它推荐的格式来写,才能保证他推断正确,找本书看一下吧。