微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA毛刺的困扰

FPGA毛刺的困扰

时间:10-02 整理:3721RD 点击:
就是一个很简单的计数器的程序,后仿的时候就出毛刺了,用的是ep1t6240系列的,用的时钟50MHz,。我不明白是quartusII自己的仿真容易出毛刺,还是调用第三方的时候也容易出毛刺。请问一下应该怎么消除,是跟时序约束有关吗,还是什么?

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触发器的复位信号,毛刺会导致错误复位,这个应该怎么办啊?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top