1.同步复位和异步复位的写法:
//======同步复位=======
always@(posedgeclk)
if(rst)
..........
elseif(....)
//======异步复位=======
always@(posedgeclkorposedgerst)
if(rst)
.........
elseif(......)
2.应该选哪个?
就实时性而言,异步复位较同步复位慢。就稳定性而言,个人感觉同步复位相对而言比较稳定。但是具体跟电路设计就我个人比较偏向于同步复位,FPGA内的一切逻辑都在统一的时钟下动作,系统比较稳定。而异步复位,个人感觉会破坏整个系统的时钟同步机制。但是好多xilinx官方文档采用的也是异步复位。所以,系统能否稳定工作关键还在于整个系统的设计架构。
3.为什么?
在异步复位的情况下,复位信号与时钟信号的相位不能确定,会造成亚稳态。
说简单点,寄存器是在时钟的上升沿变化的,这就要求输入寄存器的信号在时钟沿之后必须稳定一段时间,否则时钟沿也在变,输入数据也在变,就不清楚到底输出会变成什么了。
复位信号也会造成一连串信号的变化,因为复位信号的不确定,所以会造成这个问题。
4.推荐的做法
推荐的做法,并不是直接使用Reset,而是异步复位-同步释放。
这种电路比较复杂,实际情况中有简化。
如果你的系统时钟是连续的话,你可以使用将Reset信号打两拍,然后上BUFG的方式。
你如果这样做了,Xilinx的工具会去分析Reset信号的时序,从而防止亚稳态的产生;你如果使用异步复位,工具是没法分析的!!
华为/中兴这样的公司,因为设计很大,加上写代码的人风格不统一,所以他们实际是在顶层里面专门建立一个复位模块,然后把异步复位时序化,这个就比较复杂了。但是总的来说,是同步的,所以不管你的子模块是写的异步复位还是同步复位,全部都变成同步的。
为了我们共同的目标“做专业的高速数据采集厂商”而共同努力!
关于坤驰科技:
坤驰科技是专注于高速数据采集与信号处理、高速数据存储与记录的高科技公司。坤驰科技为用户提供成熟的标准高速数据采集产品与技术,也可为用户提供定制化的高速信号采集解决方案。目前坤驰科技服务过的研究所、科研单位已达近百家。高速数据采集产品线涵盖PCIExpress、cPCI、PXIe、VPX、USB等总线,包含高速AD、DA平台、FPGA、DSP处理平台,SATA/SSD、Flash存储平台等。
全国咨询电话:400-000-4026
公司官方网站:http://www.queentest.cn
官方微博:http://e.weibo.com/queentest
官方微信:queentest或扫描: