如何处理FPGA设计中毛刺处理现象

& & & & & 本科时学了好多关于硬件的理论问题,当时觉得一点用都没有,觉得学起来真是没劲,没意思。看不见摸不着,让人心烦。但是最近在我读状态机的时候,当讨论两段式和三段式的区别时,这个问题再次出现了,让我燃起了对他进行研究的乐趣。ps:其实还真的挺有意思的。
& & & & &1,在fpga设计时,你的功能仿真是看不见毛刺的。只有在时序仿真中才能看见毛刺。
在功能仿真中由于不考虑时序,所以认为信号的变化是同时的,所以不会存在中间的状态。但是在时序分析时,由于布局布线后总有延迟,变化不同步,产生延迟。
& & & & &2. 为什么会有毛刺?
& & & & & & &在组合逻辑电路中,当同一时刻有多个信号同时发生变化时,就可能产生毛刺。比如
10变为01.那么真中间就有可能经过11,00等状态,从而产生毛刺。
& & & & & & &门电路两个输入信号同时向相反的逻辑电平跳变的现象称为竞争。我们把由于竞争而在电路输出端可能产生尖峰脉冲的现象叫做竞争-冒险现象。
看图3.4.1(a)的例子,当输入信号A从1跳变为0时,如果B从0跳变为1,而且B首先上升,就会出现尖峰脉冲,如图3.4.2 (b)所示。
  &参考闫石的《数字电子技术》中竞争与冒险。
&3.怎么判断会不会产生毛刺呢? ps:我们分析可能会产生毛刺,但是并不一定能产生,这和时序有关。
二、冒险现象的判别&
& & 1.观察法
& & 就是看看在组合逻辑的电路中是不是存在有可能多个信号同时变化的情况。
2. 代数法&
首先,找出具有竞争能力的变量,然后逐次改变其它变量,判断是否存在冒险,是何种冒险。?
  偏&1&冒险:
  偏&0&冒险 :
 3 卡诺图法&
