DC经典入门问题(2)

2018-12-29 23:06

Q2.1 如何加IO端口的约束? 最普通的方法是

对输入端,set_input_delay, set_driving_cell (也有用set_input_transition的,但是不多见)

对输出端,set_output_delay,set_load 对时钟端,set_clock_transition

dc综合时的clock transition应该参考什么设定? set_drive ,set_load

Q2.2 哪些端口不需要约束?

静态信号可以set_false_path,比如reset,test_mode,function_mode_select 不能真的什么约束都不加

Q2.3 什么样的reset信号可以set_false_path?

如果在工作时,reset信号有效时,时钟信号不翻转,就可以set_false_path 如果reset信号动作时,时钟也有动作的话,就不能set_false_path

Q2.4 像reset那样的high fanout信号需要设定为ideal net吗? 如果是false path的话,可以设为ideal net

一般不需要设为ideal net,让DC加入buffer tree后,有利于估算功耗和面积

Q2.5 如果有一组输出信号,需要他们之间对齐,但是不太在乎有多大的延迟,这时应该如何约束?

如果有输出时钟的话,在那个输出时钟端口定义一个generated_clock,其它信号的output_delay都相对于这个generated_clock而定。只要有max和min,就可以把所有信号卡在一个范围之内

如果没有输出时钟的话,用set_output_delay -reference_pin

Q2.6 如何计算input和output delay? 如果是block的input和output delay,可以预先分配,比如输出端,输入端各1/3,中间的连接1/3

block的端口最好都flop-in,flop-out

如果是chip IO,要度其他芯片的IO时序和电路板上面的延迟,比较麻烦

set_input_delay的时间设置

(3) DRV

DRV有时也加DRC,与物理检测的DRC不是一个概念 DRV包括,

set_max_transition 与工艺相关,65nm的话,在0.6ns左右 set_max_fanout 与工艺相关,一般在12~20之间 set_max_capacitance

set_max_power set_max_area

(4) false path,multicycle path

Q4.1 什么情况下需要set_false_path? 异步时钟之间,

到meta-stability 的第一个FF路径, 静态信号

Q4.2 何时会用到multicycle_path? 太长的path,

不会每个周期都变的信号

注意:在RTL中,前端一定要多周期工作一次的功能

一般set_multicycle_path -setup

要同时写set_multicycle_path -hold

(5) wire load model

wire load model是一种简单地根据fanout来估算wire delay的方法,在综合时,一般根据设计的大小选择对应的WLM

有时也会用zero wire load model,这时的clock period要相应减小15~25%,或者clock uncertainty增加15~25%

set_wire_load_model 两种模式top和enclosed到底有什么区别?

更加准确的计算wire delay的方法是DC topo和RC physical, 他们在综合时会粗略地做个place,然后根据距离来计算延迟

(6) clock gating

Q6.1 如何加clock gating? 局部的clock gating在综合时,会自动加进去。加clock gating后,不但会减小功耗,还会改善时序,因为本来到D端的逻辑,一部分被移到CK端了,简化了D端的逻辑 整个block的clock gating,一般直接在RTL里面加,因为DC没有那么聪明

Q6.2 需要对clock gating加什么特别的约束吗? 如果使用标准库里面的ICG单元,不需要附加任何特别的约束,前后端的工具都认得它

如果用latch+and自己搭的clock gating,你要对那个and单元

set_disable_clock_gating_check,还要告诉后端,一定把latch和and摆在一起

一般只在没有动态切换时钟时,才可以用一个and/or做clock gating,这时也要set_disable_clock_gating_check

clock gating cell约束

某个domain的clk通过gating关断重启后,对这个domain做复位有没有必要?

(7) case_analysis

set_case_analysis可以强制某个node为0/1

这个0/1会沿着纯逻辑组合单元向前传送,如果没有特别设定的话,会停在时序单元上 注意,只是是向前传,不会向左右2边和向后传 举例:

如果设在输出端上,那么所有fanin端都会被强制为0/1

如果只设在某个输入端上,与之相连的输出端和其他输入端都不受影响

(8) ideal net/network

ideal_net只作用于这条net

ideal_network会把这个属性传送下去 clock net自动带有ideal net属性

