【芯片前端】第一次看DC综合报告时看些什么内容

本文主要介绍在查看DC综合报告时应关注的内容,重点解析qor.rpt中的timing、cell count和area三个方面。针对timing,文章强调了critical path length、slack和violating paths等关键指标。在cell count部分,提到了组合逻辑、时序逻辑、leaf cell及macro count的统计。在area方面,重点关注cell area和macro/black box area,以及如何预估实际模块面积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近又要频繁的看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%之间吧,根据工艺电压等外界因素去调整,这个一般得老司机来拍了。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值