新Galaxy平台对面积和功耗的显著优化
——基于一款音视频处理芯片的实际应用
周炯,金孝
杭州市兰微电子股份有限公司后端设计技术部
摘要
随着半导体制造工艺的缩小,数字芯片设计收敛面临越来越大的挑战。时序,面积,功耗往往最后的结果和最初的设计期望有很大的出入。本文介绍最新的Galaxy平台在timing,area,power方面给我们音视频处理芯片带来的显著效果。
关键词:Area, Timing, power,clock gating,Galaxy PlatForm
当前,我国IC产业正在以前所未有的高速度发展着,芯片的工作速度越来越快,工艺尺寸越来越小,设计规模越来越大。这样,势必对芯片设计师的要求日益增高。我们既要追求芯片的性能,面积,又要保证芯片设计流程的高效,以此不落后市场的步伐。因此,在提高我们设计师的水平同时,合理的利用EDA设计平台,充分的利用EDA设计工具,将会使我们的设计工作事半功倍。
芯片介绍
该芯片是杭州士兰微电子股份有限公司的一块音视频处理芯片,前一版本工作频率在150M,面积为29.14mm^2。
根据本次项目的设计要求,此款音视频处理芯片的工作频率应不低于150MHz,采用GSMC 0.15μm CMOS工艺,芯片尺寸(包括PAD)不超过5.5mm×5.5mm,功耗不超过1W,后端设计和验证的周期不超过4周。为此,我们选择了Synopsys最新的Galaxy平台。RTL网表综合使用Design Compiler,时序验证使用PrimeTime,功耗分析使用PrimeTime PX,形式验证使用Formality,后端布局布线使用Jupiter+Astro。
音视频处理芯片的门级优化,主要是在逻辑综合阶段进行的,此次我们采用了最新版本的Design Compile-2007-SP3对音视频处理芯片行逻辑综合,以期达到比此款音视频处理芯片老版本具有更好的时序面积和功耗上的优化效果,下面是此款音视频处理芯片的门级优化流程
后端设计流程
Galaxy Design Platform
设计流程
时序面积的优化
我们采用Design Compile-2007-SP3新版本中全新的算法compile_ultra –timing_high_effort_scripts来对本次设计进行时序的优化。compile_ultra是一种对时序路径进行高度深层次计算算法,他保证了更好的时序质量。compile_ultra运用了two-pass compile straegy,其中的算法过程包括了以下部分:
- Timing-driven high-level optimization
- Macro architecture exploration for arithmetic operations
- Selection of the best datapath implementations from DesignWare libraries
and Module Compiler components
- Wide fanin gate mapping to reduce levels of logic
- Aggressive logic duplication for load isolation
- Auto-ungrouping of hierarchies along the critical paths
- Design-for-test (DFT) flow support (test-ready compile)
对于面积的约束,我们采用大家惯用的设置,set_max_area 0。以期让Design Compiler最大限度的对面积进行优化
对于时序约束文件,我们首先需要和前端进行充分的沟通研究,然后作了以下这些设置:
一、 基本时钟定义create_clock,create_generate_clock
二、 输入输出延迟,input_delay,output_delay
三、 对于一些不相关的路径set_false_path
四、 音视频处理芯片有很多模拟模块,因为他们的时序不容易分析,同时这些模拟模块会影响到数字部分的时序,因此我们在保证建立这些模拟模块之前对它们的时序性能进行充分的验证。在这里综合的时候我们对它们设置了set_disable_timing,从而不对他们进行时序分析
五、 有些路径有同步要求,但是允许有多个clock cycle的裕量,因此我们对这些路径set_multicycle_path
六、 因为Design Compiler默认一个clock domain为一个timing group,在每个group里,当时序最差路径无法优化的时候DC就不再继续优化下去了。因而我们有必要对某些特殊时序路径进行group,让dc参与更多的group进行单独优化。同时对每个group设置critical range,使得在critical path附近一定范围内的path violation也进行优化,优化这些subcritical path也可能会帮助优化critical path。具体的设置命令是:
set_critical_range 0.05 [current_design]
Group_path –name I2R –from [all_inputs]
当然,第一次综合的时候我们有时候无法考虑完全,也许综合结果会出现很多critical path,所以timing constraints中很多设置都是经过多次综合之后发现并同前端讨论陆续添加上去的,比如一些之前没有考虑到的false path和multcycle path等
设置上述之后,我们对芯片进行综合流程上第一步时序综合优化,编译的命令如下
compile_ultra –timing_high_effort_script -scan
“-scan”是为了后面做SCAN INSERT做准备,替换所有可用的sequential cell为scan cell。
之后我们做insert_dft来进行扫描链的插入
完成DFT之后我们再进行一次时序和面积的优化,以期对芯片进行更充分的优化,命令如下
compile –inc –map_effort high –area_effort high –scan
功耗的优化
在我们对此款音视频处理芯片进行了一次完整的初步综合之后,我们分别用PrimeTime,PrimeTime-PX分析了芯片的时序和功耗,其中,芯片时序分析在150M能够通过。但是分析功耗的时候发现芯片功耗接近1W。
由于音视频处理芯片功耗较大,为了节约成本,提高产品的性能,我们有必要采取一定的措施来对功耗进行进一步的优化,那么,除了修改RTL,其他是否还有什么可行快速的办法来降低芯片的功耗,这是一个值得探讨的问题
我们先简单分析了下功耗的来源
Soc芯片功耗的来源主要来自数字单元,模拟单元,IO单元,存储器单元。
其中数字单元的功耗又来源于时钟的翻转,组合逻辑单元和时序单元。
IO单元的功耗来源于时钟PAD,数字PAD,模拟PAD。
我们逻辑综合的对象主要是数字单元部分,所以我们主要也是针对数字单元的功耗进行优化
Soc芯片功耗类型