卡诺图3.4.2(a)中两或项相临近,当B=C=1时,有相反的逻辑变量&;卡诺图3.4.2(b)中两与项相临近,当B=C=0时,有相反的逻辑变量&。
4.毛刺的消除
& & & & &查了一些资料感觉说方法挺多,但是意义不大。于是我对其中的部分方法经行了测试和研究。下面进行分析。
& & & &(一) 硬件法:滤波电容
& & & & & & & & & & & 这个方法有效是有效,但是在fpga中不太实用。因为我们不可能去拆板子,在在输出口加电容吧,没意义。同时加电容一定会破坏波形的。图片是摘来的,谢谢了,图片作者
& & & & &(二)软件法 : &同步法
& & & & & & & & & & & & & &1. D触发器同步法
& & & & & & & & & & & & & & 这个方法是我亲自做了实验的呀,嘿嘿。因为D触发器对毛刺不敏感,只是在时钟来时输出。所以可以有效地去除毛刺。
& & & & & & & & & & & & & & 但是也不一定100%,要是毛刺正好在时钟来时产生呢(太TM的背了)。同时触发器必然会长生延迟。
& & & & & & & & & & & & & & 我把代码写到上面:
& & & & & & & & & & & & &assign y=a&b;
& & & & & & & & & & &&
& & & & & & &&wire y1;
& assign y1= a&b;
& always@(posedge clk)
& & & &y&=y1;
&查看综合后的 RTL 图为
& & & & & & & & & & & &
2.状态机法
& & & & &利用状态机来消除毛刺有他固有的好处,我理解啊,是说在进行变化时我们用状态机的方法把变化定义为状态,再有状态来触发操作,和输出。比如有a和b两个端口,我们可以定义出00 01 10 11四个状态产生四个输出。
&3.引入选通脉冲
毛刺仅发生在输入信号变化的瞬间,因此在这段时间内先将门封住,待电路进入稳态后, 再加选通脉冲选取输出结果。该方法简单易行,但选通信号的作用时间和极性等一定要合适。例如,见图3.4.4,在组合电路中的输出门的一个输入端,加入一个选通信号, 即可有效地消除任何冒险现象的影响。
3.修改逻辑设计
如图3.4.5(a)所示逻辑函数&,在B=C=1时,F=&将产生偏&1&冒险。 增加多余项BC,则当B=C=1 时,F恒为1, 所以消除了冒险。即卡诺图化简时多圈了一个卡诺圈, 如图3.4.5(b) 所示。相切处增加了一个BC圈,消除了相切部分的影响。
在负载电路对竞争-冒险所产生的尖峰脉冲不敏感时,如负载为发光器件,竞争-冒险所产生的尖峰脉冲对电路的工作没有影响,可不必考虑这一问题。
&以上部分出自:http://dig.phy./%E5%9C%A8%E7%BA%BF%E6%95%99%E5%AD%A63.files/jiaoxue3frame.files/3-5.htm,谢谢
旗下网站:
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号FPGA设计中毛刺信号的产生及消除_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
FPGA设计中毛刺信号的产生及消除
上传于|0|0|文档简介
&&电信技术 fpga、dsp
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢» 正文
如何消除仿真过程中出现的毛刺
核心提示:在组合逻辑电路中,信号要经过一系列的门电路和信号变换。由于延迟的作用使得当输入信号发生变化时,其输出信号不能同步地跟随输入信号变化,而是经过一段过渡时间后才能达&在组合逻辑电路中,信号要经过一系列的门电路和信号变换。由于延迟的作用使得当输入信号发生变化时,其输出信号不能同步地跟随输入信号变化,而是经过一段过渡时间后才能达到原先所期望的状态。这时会产生小的寄生毛刺信号,使电路产生瞬间的错误输出,造成逻辑功能的瞬时紊乱。在FPGA内部没有分布电感和电容,无法预见的毛刺信号可通过设计电路传播,从而使电路出现错误的逻辑输出。
&&&&&& 任何组合电路、反馈电路和计数器都可能是潜在的毛刺信号发生器。毛刺并不是对所有输入都有危害,如触发器的D输入端,只要毛刺不出现在时钟的上升沿并满足数据的建立保持时间,就不会对系统造成危害。而当毛刺信号成为系统的启动信号、控制信号、握手信号,触发器的清零信号(CLEAR)、预置信号(PRESET)、时钟输入信号(CLK)或锁存器的输入信号就会产生逻辑错误。任何一点毛刺都可能使系统出错,因此消除毛刺信号是FPGA设计中的一个重要问题。毛刺问题在电路连线上是找不出原因的,只能从逻辑设计上采取措施加以解决。消除毛刺的一般方法有以下几种:
&&&&& (1)利用冗余项消除毛刺
&&&&&& 函数式和真值表所描述的是静态逻辑,而竞争则是从一种稳态到另一种稳态的过程。因此竞争是动态过程,它发生在输入变量变化时。此时,修改卡诺图,增加多余项,在卡诺图的两圆相切处增加一个圆,可以消除逻辑冒险。但该法对于计数器型产生的毛刺是无法消除的。
&&&&& (2)取样法
&&&&&& 由于冒险出现在变量发生变化的时刻,如果待信号稳定之后加入取样脉冲,那么就只有在取样脉冲作用期间输出的信号才能有效。这样可以避免产生的毛刺影响输出波形。
&&&&& (3)吸收法
&&&&&& 增加输出滤波,在输出端接上小电容C可以滤除毛刺。但输出波形的前后沿将变坏,在对波形要求较严格时,应再加整形电路,该方法不宜在中间级使用。
&&&&& (4)延迟办法
&&&&&& 因为毛刺最终是由于延迟造成的,所以可以找出产生延迟的支路。对于相对延迟小的支路,加上毛刺宽度的延迟可以消除毛刺。但有时随着负载增加,毛刺会继续出现,因而这种方法也是有局限性的。而且采用延迟线的方法产生延迟更会由于环境温度的变化而使系统变不可靠。
&&&&& (5)锁存办法
&&&&&& 当计数器的输出进行相&与&或相&或&时会产生毛刺。随着计数器位数的增加,毛刺的数量和毛刺的种类也会越来越复杂。此时,可通过在输出端加D触发器加以消除。信号处理过程中毛刺滤波一些方法 - eeleader的日志 -
电子工程世界-论坛
信号处理过程中毛刺滤波一些方法
已有 3532 次阅读 11:12
|个人分类:|
&&&& 在采集一组并行接口信号时,发现接收到的数据非常不稳定。用示波器测量几个用于同步的控制信号,发现时不时的有毛刺产生。因为这些数据最终都是要显示在液晶屏上的,当示波器同时测量两个同步信号时,液晶屏的显示错位现象得到明显好转。示波器探头测量信号时相当于并联上一个pF级的电容,也能够一定程度上起到滤波的效果,因此可以断定同步信号的毛刺影响了数据的采集。其中一个同步信号如图1,两个有效高脉冲之间有很多毛刺,放大毛刺后如图2所示,大约维持10ns的高电平。(特别是串口异步通信,经常出现毛刺问题)
&&&&&& 如何滤除这些毛刺呢?办法有两个,其一就是用纯粹硬件的办法,在信号进入FPGA之前进行滤波处理,串个电阻并个电容都可以,并了一个20pF电容后就能够把这些毛刺彻底滤干净(不同毛刺,这个电容大小并不相同),如图3所示。
&而还有一种“软”硬件滤波的方法,降低数据采集频率以及多次采集后逻辑处理都是一种思路,简单举例如下:
& //输入信号
reg[3:0]& //输入信号缓存
&&& //输入信号打4拍
always @(posedge clk or negedge rst_n)
&&& if(!rst_n) ainr &= 4'd0;
&&& else ainr &= {ainr[2:0],ain};
&&& //输入信号上升沿检测,高电平有效
wire pos_ain = ~ainr[3] & ~ainr[2] & ainr[1] & ainr[0];
&&& //通常只要两个信号就行,即wire pos_ain = ~ainr[2] & ainr[1] ;。
&&& //这里用了4个信号就是多次采样滤波的效果
&&& //输入信号下降沿检测,高电平有效
wire neg_ain = ainr[3] & ainr[2] & ~ainr[1] & ~ainr[0];
&&& //通常只要两个信号就行,即wire neg_ain = ainr[2] & ~ainr[1] ;。
&&& //这里用了4个信号就是多次采样滤波的效果&&&
&&& //若该输入信号主要关注其高脉冲,那么可以做以下滤波
wire high_ain = ainr[1] & ainr[0];&
&&& //两个信号相与通常可以滤除1个clk的毛刺,相应的,3个信号相与可以滤除2个clk的毛刺
&&& //若该输入信号主要关注其低脉冲,那么可以做以下滤波
wire low_ain = ainr[1] | ainr[0];&&
作者的其他最新日志
评论 ( 个评论)
Powered by

我要回帖

更多关于 木板毛刺 处理 的文章

 

随机推荐