低电压设计--时钟门控、门级功耗优化

低电压设计--时钟门控、门级功耗优化,第1张

时钟门控

芯片中动态功耗的很大一部分是在时钟的配平中消耗的。高达50%以上的动态功耗都浪费在时钟缓冲器中,因为这些缓冲区在系统中有最高的跳变率,时钟缓冲有很多,并且它们通常有很高的驱动强度以最小化时钟延迟。此外,即使输入和输出信号保持不变,接收时钟的触发器也会耗散一些动态功耗。

减少这种功耗最常见的方法是在不需要时钟的时候关闭它们。这种方法被称为时钟门控。现代EDA设计工具支持自动插入时钟门控:它们可以识别电路,并且时钟门控的插入可以不改变逻辑的功能,如图2-1所示。

在原始的RTL中,寄存器的更新与否取决于变量EN。同样的结果也可以基于相同变量的时钟门控来实现。

如果涉及的寄存器是单bit的,则功耗节省会不明显。如果它们是32位寄存器,那么一个时钟门控单元可以控制32个寄存器(以及它们的时钟树中的任何缓冲区)。这可以节省大量的功耗。

在早期的RTL设计中,工程师会在RTL中明确地编码时钟门控电路。这种方法是容易出错的-它很容易创建一个产生毛刺的时钟门控电路,从而产生功能错误。今天,包括特定的时钟门控单元在内的大多数库都能被综合工具识别。显式时钟门控库可以使用自动插入从而使得时钟门控成为一种简单而可靠的降低功耗的方法。不需要对RTL进行任何更改就可以实现这个时钟门控策略。

在一篇论文中报告了一个独特的机会,他的团队最近不得不比较一个(几乎)相同的芯片实现了时钟门控和没有时钟门控的区别。作为一项节能工程,重新设计了一种现有的无时钟门控的电路芯片并在180nm工艺下实现,只对逻辑进行了一些小的更改(一些小块被删除并被其他块替换。)。

报告显示,面积减少了20%,省功耗34%到43%。时钟门控的具体省功耗比例取决于 *** 作模式。功耗的测量来自实际的硅片,而节省的面积是由于一个单一的时钟门控细胞取代了多个选择器。

经过一些分析和实验,该团队认为只在位宽至少为3bit以上的信号才使用时钟门控。在1bit的寄存器上使用是不能做到面积及功耗优化平衡的。大部分的能量节省是由于时钟门控细胞被放置在时钟路径的早期。大约60%的时钟缓冲器出现在时钟门控之后,因此在门控过程中它们的活动减少到零。

门级功耗优化

除了时钟门控,工具还可以执行一些逻辑优化来最小化动态功耗。图2-2显示了其中的两种优化。在图的上半部分,与门输出具有特别高的活动性。因为它后面跟着一个NOR门,所以可以将这两个门重新映射到一个AND-OR门加上一个反向器,所以高活动性网络就值存在模块内部。现在,高活动性节点(与栅的输出)驱动更小的电容,降低了动态功耗。

在图的下半部分,与门已经被初步映射,以便一个高活动性信号被连接到一个高功率输入引脚,一个低活动性信号被映射到一个低功率引脚。对于多个输入门,不同引脚的输入电容和功率可能存在显著差异。通过重新映射输入,使高活动性信号连接到低功率输入,优化工具可以降低动态功耗。

门级功率优化的其他例子包括改变单元大小和缓冲器插入。在单元尺寸方面,该工具可以在整个关键路径上选择性地增加和减少单元驱动强度,以满足时序要求,然后将动态功耗降低到较小值。在缓冲器插入中,工具可以插入缓冲器而不是增加器件本身的驱动强度。如果在适当的情况下这样做,就会降低功耗。与时钟门控一样,门级功率优化是由综合等EDA工具执行的,并且对RTL设计师是透明的。

原文链接:https://mp.weixin.qq.com/s?__biz=MzIzMTg4NDM3Mw==&mid=2247484906&idx=1&sn=12f240001328650350e0420f59b037a2&chksm=e89c16d0dfeb9fc664f759650eeab398954cbc1915fb3c745dbe1b13b80ea723fa7152e05ebc&cur_album_id=1971981450472161284&scene=189#wechat_redirect

何谓综合?一言以蔽之就是讲高层次描述转化成门级网表的过程。门级网表是什么,里面是各种单元和ip核。于是这个转化过程必定是要在标准单元库和施加特定时序约束的基础之上。

工艺库,在综合里面就是逻辑库,其中包含了标准单元以及宏单元的延时信息、逻辑信息、面积等描述。

综合的最终目的一是设计中没有时序违例。二是综合后得到的门级网表都已经映射到工艺库上。三是避免一些电路(触发器锁存器同时出现在同一电路中,一个触发器输出作为另一个触发器的时钟,反馈组合逻辑未得到处理,异步逻辑和模拟电路未得到单独处理,有些单元未映射到工艺库上)。

现在对DC综合中的两个库进行说明。getch.db,getch.db只包含有用

boolean 表达式描述的单元电路逻辑。在dc时dc首先将RTL代码转换为通用的布尔表达式,就是getch格式,这个是与具体工艺无关的,是未优化的电路。target_library,是综合的目的库,里面是要映射的逻辑单元,将目标库中的文件设计成门级网表。

DC综合的流程分三步,转化,优化,映射。

并不是所有的结构描述都可以被综合。在 *** 作符之中,===与!==不可以被综合。time,defparam,$finish,fork join,initial,delay,UDP用户自定义原语,force release,wait均不可被综合。不考虑时序结构,忽略所有#(delay)指定的时序延时。

部分语言结构转化成逻辑门的解释。

赋值:三目运算符综合成多路选择器

if-else:控制信号是if的信号,综合为多路选择器,不会综合成庞大的多路选择器。隐含优先级。如果未能指明所有情况,会引入锁存器。

case:可以生成大规模多路选择器。无优先级,平行电路结构。可以用synopsys parallel_case指导平行编译。

always:一般引入触发器。对于时序需要由clk变化来触发;对于组合,需要由clk,reset,preset之外的电平触发。

for:产生级联的链式组合逻辑。

函数语句:综合产生一个有输出变量的组合模块。

所以在进行编码时需要注意相关规范:

避免混合使用上升沿和下降沿触发的触发器。连续assign语句非常简洁的表示功能,通常能生成性能很好的随机逻辑电路。但最终的逻辑结构不一定对称。设计者可以使

用圆括号将逻辑组合起来。时序建模尽量用非阻塞赋值。除非关键路径一般不调用门级描述。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11598384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存