jake的个人空间 https://blog.eetop.cn/1592 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

数字前端 高速设计技巧(1) – retime

热度 13已有 4954 次阅读| 2021-8-24 02:41 |系统分类:芯片设计

设计中经常会碰到一些非常复杂的逻辑,组合逻辑层数非常多,往往造成无法满足设计的时钟频率要求。

Cadence综合工具Genus支持retime技术。

Retime技术的原理非常简单。例如下图,两级flop之间的组合逻辑太大,限制了时钟频率。

image.png

Retime技术类似pipelineRetime技术在两级flop之间插入retime stage flop,把复杂的组合逻辑分割成里几个部分,每个部分的组合逻辑层数都相对较小,使得每一级都能工作在较高的频率,从而满足整个设计的时钟要求。

image.png

当然,retime技术不是“免费”的。

-        插入了中间级,latency增加了。上图中latency增加了3cycle

-        插入了中间级flop,面积功耗都会大一些。

下面是一个实例。这个设计实现乘+(multiply-add)运算。这类运算在DSP中很常见。这里的乘法器是16位输入乘16位输入,得到32位结果,再和符号扩展(sign extended)后的第三个输入相加。

综合用Genustarget 65nm的库。顺便插一句,很多朋友总以为只要上了先进工艺,timing的问题就解决了。做产品与做科研不同。做产品是要讲成本的。上了先进工艺只能说明你资金充裕。使用成熟工艺,虽然慢很多却能实现一样的performance,这才是真正的设计能力。

首先来看看最直接的实现方案。这里输入锁存后再运算,运算结果锁存后再输出。这样做屏蔽了input delayoutput delay对运算逻辑timing的影响,可以更好地评测运算逻辑的速度。

image.png

这里也可以看到,手动插入pipeline stages很难,尤其是乘法运算。这是一个整体,无法手动切割。当然有朋友可能会说,例化Synopsys DesignWare里的multi-stage multiplier。那样当然也是可以的,优缺点你也知道了,这里就不赘述了。

Genus综合后最差的路径如下。

image.png

image.png

时钟周期为9nspositive slack 26ps,能满足。也就是说这个实现方案最多也就是只能跑110MHz左右。如果系统的要求是400MHz,这个最直白的实现方案显示是不行的。

下面再来看看使用Genus retime技术的实现方法。在这个实现中把multiply-add放到了一个独立的module中,这样做是为了在Genus综合中单独将这个moduleretime打开。

image.png

image.png

Genus综合时在syn_generic之前关闭整个设计地retime,打开multiply_add_pipeline模块地retime

image.png

Genus综合结果如下。

image.png

可以看到,时钟提高到了2.5ns (400MHz),依然能满足,slack0

这里还要提一下,Genus retime的算法非常聪明。RTL里我们给了中间三级32*3=96DFF,实际上最后Genus并没有全部用掉96DFF,只用了2+9+31DFF置换为retime中间级flop,其余的都优化掉了。可以说Genus retime真的很“省”。

总结一下,Genus retime技术通过移动pipeline flop的位置将复杂组合逻辑分割成几级,可以大大提高电路的速度。


点赞

发表评论 评论 (6 个评论)

回复 bysg312 2021-9-4 13:33
所以这就需要在前期设计时,把这个乘法器需要消耗的pipeline级数预估出来,然后写成对应级数的dff,这样才能保证retime以后,该模块的输出仍然正常
回复 jake 2021-9-4 13:57
bysg312: 所以这就需要在前期设计时,把这个乘法器需要消耗的pipeline级数预估出来,然后写成对应级数的dff,这样才能保证retime以后,该模块的输出仍然正常 ...
是的,前期工作要做各种估算,时序,功耗。很多时候前期工作就是RTL to GDSII prototype flow
回复 zhh124 2021-9-7 15:06
这同样要等待多个cycle才能得到结果吧
回复 jake 2021-9-14 07:42
zhh124: 这同样要等待多个cycle才能得到结果吧
Throughput不变,latency多了
回复 fimwest 2023-1-9 16:55
请问例化Synopsys DesignWare里的multi-stage multiplier的优缺点是什么?我例化了DW02_mult_2_stage,综合后网表仿真没问题,但是formality不match,不match的点都是DW02_mult_2_stage里面的寄存器。
回复 jake 2023-1-10 02:21
fimwest: 请问例化Synopsys DesignWare里的multi-stage multiplier的优缺点是什么?我例化了DW02_mult_2_stage,综合后网表仿真没问题,但是formality不match,不match的 ...
DesignWare里的multi-stage multiplier是优化的结构,肯定是可以用的,以前的项目用过很多次。 Formality做得很蠢,对不上是常态。只能blackbox,依靠网表仿真,后仿。Conformal好一些。

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 222

    粉丝
  • 89

    好友
  • 278

    获赞
  • 268

    评论
  • 2261

    访问数
关闭

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

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

GMT+8, 2024-3-28 18:59 , Processed in 0.014603 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部