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

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

日志

数字前端 – 寄存器阵列低功耗设计

热度 17已有 1175 次阅读2021-12-19 08:25 |系统分类:芯片设计

芯片通常会用到一个寄存器阵列。用户通过SPI, I2C 之类的接口对寄存器进行读写操作,实现各个模块的配置,状态查询等等。


如果不考虑功耗,CTS时工具会插入一个类似下面这样结构的clock tree。不妨做个简单估算。

假设寄存器阵列有1288-bit寄存器。每个8-bit寄存器由8DFF组成。总共1024DFF

假设每8DFF工具插入一个CTB1288-bit寄存器就需要插入128CTB

假设每8CTB又需要插入一个CTB来驱动。前一步插入的128CTB需要再插入16CTB驱动。

16CTB又需要再插入两个CTB来驱动。

总共需要插入128+16+2=146CTB

reg_bank_clock_tree_1.png


假设接口为SPI,读写protocol1RW7位地址,8位数据。每次读写都是16SPI clock。假设SPI clock直接用做寄存器阵列时钟(通常有片子里有OSC,需要SPI clock domain OSC clock domain transfer。那是另一个技巧了。这里就不展开了)。如果不插入ICG,每次读写时1024DFF + 146CTBswitch 16SPI clock,那可是不小的功耗,尤其是频繁读写的场景。


上述这种实现方法比较“蠢”。我们知道,每次读写只能对一个寄存器进行操作,没必要所有的寄存器都给时钟。基于这个朴素的想法,我们可以利用工具降低功耗。


寄存器阵列的结构有规律。综合工具可以根据地址解码插入ICG。假设插入的ICG驱动能力足够,整个寄存器的clock tree会变成类似下面这样的结构。

reg_bank_clock_tree_2.png

对寄存器阵列进行操作时,只有地址符合的寄存器ICG才会被打开,该寄存器的DFF才会得到时钟。而其他地址不符合的寄存器ICG关闭,没有时钟,也就没有switching power。这样一来,每次写操作实际只有一个寄存器会switching,大大减少了switching power。美中不足的是,对任何寄存器操作时ICG前面的CTB都会有时钟,这部分clock tree仍消耗switching power


寄存器写操作的时候会改变寄存器内容,需要时钟锁入新的数据。但是,对寄存器进行读操作的时候,寄存器内容不改变,寄存器不需要时钟。这个特点工具是不知道的,但是designer可以利用起来。一个很自然的想法就是只在寄存器写操作放clock进来。

其次,虽然每个SPI写操作需要16SPI clock。但是实际上寄存器阵列只需要在地址,数据都收到后给一个写时钟脉冲就可以了,不需要多个时钟反复写几次。

基于上面这两个想法,我们可以在寄存器阵列的时钟入口处加一个ICG。这个ICG只在写操作的时候打开,且只在地址数据都收到后打开一个时钟周期,放一个时钟脉冲过去。这样整个clock treeswitching power就大大降低了。

reg_bank_clock_tree_3.png

寄存器阵列时钟入口处的ICG要在RTL里加。

RTL的时候就考虑功耗并手动插入ICG是实现低功耗的最有效手段。再加上工具辅助优化一下,就很完美了。


6

点赞

刚表态过的朋友 (6 人)

发表评论 评论 (12 个评论)

回复 莫名晴天 2022-5-6 10:37
后端发现1024个DFF的mem,会直接建议用macro
回复 jake 2022-5-6 12:00
莫名晴天: 后端发现1024个DFF的mem,会直接建议用macro
除非macro能同时引出1024个输出。SRAM macro通常做不到。所以寄存器阵列通常还是DFF实现。
回复 orientview 2022-5-11 16:13
jake: 除非macro能同时引出1024个输出。SRAM macro通常做不到。所以寄存器阵列通常还是DFF实现。
据说DFF的功耗很大?比SRAM大很多?
回复 jake 2022-5-11 22:51
orientview: 据说DFF的功耗很大?比SRAM大很多?
是的,所以要加ICG把功耗降到最低
回复 orientview 2022-5-12 08:06
请教下,如果是射频芯片,里面需要几百个寄存器,来配置很多参数,这几百个寄存器,一般是用DFF来实现,还是用SRAM来实现的啊?还是说,两者都可以?孰优孰劣?
回复 jake 2022-5-12 10:15
orientview: 请教下,如果是射频芯片,里面需要几百个寄存器,来配置很多参数,这几百个寄存器,一般是用DFF来实现,还是用SRAM来实现的啊?还是说,两者都可以?孰优孰劣? ...
通常需要同时把所有的参数送到模拟。SRAM无法做到所有bit并行输出,只能用DFF
回复 orientview 2022-5-12 10:25
谢谢,那存储几百个寄存器的DFF,一般来讲,功耗大概会有多高?40nm工艺的话。
回复 jake 2022-5-12 10:45
orientview: 谢谢,那存储几百个寄存器的DFF,一般来讲,功耗大概会有多高?40nm工艺的话。
如按照文章介绍的方法,如果写完参数后基本不改动,动态功耗几乎可以忽略不记,剩下的就是leakage了。查一下库的.lib里DFF的leakage,乘上寄存器的bit数量就可以了。
回复 orientview 2022-5-12 11:11
是的,大部分寄存器是一次性写死的,少部分寄存器是要随产品的应用场景变化而不停的动态调整的(类似于检测、估计和负反馈之类的)。
回复 orientview 2022-5-12 11:43
网上有人说,ICG的setup path,天然存在clock skew,真的是这样吗?
回复 jake 2022-5-12 11:53
orientview: 网上有人说,ICG的setup path,天然存在clock skew,真的是这样吗?
E pin有setup要求。clock path (clock in to gated clock out) 内部经过一个门,有skew,很正常
回复 orientview 2022-5-12 11:55
谢谢,能否推荐一些数字IC的经典书啊?

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 55

    粉丝
  • 50

    好友
  • 35

    获赞
  • 193

    评论
  • 1112

    访问数
关闭

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

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

GMT+8, 2022-5-20 11:50 , Processed in 0.038369 second(s), 8 queries , Gzip On, Redis On.

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