原创 异步复位、同步释放

2009-2-22 22:16 21648 20 35 分类: FPGA/CPLD

异步复位、同步释放<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


       FPGA设计中常见的复位方式即同步复位和异步复位。在深入探讨亚稳态这个概念之前,特权同学也并没有对所谓的同步复位和异步复位有太多的注意,而在实践中充分感受了亚稳态的危害之后,回过头来细细品味《Verilog HDL设计与验证》一书中关于复位的章节,可谓受益匪浅。


 


       在特权同学以前的代码里大多使用的是异步复位。


       一个简单的异步复位的例子


always @ (posedge clk or negedge rst_n)


         if(!rst_n) b <= 1'b0;


         else b <= a;


 


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


 点击看大图


         我们可以看到FPGA的寄存器都有一个异步的清零端(CLR),在异步复位的设计中这个端口一般就是接低电平有效的复位信号rst_n。即使说你的设计中是高电平复位,那么实际综合后会把你的复位信号反向后接这个CLR端。


 


       一个简单的同步复位的例子


always @ (posedge clk)


         if(!rst_n) b <= 1'b0;


         else b <= a;


 



点击看大图

 

         和异步复位相比,同步复位没有用上寄存器的CLR端口,综合出来的实际电路只是把复位信号rst_n作为了输入逻辑的使能信号。那么,这样的同步复位势必会额外增加FPGA内部的资源消耗。


 


       那么同步复位和异步复位到底孰优孰劣呢?


       只能说,各有优缺点。同步复位的好在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率;它的不好上面也说了,在于它需要消耗更多的器件资源,这是我们不希望看到的。FPGA的寄存器有支持异步复位专用的端口,采用异步复位的端口无需额外增加器件资源的消耗,但是异步复位也存在着隐患,特权同学过去从没有意识到也没有见识过。异步时钟域的亚稳态问题同样的存在与异步复位信号和系统时钟信号之间。


 


       再看下面一个两级寄存器异步复位的例子


 


always @ (posedge clk or negedge rst_n)


         if(!rst_n) b <= 1'b0;


         else b <= a;


        


always @ (posedge clk or negedge rst_n)


         if(!rst_n) c <= 1'b0;


         else c <= b;      


 



点击看大图 


         正常情况下,clk的上升沿c更新为bb更新为a。一旦进入复位,b,c都清零;但是我们不能确定复位信号rst_n会在什么时候结束。如果结束于b_reg0c_reg0{launch edge –stup,launch edge+hold}时间只外,那么一切都会正常。但如果恰恰相反,会出现什么情况呢? rst_n的上升变化出现在了clk上升的建立保持时间上,此时clk检测到的rst_n的状态就会是一个亚稳态(是01不确定)。从代码里我们看到如果此时b_reg0c_reg0认为rst_n0,那么依然保持复位清零,而如果认为rst_n1,那么就跳出复位。因为此时的rst_n的不确定性,就可能出现4种情况,即b_reg0c_reg0都复位或者都跳出复位,再或者一个复位一个跳出复位。那么后者就会造成了系统工作不同步的问题,在这个简单的两级异步复位实例中这种危害表现的并不明显,但是我们试想一个大的工程项目里众多的寄存器出现如此情况又会是如何一番景象呢?


       上面的分析似乎都让人意识到同步复位和异步复位都不可靠,那么如何将两者结合,取长补短呢。


 


       异步复位、同步释放


 


always @ (posedge clk)


         rst_nr <= rst_n;                 //现将异步复位信号用同步时钟打一拍


 


always @ (posedge clk or negedge rst_nr)


         if(!rst_nr) b <= 1'b0;


         else b <= a;


        


always @ (posedge clk or negedge rst_nr)


         if(!rst_nr) c <= 1'b0;


         else c <= b;      


 



点击看大图 


         如此一来,既解决了同步复位的资源消耗问题,也解决了异步复位的亚稳态问题。其根本思想,也是将异步信号同步化。


 


       另外特权同学请教过IC设计部一位资深专家,他们在设计中常用的复位方式和上面的方法类似,大体如下:


 



点击看大图 


 


 

文章评论15条评论)

登录后参与讨论

用户377235 2015-10-29 11:52

为什么我觉得改变后是同步复位,同步释放啊?

用户377235 2014-8-13 00:12

我感觉,还是有点问题,因为有的情况下时钟不是一直都有的,比如用的某个ipcore生成的时钟,假如没有时钟,上面那个图就不行了,下面那个图是可以的

用户377235 2013-11-14 10:07

为什么说解决了资源消耗的问题,多了2个触发器难道不是资源吗

用户1625718 2013-8-27 13:52

您好!我遇到一个问题:我没有外部专门用作同步或者异步复位的按键输入。我想直接通过FPGA内部产生一个同步复位。上电瞬间,复位开始计数一段时间到某个值,计数器保持,然后复位完成后,再正常工作。就这个上电内部同步复位问题,请教一下您。

用户377235 2013-3-30 18:39

特權同學,有看過您的書,很不錯哦,但是這個同步釋放的話,您這樣做仍然是不妥當的。異步reset的話,經過一個DFF reset會產生亞穩態,所以小弟覺得需要使用兩個DFF來消除這種情況。小弟也是做IC的。

用户359307 2012-1-11 16:19

特权同学比我大两届啊,我03年是高一。现在也在做FPGA的项目,但是没有人带。自己摸索中,感觉很迷茫。

用户1500627 2011-11-30 14:13

准备很重要,更要看准机会,因为有的机会其实是美丽的陷阱。 不冒进,不盲从,不自负。 否则就会越走越累,越走越窄。 不得不回过头来,耐着性子,花费比当初多得多的时间补基础。

用户375664 2011-8-23 11:40

哦,我还以为这是sdram写入数据时固定的呢?怎么也没想通,原来是测试的一种方法,多谢特权大哥了……

ilove314_323192455 2011-8-23 08:14

每640ns写入8个16bit的数据只不过是一种测试方式而已,没有为什么呀

用户375664 2011-8-22 10:23

特权大哥,我是一个大学生,几个月前买的您的深入浅出的书,我在自己学习FPGA,现在碰到个问题,随书带的代码上面有个不懂的地方,就是sdram那块,我不知道为什么在datagene里,是每640ns写入8个16bit的数据啊?这个是怎么定的?上电只要多于200us就行了吧 不一定是500us吧,身边人很少懂这个的,希望特全大哥简单说一下……多谢啦
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
15
20
关闭 站长推荐上一条 /2 下一条