芯片在工作的时候,它的功耗很大一部分是由于时钟网络的翻转消耗的,因而我们能否通过某种方办法控制时钟网络翻转来减少不必要的翻转能耗
Design Compiler可以在综合过程中自动插入clock gating这种结构,来达到降低功耗的作用。
Clock Gating原理图

从图中我们可以看到,在不插入clock gating的时候,网络时钟的每一次翻转都会直接造成它所连接的寄存器内部的时钟翻转,这样就会在这些寄存器不需要工作的时候出现大量的能耗浪费。而当插入clock gating之后,寄存器只有在它工作的时候时钟才会传送到它的CK端,也就是它不工作的时候内部没有时钟翻转能耗。
Clock gating 中加入一个latch的作用是使时钟在使能信号控制下不会产生毛刺。
Clock Gating的插入
我们只需要在进行compile_ultra之前通过一些命令就可以方便的对elaborate之后的网表进行clock gating结构的插入
下面是插入clock gating的命令
Set_clock_gating_style –sequential_cell latch –control_point before –control_signal scan_enable
Insert_clock_gating –global
Propagate_constraints –gate_clock
Report_clock_gating
设置上述之后,我们对芯片进行第一步时序综合优化,命令不变
compile_ultra –timing_high_effort_script -scan
仍然在insert_dft之后再次进行一次时序和面积的优化
compile –inc –map_effort high –area_effort high –scan
布局布线
之后我们把综合好的netlist进行了时序分析(PrimeTime)和形式验证(Formality),均通过了检查之后,采用synopsys的Jupiter+Astro工具进行布局布线。
Floorplan
在floorplan阶段,Jupiter拥有的Cell and Macro Placement和PNS(Power Network Synthesis)为我们迅速确定Macro的摆放位置、以及合理的布置电源地网络提供了极大的便利,节省了大量的时间。尤其是在floorplan阶段能够使用PNS提前考虑IR-Drop的结果,然后根据该结果预先布置好电源地网络,我觉得是非常有帮助,以前在Astro中需要先把电源地网络布好之后做placement,再做IR-Drop分析,如果有问题就必须调整电源地网络,很有可能会需要重新做placement,那样就会需要花费很多时间。
下图是Jupiter的Cell and Macro Placement得到的结果:

