前言
最近又要频繁的看DC综合报告,发现之前的东西忘得是差不过了,因此用这篇文章用来做下笔记,记录下第一眼看DC综合报告时看些什么内容。
看哪个报告
这是第一次综合完之后的终极问题,我根本不知道应该看哪个报告。进行完综合后,就可以在report目录下得到各类综合结果报告,具体有哪些文件这取决于在综合tcl配置中设置了哪些项,比如像我这样设置:
report_timing -delay max -max_paths 1 > $timing_report
report_timing -delay max -path end -max_path 80 > $timing_max20_report
#report_area -hierarchy > $area_report
report_area -hierarchy > $area_report
#report_reference -hierarchy > $references_report
report_reference -hierarchy > $references_report
report_cell [get_cells -hier *] > $cell_report
report_constraint -all_violators -verbose > $constraint_report
report_power -analysis_effort high -verbose > $power_report
check_design > $check_syntax_report
report_qor > $qor_report
那么就会得到这些报告:
那么接下来,就找准那个qor.rpt猛看就可以了,绝大部分信息已经提供在里面。
qor.rpt
通常我们所说的综合结果就是指的qor.rpt,该文件是对模块综合结果的整体概览。打开qor.rpt后,可以发现repot整体有三个部分内容:timing、cell和area。下面这个是我综合了一个小模块的结果:
****************************************
Report : qor
Design : test
Version: L-2016.03-SP1
Date : Fri Mar 11 12:47:25 2022
****************************************
Timing Path Group 'clk'
-----------------------------------
Levels of Logic: 9.00
Critical Path Length: 0.90
Critical Path Slack: 0.08
Critical Path Clk Period: 1.00
Total Negative Slack: 0.00
No. of Violating Paths: 0.00
Worst Hold Violation: 0.00
Total Hold Violation: 0.00
No. of Hold Violations: 0.00
-----------------------------------
Cell Count
-----------------------------------
Hierarchical Cell Count: 0
Hierarchical Port Count: 0
Leaf Cell Count: 36
Buf/Inv Cell Count: 10
Buf Cell Count: 0
Inv Cell Count: 10
CT Buf/Inv Cell Count: 0
Combinational Cell Count: 19
Sequential Cell Count: 17
Macro Count: 0
-----------------------------------
Area
-----------------------------------
Combinational Area: 67.737602
Noncombinational Area: 263.894401
Buf/Inv Area: 21.168001
Total Buffer Area: 0.00
Total Inverter Area: 21.17
Macro/Black Box Area: 0.000000
Net Area: 4666.689758
-----------------------------------
Cell Area: 331.632002
Design Area: 4998.321761
Design Rules
-----------------------------------
Total Number of Nets: 54
Nets With Violations: 0
Max Trans Violations: 0
Max Cap Violations: 0
-----------------------------------
Hostname: xiaotu-eda
Compile CPU Statistics
-----------------------------------------
Resource Sharing: 0.09
Logic Optimization: 0.34
Mapping Optimization: 0.67
-----------------------------------------
Overall Compile Time: 4.10
Overall Compile Wall Clock Time: 5.75
--------------------------------------------------------------------
Design WNS: 0.00 TNS: 0.00 Number of Violating Paths: 0
Design (Hold) WNS: 0.00 TNS: 0.00 Number of Violating Paths: 0
--------------------------------------------------------------------
1
timing
Timing报告部分可以有如下几个部分信息:
Timing Path Group 'clk' —— clk时钟域的时序情况;
Timing Path Group 'clk1' —— clk1时钟域的时序情况;
Timing Path Group 'gating_clk' —— gating时钟的时序情况(上次的笔记里思考过这个地方,不过还是有一些理解不清的点:【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考);
Timing Path Group 'from MEN'/Timing Path Group 'to MEN' —— mem输入输出时序;
Timing Path Group 'Reg In'/ Timing Path Group 'Reg Out' —— 模块的输入输出时序;
Timing Path Group 'THROUGH PATH' —— 模块内直接穿线的时序,即in – out;
我只综合了一个简单的模块,因此就以Timing Path Group 'clk'为例看一下时序报告:
Levels of Logic:最深的逻辑深度是9级,可以打开对应的clk_timing.rpt来确认一下,最是最长的一条路径是9级逻辑;
Critical Path Length:最长时序路径的arrival时间,单位为ns(单位我不太确认是默认值还是在哪里设置,留疑),看一下上面图里最长路径的“data arrival time”,确实如此;
Critical Path Slack:相比于时钟period,最长路径的裕量或者叫最差路径时序裕量,为负值时说明不满足理论的时序约束。在实际工作中会设置一个阈值,例如-50p以上的时序路径可接受,以下为违规路径,一般要综合考虑总的违规路径数量,否则后端删库跑路;我这里是个正数,说明路径上时序不饱和啊。在工具这里,裕量为负则视为一条违规路径;
Critical Path Clk Period:时钟period;
Total Negative Slack:总的时序裕量,就是把违规时序路径的裕量给你加一起,正的不会加上去,所以你看我这个是0;
No. of Violating Paths:时序违规路径的总条数,还是一样,条数太多了后端会提刀;
Worst Hold Violation/ Total Hold Violation/ No. of Hold Violations与hold time violation有关的几项,从名字也能看出来意思,工作中作为前端很少关注这三项。
然后在qor.rpt的最后面还有这个信息:
WNS:Worst Negative Slack,TNS:Total Negative Slace,整个模块综合多个时钟域所有时序路径后的一个整体的时序情况,上面是setup下面是hold,一般前端只关注setup(也不排除是我只关注了setup吧)。
Cell Count
Cell count里一般我只关注四个数值:
Combinational Cell Count —— 组合逻辑cell数量;
Sequential Cell Count —— 时序逻辑cell数量;
Leaf Cell Count —— 总cell数量,等于Combinational Cell Count + Sequential Cell Count;
Macro Count —— Mem块数;
其他几个cell count说实话我一直没搞清,平时也关注的很少,需要的时候载细致的查一下吧。
Area
在area部分,主要关注的是这两个数值:
Cell Area —— 设计单元(包括所有的逻辑和men)所占得总面积;
Macro/Black Box Area —— Mem单元所占面积;
之所以关注这两个面积,是因为可以通过利用率反推实际模块的面积。虽然在表中可以看到DC给出了cell area和net area并将这两个值相加得到了总的面积,但实际上这个net area的参考意义很小,因为DC没有布局布线的信息。因此通常的做法是使用"DC的cell area/面积利用率"去预估一个实际面积。
而进行预估时,因为mem的形状更为规整布局更加容易,mem部分的利用率通常是远高于外围设计的逻辑电路的。所以要进行拆开分别计算再相加。
故而在DC阶段预估模块的实际面积为:
实际面积 = (cell_area-box_area)/逻辑利用率 + box_area/mem利用率
至于两个利用率分别是多少呢?逻辑利用率悲观些可能在50%,乐观的话也一般不超过70%;mem利用率一般会在80%~90%之间吧,根据工艺电压等外界因素去调整,这个一般得老司机来拍了。