FPGA毛刺的困扰
E. 这个肯定跟设计有关的.
把源程序和波形贴上来.给大伙看看
先仔细看看程序有没有错。后仿肯定有毛刺,但只要数据在时钟上升沿前后稳定就行了。
楼上有理
组合电路容易产生毛刺,最好所有的都用时序电路,个人理解。
module mod1(clk,clr,counter,en);
input clk,clr,en;
output [3:0]counter;
wire clk,clr,en;
reg [3:0]counter;
reg [3:0] counter_reg;
always @(posedge clk)
begin
if (!clr)
counter_reg<=4'b0000;
else if(en)
counter_reg<=counter_reg+4'b0001;
end
always @(posedge clk)
counter<=counter_reg;
endmodule

要正确对待毛刺,时序电路只要在clk有效沿附近没有毛刺就没有问题,计数器毕竟是组合逻辑,一定会出现竞争冒险,不碍事的。
额,少用组合逻辑吧
这个并不是毛刺,只是你counter是4位的,延时不等。延时不可能绝对相对,所以以数组看起来时就像有毛刺一样
看了小编的代码 发现一个问题 在else if(en) counter_reg<=counter_reg+4'b0001 计数器是否会溢出呢? 溢出后回到什么值? 还有后仿的的时候很容易出现毛刺的 这是因为连线的延迟造成的 只要毛刺不出现在setup/hold 这段时间内(只是针对你哥小小的代码而言哈, 在大的系统里面就要考虑毛刺的影响了), 问题并不大,
针对你上面写的这些代码,我说下:
1、你这段代码不会产生毛刺,根据你说的毛刺是因为计数器跳转导致的,这个是无法避免的正常情况。
2、第二个always语句可以不用,直接用上面的输出。
正常现象,只要时序能过就可以了。
毛刺有时候很难避免,设计的时候注意就是了
只要信号在时钟沿前后满足建立保持时间就可以了,不会有什么影响的。因为你有4个触发器,在版图上不仅每个触发器的时钟有延迟差异,触发器的输出负载也不会绝对相同,所以4个触发器的Q端不会绝对在同一时刻翻转,从仿真上看就有毛刺,但是只要信号满足建立保持时间,毛刺就不会传递下去,没有什么影响。
求助一下,如果计数器的输出做为 D触发器的复位信号,毛刺会导致错误复位,这个应该怎么办啊?
