芯片后端之 概述《 DC脚本命令(一)》

前面讨论了影响DC综合工具逻辑推断的四大因素中前三个,分别为 工艺库、层次划分、编码风格,现在来系统的讲述第四个影响因素: 编译指令,即DC所用到的命令。

一、流程简介

Design Compiler有两种命令行接口,dcsh模式和TCL模式,其中TCL命令行模式使用的范围更广,下图描述了综合基本流程及涉及的主要命令。
在终端上输入TCL命令时,有些机器上可能不支持退格键(Back Space),那么可以尝试 Ctrl+h和Delete 键。
在后续命令执行过程中,命令设置成功则返回“1”,失败则返回“0”。

二、启动DC

启动dc_shell的dcsh模式。dc_shell;
启动dc_shell的TCL模式。dc_shell-t;

三、读入与链接

DC提供了两种读入设计的方法:read和 analyze+elaborate

3.1 analyze+elaborate

3.1.1 analyze命令

analyze命令:用于分析 HIDL 代码,检查设计错误以便为设计建立基于通用库的逻辑结构,并将中间结果存入指定的库中。语法格式为:

3.1.2 elaborate命令

elaborate 命令:为设计建立与工艺无关、即 GTECI 库上的结构级描述,为后续的优化和映射做好准备,并支持参数传递。对设计进行描述,需要对各个设计单独进行。语法格式为:

DC可以综合出各种类型的触发器和锁存器,其中触发器类型有:
DFF: 普通寄存器,没有复位reset、置位 set、使能enable 等;
DFF w/Async: 带有一个异步控制端set或reset的DFF;
DFF w/Dual Async: 带有两个昇步控制端set和reset 的DFF;
DFF w/Sync cntl: 带有同步控制端的DFF。
锁存器类型有:
Latch: 普通锁存器,没有复位 reset、置位set、使能enable 等:
Latch w/Async: 带有一个异步控制端 set 或 reset 的 Latch:
Latch w/Dual Async: 带有两个异步控制端 set 和 feset 的 Iatch;
Latch w/Sync clr: 带有同步clear 端的 Latch。

3.2 read命令


read命令可以一步完成 analyze&elaborate的工作,也可以用来读取 db、EDIF等格式的设计(analyze+elaborate仅读取 VHDL和Verilog 设计文件)。但是,read命令无法支持参数传递以及VHDL 中的构造体选择等功能。语法格式为:

 

四、工作环境设置


在读入设计后,需要指定设计的工作环境,包括电路的工作条件,线负载模型以及I/O端口属性如输入驱动、输出负载等情况。

4.1 设置工作条件


在设置工作条件之前可以通过list_libs命令查看可用的工艺库。
工艺库的建模通常是关于PVT的建模,单元和互连线的延迟会因工作条件变化而在标值之间波动,延迟于PVT的关系如图:

4.2 设置连线负载


线负载模型用于估算电路中互连线的长度和扇出对电阻、电容和面积等的影响,DC 采用线负载模型中指定的数字计算互连线延时和电路的工作速度。线负载模型可以显式指定也可以由工具自动选择。显式指定通过命令 set_wire_load_ model 完成,其语法格式为:

4.3 设置线负载工作方式

线负载模型的工作模式有三种:top、enclosed、 segmented ,目前多使用 segmented。对应的命令为:

4.4 设置输入负载


在DC中,驱动强度用电阻值表示,阻值越小表示驱动能力越大,默认情况下DC认为输入端口的驱动电阻阻值为0,即驱动强度无限大。但0值通常用于时钟和复位等扇出很大的端口。对其他端口,为避免这种不切实际的驱动强度,可以采用set_drive 和set_driving_cell 两条命令来设置输入端口的驱动强度。

 

 

 

 

 

 

五、 设计时序约束 

 

 

 

 

 

 

 

 

 

 

 

七、练习实践 

基于前面讨论的设计约束命令;这里分析一个相对复杂的时序约束的例子。
如图所示。在该设计中,4个时钟的时钟周期分别为:

clk1 =30ns,

clk2=20ns,

clk3 = 10ns,

clk4= 15ns。

clk1和clk2的network latency 分别为 0.5ns 和 0.6ns,翻转时间都是 1.0ns。时钟clk3和clk4 与顶层设计top异步,其他信息表示在图中。对这个设计进行时序约束的命令为:

 

#create clock
create_clock -period 30 [get_ports clk1]
create_clock -period 20 [get_ports c1k2]
#Generate virtual clocks for clk3 and clk4
create_clock -period 10 -name clk3
create_clock -period 15 -name c1k4
#Constrain uncertainty,transition, and latency
set_clock_uncertainty 0.35 [get_clocks clk1]
set_clock_uncertainty 0.40 [get clocks clk2]
set_clock_transition  1.0  [get_clocks "clk1 clk2"]
set_clock_latency 0.5 [get_clocks clkl]
set clock_latency 0.6 [get_clocks c1k2]
#Constrain inputs and outputs by input and output delay
set_input_delay  2.5 -clock clk3 [get_ports data_in]
set_output_delay 3.0 -clock clk4 [get_clocks data_out]
#Timing Exceptions
set false path -from "clk3 clk4" -to "clk1 clk2"
set false path -from "clk1 clk2" -to "clk3 clk4"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值