- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[复位优缺点级结局方案
一个简单的异步复位的例子? 1 module test 2 ( 3?input clk, 4?input rst_n, 5?input data_in, 6?output reg out 7 ); 8?always @ (posedge clk or negedge rst_n) 9 if(!rst_n) out = 1b0;10 ? else out = data_in;11?endmodule 我们可以看到FPGA的寄存器都有一个异步的清零端(CLR),在异步复位的设计中这个端口一般就是接低电平有效的复位信号rst_n。即使说你的设计中是高电平复位,那么实际综合后会把你的复位信号反向后接这个CLR端。 一个简单的同步复位的例子? 1 module test 2 ( 3?input clk, 4 input rst_n, 5 input data_in, 6 output reg out 7 ); 8 always @ (posedge clk ) 9 if(!rst_n) out = 1b0;10 else out = data_in;11 endmodule 和异步复位相比,同步复位没有用上寄存器的CLR端口,综合出来的实际电路只是把复位信号rst_n作为了输入逻辑的使能信号。那么,这样的同步复位势必会额外增加FPGA内部的资源消耗。??那么同步复位和异步复位到底孰优孰劣呢??只能说,各有优缺点。同步复位的好在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率;它的不好上面也说了,在于它需要消耗更多的器件资源,这是我们不希望看到的。FPGA的寄存器有支持异步复位专用的端口,采用异步复位的端口无需额外增加器件资源的消耗,但是异步复位也存在着隐患。异步时钟域的亚稳态问题同样的存在与异步复位信号和系统时钟信号之间。??再看下面一个两级寄存器异步复位的例子? 1 module test 2 ( 3 input clk, 4 input rst_n, 5 input a, 6 output reg c 7 ); 8 9 reg b;10 always @ (posedge clk or negedge rst_n)11 if(!rst_n) b = 1b0;12 else b = a;13 14 always @ (posedge clk or negedge rst_n)15 if(!rst_n) c = 1b0;16 else c = b;17 18 endmodule 正常情况下,clk的上升沿c更新为b,b更新为a。一旦进入复位,b,c都清零;但是我们不能确定复位信号rst_n会在什么时候结束。如果结束于b_reg0和c_reg0的{launch edge –stup,launch edge+hold}时间只外,那么一切都会正常。但如果恰恰相反,会出现什么情况呢? rst_n的上升变化出现在了clk上升的建立保持时间上,此时clk检测到的rst_n的状态就会是一个亚稳态(是0是1不确定)。从代码里我们看到如果此时b_reg0和c_reg0认为rst_n为0,那么依然保持复位清零,而如果认为rst_n为1,那么就跳出复位。因为此时的rst_n的不确定性,就可能出现4种情况,即b_reg0和c_reg0都复位或者都跳出复位,再或者一个复位一个跳出复位。那么后者就会造成了系统工作不同步的问题,在这个简单的两级异步复位实例中这种危害表现的并不明显,但是我们试想一个大的工程项目里众多的寄存器出现如此情况又会是如何一番景象呢?上面的分析似乎都让人意识到同步复位和异步复位都不可靠,那么如何将两者结合,取长补短呢。? 异步复位、同步释放? 1 module test 2 ( 3 input clk, 4 input rst_n, 5 input a, 6 output reg c 7 ); 8 9 reg b,rst_nr;10 always @ (posedge clk)11 rst_nr = rst_n; 12 13 always @ (posedge clk or negedge rst_nr)14 if(!rst_nr) b = 1b0;15 else b = a; 16 17 always @ (posedge clk or negedge rst_nr)18 if(!rst_nr) c = 1b0;19 else c = b; 20 21 endmodule 如此一来,既解决了同步复位的资源消耗问题,也解决了异步复位的亚稳态问题。其根本思想,也是将异步信号同步化。最好的异步复位、同步释放--------复位方法?library IEEE;use IEEE.std_logic_1164.a
文档评论(0)