在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5797|回复: 10

[原创] FPGA中高性能异步复位信号的实现

[复制链接]
发表于 2013-8-2 23:31:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Timme 于 2013-8-3 10:55 编辑

你是否曾想过,你的fMAX居然是被异步复位拖慢的吗?!?!

假如你的系统中有同步撤离的异步复位信号(如果你没听过同步撤离,那你可以离开本帖了。。。),那工具默认的设置很可能会实现成下面这个样子:

低性能实现方法一:级联的全局缓冲
sub0.png

在Fitter的默认策略里,同步撤离后的异步复位信号会再次进入一个全局缓冲,这样到寄存器时钟端的路径经过了【一个】全局缓冲,而到寄存器复位端的路径经过了【两个】全局缓冲。对Stratix III C2/C4器件,复位比时钟慢2.4ns/3ns,直接将它们的fMAX限制在400MHz/333MHz。

Recovery Slack: -1.4ns (Stratix III C2器件,1ns时钟周期,Slow 85C)

LZ近期在Stratix III -3器件上的一个设计有四千多个寄存器,在常温下同时跑750MHz,还有大量的异步复位。那么LZ是怎么做到的呢?请慢慢看。。。

低性能实现方法二:开启物理综合中的“自动异步复位流水线处理”

sub2.png
Quartus针对这个问题,专门做了一个物理综合引擎即“Automatic Asynchronous Signal Pipelining”,开启之后异步复位不走全局缓冲,而是变成了本地的一颗流水线树。但这个方法有三个缺陷:1.占用大量的LUT和本地走线资源,拖慢综合速度。2.流水线树本身的时序仍有可能成为瓶颈。3.这个算法在实际综合中常由于各种原因不被“激活”。

Recovery Slack: -0.46ns (Stratix III C2器件,1ns时钟周期,Slow 85C)

低性能实现方法三:用本地时钟进行同步撤离,再将时钟和复位一起拖进全局缓冲

sub1.png
通过将输入时钟拖到本地LUT做同步撤离,再和复位一起进入全局缓冲,确实可以解决限制fMAX的问题,在asic里是标准的做法,但用在FPGA上有两个重大缺陷:1.时钟拖到LUT再进入全局缓冲的延时太大,相当于没有用专用时钟引脚了。2.时钟进入本地LUT,Jitter和占空比都会变差。

Recovery Slack: 0.079ns (Stratix III C2器件,1ns时钟周期,Slow 85C)
Removal Slack: 0.133ns (Stratix III C2器件,1ns时钟周期,Fast 0C)

**************************************************
***** 以上是三种低性能的异步复位实现方法,好孩子不要学喔 *****
**************************************************

高性能实现方法一:复位期间将时钟关掉
opt0.png

在复位期间将时钟Gate掉后,Recovery/Removal的时序关系就不存在了,自然没有冲击fMAX的问题。在这里需要启用CLKCTRL中自带的两级寄存器以实现通过ENA的无毛刺门控。不过这个方法有个很大的局限性:这个时钟驱动的所有寄存器必须都用这个异步复位信号。如果存在多个异步复位信号,或者存在没有复位的寄存器,那这个方法就不太适用了。

高性能实现方法二:时钟门控后作为异步复位信号

opt1.png
这个新颖的方法非常适合FPGA,按此方法实现的复位不是一个电平而是跟时钟一样的脉冲:




  1.         ___     ___     ___     ___     ___
  2. CLK ___|   |___|   |___|   |___|   |___|   |___
  3.                        |←     →|
  4.         ___     __Removal__   Recovery
  5. RST ___|   |___|   |___|   |___________________
  6.                            ↑Gate


复制代码
我们可以看到“↑”箭头所指的复位撤离时刻天生就有一个非常好的Recovery/Removal时序。此方法同样需要启用CLKCTRL中自带的两级寄存器对ENA端进行同步处理,同时需要在TimeQuest中将复位信号的上升沿设为伪路径。这个方法唯一的缺陷是复位期间比较耗电,如果系统不长期处于复位状态那就不算什么问题。

Recovery Slack: 0.33ns (Stratix III C2器件,1ns时钟周期,Slow 85C)
Removal Slack: 0.427ns (Stratix III C2器件,1ns时钟周期,Fast 0C)
发表于 2013-8-3 09:09:33 | 显示全部楼层
本帖最后由 chen851112 于 2013-8-3 11:48 编辑

这里是altera的时钟使能模块,是一个硬核。
发表于 2013-8-3 09:26:31 | 显示全部楼层
回复 2# chen851112

请问为啥FPGA不能用门控时钟啊?
求指点
 楼主| 发表于 2013-8-3 09:35:54 | 显示全部楼层


我就想请教一下Altera做这个功能出来是干嘛的呀?
miao.png
发表于 2013-8-3 10:35:01 | 显示全部楼层
本帖最后由 chen851112 于 2013-8-3 11:49 编辑

回复 4# Timme
这个模块做出来是实现低功耗,什么睡眠模式的。呵呵
发表于 2013-8-3 10:36:28 | 显示全部楼层
回复 3# poiu_elab
这里算不得门控时钟,你可以看手册,这描述中没有用到门控时钟的概念。这个altera的一个硬核,算是一个时钟使能电路。
 楼主| 发表于 2013-8-3 10:42:58 | 显示全部楼层


回复  Timme
好吧,我错了,其实这并不能算门控时钟,这个是altera自己硬核,是一个时钟控制模块,是硬核 ...
chen851112 发表于 2013-8-3 10:35



。。。
miao2.png
发表于 2013-8-3 11:04:09 | 显示全部楼层
本帖最后由 chen851112 于 2013-8-3 11:49 编辑

学习了,不明而利啊。
发表于 2014-7-12 11:40:36 | 显示全部楼层
写得不错 学习了
发表于 2014-8-27 14:59:03 | 显示全部楼层
回复 1# Timme

学习了,

一般 异步复位的时序定义为false path就可以避免异步复位影响fmax了,是这样吧?
应用异步复位的同步撤离的设计目的是为了代替同步复位,减小资源消耗么?  不太明白为什么这么纠结?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 14:25 , Processed in 0.030832 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表