Cell and Macro Placement花费的时间比较短,我们可以迅速看到placement的大致情况,来判断Floorplan是否合理:

当然对于局部的Macro必然需要手工调整,Jupiter还有个很好用的Floorplan Analysis/Editing工具栏,方便我们对Macro进行手工修调:


在本案中Macro比较多,形状大小不一,有了Cell and Macro Placement和Floorplan Analysis/Editing使我们节省了很多时间、精力,Macro摆放得也更加合理。
下面是PNS的结果,和Astro-rail的结果吻合:

根据PNS的结果,Jupiter可以自动布好电源地线,相当方便:

P&R中clock_gating cell的处理
在P&R阶段主要提一下clock_gating cell在placement以及CTS中的处理,其他步骤都没有太多问题。
1.因为我们综合的库里面没有clock-gating cell,在DC中我们用Latch和Nand组建成一个clock-gating cell,所以我们在placement的时候就希望这个组合尽量紧密结合。由于这个组合之间的连线(Latch的Q端到Nand的A端)只连接了这两个cell,我们就考虑通过增加netWeight来使它们靠的更近一些,把所有的这种连线都提取出来写在一个script里面,如下:
netWeight “i_top/clk_gating_Mcu_reg_01/net123” 255 255
netWeight “i_top/clk_gating_Mcu_reg_02/net123” 255 255
……
2.在CTS时,Astro会把clock_gating cell中的那个Latch认为是clock tree leaf,在balance他和其他register的时候就会有问题,所以我们不希望Astro把它作为leaf pin,我们可以通过“astSetClockNonStop”这个命令让clock tree穿过这些Latch,把所有的clock_gating cell中的那个Latch都提取出来写在一个script里面,如下:
astSetClockNonStop “i_top/clk_gating_Mcu_reg_01/latch” #t
astSetClockNonStop “i_top/clk_gating_Mcu_reg_02/latch” #t
……
Galaxy PlatForm下的优化结果
Ccompile_ultra 的Two-pass strategy优化结果
通过compile_ultra 的two-pass compile strategy,我们初步综合最后得到的结果为:
Timing
156M时序通过,slack为0
Area

Power

Clock gating+Ccompile_ultra Two-pass Strategy
用Design Compile对芯片插了clock gating之后,再进行comgpile,
得到最终综合结果
clock gating report

Timing
156M时序通过,slack为0
Area

Power

我们可以明显的看到,在做过clock gating之后,现在的结果和之前没有做clock gating相比,特别是功耗方面做了很大的改善,从880.3mw降到517.6mw。大约减少了41.2%。
同时,面积也得到了很好的优化,从20553732降到了19205666,大约减少了6.6%。
两次综合的时序均在156M上通过。
布局布线结果

结论
经过新版Design Compile-2007-SP3的逻辑综合,此次对老版本音视频处理芯片进行了重新的综合,在保证工作频率不变的情况下最终的布图面积从29.14mm^降低到26.22mm^,降低了6.6%, 功耗降低41.2%。

而在采用了clock gating之后,两次综合结果对比,功耗降低了41.2%,面积降低了6.6%

最终,此次经过Synopsys Galaxy PlatForm进行版图优化之后,此版芯片面积确定为5.8mm×4.53mm(包括PAD和压焊盘),平均功耗约0.5W,经过后仿验证,此款音视频处理芯片可以工作在150MHz的时钟频率,。我们最后将采用GSMC0.15μm制造工艺,于近期流片。
参考文献
Synopsys用户手册
http://solvnet.synopsys.com





