[讨论] 《深入理解Altera FPGA应用设计》书友会讨论第三期:大家一起聊聊FPGA复位~

EEWORLD社区   2015-11-19 11:05 楼主
182937ztz462i64klk2bzz.jpg.thumb.jpg


本期讨论话题是关于复位逻辑设计的,请大家围绕下面几点,结合自己的经验,谈谈自己对复位的看法:

1、Altera推荐使用异步复位,而Xilinx推荐使用同步复位
2、Altera推荐复位0有效,而
Xilinx推荐复位是1有效
3、两家都建议将异步复位进行同步化处理

复位逻辑设计是每个FPGA设计工程师绕不开的话题,请大家随便聊聊复位

@coyoo 也会跟大家一起互动聊天,大家可以在讨论过程中@coyoo

跟帖参与本次讨论就有机会获得1~500芯币奖励,积极参与互动的网友更有机会获得coyoo新书《深入理解Altera FPGA应用设计(高级技巧篇)》


恭喜上期讨论积极的网友mayiqun720、格古洛获得《深入理解Altera FPGA应用设计(高级技巧篇)》一本,请私信phantom7确认地址。希望大家都能积极的参与到以后的讨论中来,我们为你准备了N多惊喜哦

《深入理解Altera FPGA应用设计(高级技巧篇)》购买地址
1.当当网购买地址:点击此处前往
2.亚马逊网购买地址:点击此处前往



往期讨论:热烈庆祝坛友coyoo新书《FPGA设计实战演练》出版,跟帖讨论即有机会赢新书!
《深入理解Altera FPGA应用设计》书友会讨论第二期:进来随便聊聊状态机~
微信搜索公众号“EEWORLDBBS”快去添加关注吧!

回复评论 (30)

2推荐 mayiqun720 

引用: coyoo 发表于 2015-11-19 13:21
能帮忙画个简图吗?!

阻容复位大致就是这个电路吧,阻容电路电容有个充电时间,t=RC,这样在电路刚上电的时候,利用电容电压不能突变的特性,通过电阻进一步减缓电容充电时间,是的芯片复位时间足够长。
  • 52204061_2.jpg
点赞  2015-11-19 13:28
复位的设计确实很重要。
异步复位虽然好,但是有隐患,特别是在设计状态机的时候,如果设计的不好,异步复位会造成状态不正确。
所以现在都是复位用时钟打2拍后再用的。
用别人的代码,在工程里遇到过这样的问题,反复折腾了很久才找到根源。每次上电抓信号啥的,都很麻烦。
最后解决了。
点赞  2015-11-19 11:59
没有这方面经验,没法和大家讨论。。。。
点赞  2015-11-19 12:09
个人觉得0复位更好用,就以最简单的阻容串联复位电路来说,不仅可以上电复位,还能根据阻容值的大小调整顺序启动的问题
点赞  2015-11-19 12:17
先说一下同步复位: 优点主要由下面三点: 1.有利于仿真器的仿真。 2.可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。 3.只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。 缺点如下: 1.复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。 2.由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。 再说一下异步复位的优点: 1.大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。 2.异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。 缺点:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。复位信号容易受到毛刺的影响。 对于复位而言,一般采用异步复位,同步释放的方式。在此不再赘述。高电平复位还是低电平复位,具体要看底层的slice复位端口是高有效还是低有效。 Xilinx 寄存器的SR控制端是高电平有效的。如果RTL代码采用了低电平有效的复位模式,综合器将在复位信号驱动寄存器SR控制端之前的插入一个反相器(interver)。你必须使用一个查找表(look up table)来实现反向器,以利用LUT的输入端口。低电平有效的控制信号带来的额外的逻辑可能拉长了执行时间(runtime),将导致更低的FPGA资源利用率,也将影响时序和功耗。 本帖最后由 mayiqun720 于 2015-11-19 13:02 编辑
点赞  2015-11-19 12:32
引用: ZLCG125 发表于 2015-11-19 12:17
个人觉得0复位更好用,就以最简单的阻容串联复位电路来说,不仅可以上电复位,还能根据阻容值的大小调整顺 ...

能帮忙画个简图吗?!
点赞  2015-11-19 13:21
再说一下跨时钟域reset处理的三条准则吧:coyoo书里也有讲:
In a design, a reset signal that is generated in one clock domain and used in one or more other, asynchronous clock domains should follow the following guidelines:

The reset signal should be synchronized with two or more cascading registers in the receiving asynchronous clock domain.
The cascading registers should be triggered on the same clock edge.
There should be no logic between the output of the transmitting clock domain and the cascaded registers in the receiving asynchronous clock domain.
点赞  2015-11-19 13:33
引用: coyoo 发表于 2015-11-19 13:21
能帮忙画个简图吗?!

6M59VDZ}$F()@7[C~PM0R6A.png
点赞  2015-11-19 21:05
引用: mayiqun720 发表于 2015-11-19 13:28
阻容复位大致就是这个电路吧,阻容电路电容有个充电时间,t=RC,这样在电路刚上电的时候,利用电容电压不能 ...

点赞  2015-11-19 21:06
为了拿本书我 也是蛮拼的 复位在FPGA或者IC设计中都是最复杂最需要谨慎处理的问题之一。简单来讲,复位和时钟需要,几乎需要连接到每个模块每个逻辑单元中,这就表示复位线的扇出很重,负载很大,布线很困难;然而复位又是一个慢速信号,不需要像时钟一样时刻在快速翻转,所以如果占用全局网络资源(如bufg),又显得有点浪费。什么时候需要复位信号,什么时候可以省略,复位如何影响时序分析,文题中的同步复位or异步复位、高有效低有效等;还有最重要的是,在如今芯片面积越来越大的情况下、如何保障设计所有逻辑模块可靠(不一定是同时)复位?是设计工程师们需要花更多心思考量。 首先想聊一聊几个问题,我们为什么要复位?复位有什么难的?我们该怎么复位?为什么要复位呢?我总结了一下,大概有这几个原因,首先是为了调试,让系统有个统一固定的还原点,便于查找和定位bug;然后是为了赋初值,给所有寄存器一个可预知的状态,防止系统随意启动,这点特别对于状态机和流水线是很重要滴;再是为了仿真,这点其实和上条有点重复,不过这里是针对modelsim isim等仿真软件来说的。没办法,仿真软件就是那么傻,没有初值,就给你满屏红叉(modelsim内心OS,不给初值,臣妾不知道怎么办啊);最后一点,个人觉得有点扯,增加系统稳定性。对系统而言,复位总比热重启好吧。 复位有什么难的?复位难在一点,就是在复位释放(或者之后可预知的)的时候,系统所有寄存器能 同 时 回到一个可确定或者可预知的状态。前面说了,随着现在芯片面积越来愈大,系统时钟越做越快,这点越来越难办到。不信,你可以拿个FPGA量量尺寸,对照si的介电常数,算算电磁波从芯片最左边传导到最后边的延迟。再考虑复位的重负载导致的大电容效应。。。。 那我们该怎么复位?同步、异步?全局复位、分块复位?换种问法,那些模块一定需要复位?哪些模块不需要复位?那些模块一定不能有复位?那些模块的复位不需要“同时”?问题越来越有趣了是不是。 最后回答文题三问,1、Altera推荐使用异步复位,Xilinx推荐使用同步复位?个人认为这是很泛泛的说法。同步复位可以使得所有寄存器在同一个时钟内恢复到某固定值,因而对整个系统的时序更好;而且同步设计是FPGA的根本追求。从这两点上说,Altera也是推荐在设计中使用同步复位的。Altera推荐使用异步复位大概原因是基于其内部逻辑单元通常都有专用的异步低有效复位端,可以节省连线资源,这点特权同学的多本图书都有描述。Xilinx推荐同步复位,除了以上两点原因,还在于其综合器更加强大,可以讲同步高复位设计的复位优化成控制信号当做lut的输入,从而得到更好的优化结果,还有就是内部的BRAM、DSPE等资源或者没有复位或者是同步高复位。歪楼而论,xilinx在其官方文档中反复推荐少用或者不用复位信号。好像也顺便回答了 2 Altera推荐复位0有效,而Xilinx推荐复位是1有效?的问题。高有效好还是低有效好,在我上学的时候也是类似同步复位好还是异步复位好的经典引战问题。正方的观点是高有效电路简单,整片功效较低(平时工作时维持在0状态,省电?);反方主要纠结在低有效的复位抗干扰好。 3、两家都建议将异步复位进行同步化处理。这里更正一下说法,准确的说法是异步复位同步释放。这是一种折衷,网上说这个的东西太多,不赘述。这里简单讲讲同步释放和同步化处理两种容易混淆的说法有何不同。同步处理指 沙发 murongyu 童鞋的做法,即将异步复位打两拍,更精确的描述是 8楼 mayiqun720 的引文。这种做法本质是把异步复位当做跨时钟域同步来处理。这种做法可以避免复位释放时亚稳态的传播,但是不能解决误复位的问题。同步释放的电路如下图,主要到其外部复位输入是接到寄存器的异步复位端的。这种电路才能将异步复位同步复位的优点折衷。 打了一个小时的字,应该能拿一本书了。 没翻资料印象流无责任随手敲,若有疏漏错误,希望coyoo大大、各位版友指正。 转载注明纪若尘,谢谢PS,图来源网络http://blog.csdn.net/lg2lh 本帖最后由 jiruochen 于 2015-11-19 22:10 编辑
  • 异步复位同步释放标准电路
点赞  2015-11-19 22:06
来支持coyoo大大
为了拿本书我 也是蛮拼的
复位在FPGA或者IC设计中都是最复杂最需要谨慎处理的问题之一。简单来讲,复位和时钟需要,几乎需要连接到每个模块每个逻辑单元中,这就表示复位线的扇出很重,负载很大,布线很困难;然而复位又是一个慢速信号,不需要像时钟一样时刻在快速翻转,所以如果占用全局网络资源(如bufg),又显得有点浪费。什么时候需要复位信号,什么时候可以省略,复位如何影响时序分析,文题中的同步复位or异步复位、高有效低有效等;还有最重要的是,在如今芯片面积越来越大的情况下、如何保障设计所有逻辑模块可靠(不一定是同时)复位?是设计工程师们需要花更多心思考量。
首先想聊一聊几个问题,我们为什么要复位?复位有什么难的?我们该怎么复位?为什么要复位呢?我总结了一下,大概有这几个原因,首先是为了调试,让系统有个统一固定的还原点,便于查找和定位bug;然后是为了赋初值,给所有寄存器一个可预知的状态,防止系统随意启动,这点特别对于状态机和流水线是很重要滴;再是为了仿真,这点其实和上条有点重复,不过这里是针对modelsim isim等仿真软件来说的。没办法,仿真软件就是那么傻,没有初值,就给你满屏红叉(modelsim内心OS,不给初值,臣妾不知道怎么办啊);最后一点,个人觉得有点扯,增加系统稳定性。对系统而言,复位总比热重启好吧。
复位有什么难的?复位难在一点,就是在复位释放(或者之后可预知的)的时候,系统所有寄存器能 同 时 回到一个可确定或者可预知的状态。前面说了,随着现在芯片面积越来愈大,系统时钟越做越快,这点越来越难办到。不信,你可以拿个FPGA量量尺寸,对照si的介电常数,算算电磁波从芯片最左边传导到最后边的延迟。再考虑复位的重负载导致的大电容效应。。。。
那我们该怎么复位?同步、异步?全局复位、分块复位?换种问法,那些模块一定需要复位?哪些模块不需要复位?那些模块一定不能有复位?那些模块的复位不需要“同时”?问题越来越有趣了是不是。
最后回答文题三问,1、Altera推荐使用异步复位,Xilinx推荐使用同步复位?个人认为这是很泛泛的说法。同步复位可以使得所有寄存器在同一个时钟内恢复到某固定值,因而对整个系统的时序更好;而且同步设计是FPGA的根本追求。从这两点上说,Altera也是推荐在设计中使用同步复位的。Altera推荐使用异步复位大概原因是基于其内部逻辑单元通常都有专用的异步低有效复位端,可以节省连线资源,这点特权同学的多本图书都有描述。Xilinx推荐同步复位,除了以上两点原因,还在于其综合器更加强大,可以讲同步高复位设计的复位优化成控制信号当做lut的输入,从而得到更好的优化结果,还有就是内部的BRAM、DSPE等资源或者没有复位或者是同步高复位。歪楼而论,xilinx在其官方文档中反复推荐少用或者不用复位信号。好像也顺便回答了 2 Altera推荐复位0有效,而Xilinx推荐复位是1有效?的问题。高有效好还是低有效好,在我上学的时候也是类似同步复位好还是异步复位好的经典引战问题。正方的观点是高有效电路简单,整片功效较低(平时工作时维持在0状态,省电?);反方主要纠结在低有效的复位抗干扰好。
3、两家都建议将异步复位进行同步化处理。这里更正一下说法,准确的说法是异步复位同步释放。这是一种折衷,网上说这个的东西太多,不赘述。这里简单讲讲同步释放和同步化处理两种容易混淆的说法有何不同。同步处理指 沙发 murongyu 童鞋的做法,即将异步复位打两拍,更精确的描述是 8楼 mayiqun720 的引文。这种做法本质是把异步复位当做跨时钟域同步来处理。这种做法可以避免复位释放时亚稳态的传播,但是不能解决误复位的问题。同步释放的电路如下图,主要到其外部复位输入是接到寄存器的异步复位端的。这种电路才能将异步复位同步复位的优点折衷。


打了一个小时的字,应该能拿一本书了。


没翻资料印象流无责任随手敲,若有疏漏错误,希望coyoo大大、各位版友指正。

转载注明纪若尘,谢谢
PS,图来源网络 http://blog.csdn.net/lg2lh

  • 异步复位同步释放标准电路
点赞  2015-11-19 22:16
引用: jiruochen 发表于 2015-11-19 22:16 来支持coyoo大大 为了拿本书我 也是蛮拼的 复位在FPGA或者IC设计中都是最复杂最需要谨慎处理的问题之一。 ...
这么好的回帖,居然没有顶贴的?接着老纪的话题: 我在书中讨论了异步复位、同步复位以及异步复位同步化等问题,对于ALTERA的FPGA逻辑设计中采用什么样的复位策略应该有了初步的认识。作为引申,复位逻辑设计还有几个有趣的问题还是可以再多讨论讨论。比如:
  • 设计中每个触发器都需要复位吗?
  • 为何Altera的对手Xilinx推荐使用同步复位?
此外,大家一直关注的是设计应该采用何种复位策略,很少考虑过这样一个问题,即为何要采用复位呢?也就是常说的复位意图。 在设计被实现之前,复位的原始目的是使得设计强制设置为一种已知的状态(类似初始化)。有些时候设计不一定就需要复位,或者说复位对于有些功能模块不是必要的。比如,很多数据路径通信设计同步于输入数据流,数据被处理后再被输出。如果该功能模块的同步丢失,模块的同步再获取代码会让模块再次获得同步。这种类型的功能模块中,所有未使用到的状态都将指向“开始获取同步”状态,所以能在根本无复位的情况下工作良好。 Xilinx的技术文档除了推荐用户使用同步复位以外,还建议用户检查自己的设计,在没有必要使用复位的情况下尽量避免使用复位。 其实上述内容,老纪已经表述的很清楚了,这里再次重复(重要的事情说三遍都不为过嘛)。至于“Xilinx为何推荐同步复位”可能只是我的一个个人印象而已,不一定正确,毕竟很久没有使用Xilinx的产品。记得有一次参加Xilinx的研讨会,其FAE说过这么一句“同步复位异步释放”,让我困扰了很长一段时间,翻遍了Xilinx的网站也没有找到支撑他这个说的资料,后来想想,他当时应该属于口误,误将异步复位同步释放,说成“同步复位异步释放”。 本帖最后由 coyoo 于 2015-11-20 10:22 编辑
点赞  2015-11-20 10:17
做个总结吧,复位策略的总结: 设计使用同步复位的好处有:
  • 能够确保设计为100%的同步电路
  • 同步复位只在时钟上升沿有效,某些由内部组合逻辑产生的复位,采用同步复位方式,可以有效滤除复位信号在两个时钟沿之间的毛刺
  • 使用同步复位,可以预知复位处理时间(时钟周期),这样可以在复位缓冲树上插入触发器来改善复位树的时序
下面来总结下同步复位的缺点,有些缺点是针对ALTERA器件来说的:
  • 必须确保复位信号宽度超过一个时钟周期,否则就需要对复位进行展宽,这个问题在多时钟域设计中尤其重要
  • 同步复位常易被推导成与数据一起门控进入触发器的D输入,消耗更多逻辑资源的同时还增大了复位路径的延时
  • 即便同步复位由LAB的同步清零端口进入触发器,也比异步清零端口路径长
  • 同步复位无法避免毛刺正好出现在时钟采集复位信号的时刻
  • 在使用门控时钟的场合,特别注意同步复位的使用,因为同步有效取决于时钟沿,如果复位设置时刻恰逢时钟关闭期间,设计就会无法复位
使用异步复位的好处:
  • 异步复位直接清除触发器数据端口,无需额外的逻辑,也不会插入到数据路径而给复位信号添加额外的延时
  • 复位设置及撤除对于时钟的参与与否并不是必要条件
使用异步复位的缺点:
  • 异步信号使得设计的静态时序分析变得复杂甚至无法完成
  • 异步信号最大的问题是复位设置及撤除异步与时钟沿,复位设置并无问题,而复位异步撤除会给触发器带来问题,如果复位撤除正好发生在时钟沿处,那么触发器的输出就会处于亚稳态
  • 异步复位对噪声以及毛刺极其敏感
本帖最后由 coyoo 于 2015-11-20 10:26 编辑
点赞  2015-11-20 10:24
最后作为比较,书中主要谈论的是Altera推荐的复位策略,那么我理解的Xilinx推荐的复位策略应该是这样的: 所谓的XILINX推荐使用同步复位策略,只是笔者在一次XILINX的研讨会上,其FAE的答复,我想他的意思其实可能就是需要将复位进行同步化处理。然而,大量的资料显示XILINX也是提倡使用异步复位的,而且使用的策略和ALTERA一样,都是需要对异步复位进行同步。 对于异步复位的同步,使用的是同步器,Xilinx也叫复位桥。值得注意的是Xilinx的复位最好是高电平有效,这也是和其器件内部架构有关。由于SR是高电平有效,所以如图所示,复位桥(异步复位同步器)第一个触发器的D输入直接接低电平。
16.png
图:Xilinx的FPGA器件中典型复位实现方法
本帖最后由 coyoo 于 2015-11-20 10:30 编辑
点赞  2015-11-20 10:27
哈哈,coyoo大大竟然亲自回复。
补充15楼的图,还反映了两点,1 是分块复位或者是局部复位。2是多时钟域情况下,复制多个同步释放逻辑
点赞  2015-11-20 11:09
复位电路最为常见的就是阻容式的,简单已实现,但是对于复位要求较高的应用很容易造成复位问题
有专门的复位芯片,相对来说要可靠的多
关键还是根据你的设计需要
共同学习 共同进步
点赞  2015-12-2 12:34
不懂就学。慢慢来
点赞  2015-12-2 17:23
复位电路搞的这么复杂?阻容的就简单又好用。可能特殊环境用的着异步复位。
点赞  2015-12-3 13:05
下载下来,能考和学习
点赞  2015-12-4 23:05
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复