其他net,何时需要设定ideal net?见Q2.4

综合脚本的样本现在到处都是,最好找一个,照猫画虎改改用

建议把时序约束脚本与综合脚本分开存放,这样时序约束可以单独使用。

(1)综合的注意事项

Q1.1 需要fix hold吗?

不需要,hold交由后端去做就好了。

所以综合时,不需要读入min.lib,不用设wc_bc等复杂的选项

Q1.2 综合出来的网表如何验证? 如RTL做形式验证

gate-sim (网表仿真)。不要用延迟。

不需要从DC输出SDF,因为那个根本不准,而且它也无法保证没有hold违反

Q1.3 如何让DC自动插入clock gating 在脚本中加入

set power_cg_always_enable_registers true set_max_leakage_power 0.0 set_max_dynamic_power 0.0

set_clock_gating_style (指定ICG)

insert_clock_gating

replace_clock_gates

Q1.4 综合时要检查哪些项目? 最最起码要做,

综合前,check_design,check_timing,保证所有的path都有约束(含timing exception)

综合后,report_timing, report_constraint,report_area,report_power,report_qor

Q1.5 如何解决综合后setup的违法? 多综合几遍

检查约束是否合理 最后只好改RTL了

Q1.6 如何判断约束是否合理?

什么是合理的约束还真不好说,但是下面是一些不合理的情况,遇到了一定得解决 2#楼里面所列约束项目不完整的

startpoint或endpoint的clock cycle特别大的,说明那是异步时钟

某个cell或net延迟很大的,可能是clock net当作signal用了,设了dont_touch

Q1.7 如何得到更好的网表?

对于DC,一般人们都喜欢把clock period调小一点(10~25%),那样DC会给你个timing比较好的网表,但是代价的面积的增大和功耗的增加。当然,你调clock uncertainty也有同样的效果

#******************************************************************************************* # File name: syn_script_templet.tcl # Author: xxx xxx xxx

# Description: This file is just only a templet for synthesis, including basic synthesis flow. # Users can make it as reference design.

#******************************************************************************************* remove_design -all

#****************************

# read design to DC memory, Assuming there are four modules #**************************** read -f verilog ../design/mod.v read -f verilog ../design/mod1.v read -f verilog ../design/mod2.v read -f verilog ../design/mod3.v # or read like this

set all_modules {mod mod1 \\

mod2 mod3 \\ }

foreach (current_module, all_modules) {

set design_path {../} }

#******************************/

# Set_dont_touch Attribute on cell, net, reference or design # Set_dont_touch_network Attribute on clock, pin, ports #******************************/ set_dont_touch_network find(port,\set_dont_touch [get_cells {xxxx/xxxx/aaa}] set_dont_touch [get_nets {bbbb}] set_dont_touch [get_designs {ssss}] #******************************/ # create clock info

#******************************/

create_clock -name clk -period 2.56 -waveform {0 1.28} [get_pins ,{s_x/I_PMA/I_PMA7/RXBCLK}]

create_generated_clock -name clk_125 -source A_x/clk -edges {1 3 5} [get_pins {p_x/clk_125}]

set_clock_uncertainty -setup 0.2 clk set_clock_uncertainty -hold 0.02 clk set_clock_uncertainty -setup 0.2 clk_125 set_clock_uncertainty -hold 0.02 clk_125 #******************************/ # exceptions

#******************************/ set_false_path -from clk_m -to clk_125

set_max_delay 8 -from [get_pins {a_x/A}] -to [get_pins {P_x/x_x/d}] current_design mcucore

set_multicycle_path 3 -through alu_x/mulb_x/* #******************************/ # Set Disable Timing

#******************************/

set_disable_timing -from CLKA -to CLKB synopsys_mem/TP8X16C1 set_disable_timing -from CLKB -to CLKA synopsys_mem/TP8X16C1 #*******************************/ # Report Clock Related Information #*******************************/

report_clock -attributes > ./design/report_clock.rep report_clock -skew >> ./design/report_clock.rep report_design > ./design/report_design.rep report_port -verbose > ./design/report_port.rep


DC经典入门问题(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:产业经济学定位涉及的几个基本概念

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: