数字前端设计 综合

综合的过程是将行为描述的电路、RTL级的电路转换到门级的过程

Design Compiler可以方便的将HDL语言描述的电路转换到基于工艺库的门级网表

逻辑综合的目的:

        决定电路门级结构

        寻求时序和面积的平衡

        寻求功耗与时序的平衡

        增强电路的测试性

综合的三个阶段: 综合= 转译+优化+映射

转译: HLD--->> GTECH 这个数据库跟工艺库是独立无关的

优化: 工作频率  面积   功耗   (根据约束对代码进行优化)

映射: 最终形成该工艺库对应的门级网表

DC会将代码分为以下的处理对象

design   port  clock  cell  references pin net

 

 

设计的处理对象

时序路径(Timing Path)

起点:  input_port  clock

终点: 寄存器D端  output_port

建立时间: 时钟上升沿之前数据需要稳定的时间

保持事件:时钟上升沿之后数据依然要保持稳定的时间

 

逻辑综合实施流程

        预综合过程 :

        施加设计约束:

        设计综合

        后综合过程

 Design Compiler 启动方式

        dc_shell       dc_shell-t (tcl模式)     design_vision(tcl模式)   design_analyzer

可用脚本执行  dc_shell-t -f  script

command.log 记录DC执行的命令以及设置的参数

filenames.log 记录DC访问过的目录,包括库、源文件等(推出时会自动删除)

读入设计文件

        dcsh模式需要带上不同参数

                read -format verilog[db vhdl]  file

        tcl模式需要使用不同指令

                read_db file.db

                read_verilog file.v

analyze    分析HDL的源程序并将分析产生的中间文件存于work的目录下

elaborate 在产生的中间文件中生产Verilog的模块或者VHDL的实体

这一对指令允许设计者在设计的GTECH建立之前,首先分析语法错误和及你选哪个HDL代码转换

analyze 语法检查生成 .syn文件,分析过的设计只需elaborate重新输入节省时间

 当读取完所有要综合的模块后,需要使用link命令将DC存储的模块或实体连接起来

        unresolved design reference警告

                重新读取,添加link_library

注意search_path指向的目录

DC在运行时需要用到的几种库文件

目标库: target_library

链接库: link_library

符号库:  symbol_library

算术运算库: synthetic_library

 目标库是综合后电路网表要最终映射到的库,由晶圆厂提供  .db (DC内部格式,不能用文本方式打开)  ------>  .lib

各个门级单元 行为  引脚 面积 时序信息  功耗方面的参数

DC根据target_library中给出的单元电路的延迟信息来计算路径的延迟。并根据各个单元延时、面积和驱动能力的不同选择合适的单元来优化电路

set target_library my_tech.db

 链接库时设置模块或者单元电路的引用,对于DC可能用到的库,我们需要在link_library中指定,其中也包括要用到的IP,link_library的设置中必须包含*,表示DC首先搜索已经调进DCmemory中的模块和单元电路、。设置link_library时需要注意search_path

通常情况下 链接库对应IP  目标库更多的指的是标准单元

符号库主要定义了单元电路现实的图像

算术运算库

        不需要设置DW库standard.sldb用于实现Verilog描述的运算符。

加法、乘法  默认综合为一些性能相对比较差的电路结构

让DC在综合过程中调用优化库

单位时序模型旨在为设计环境中的单元的各种实例提供精确的时序,模拟单元操作的实际情况

Timing arc的延迟取决于两个因素: 输出负载  输入信号转换时间

负载电容越大,延迟越大;在大多数情况下,延迟随着输入转换时间的增加而增加

slew指定了库的测量阈值

 转换事件必须乘以0.5,已获得与转换阈值(30-70)对应的转换时间、意味着表中实际值为10-90

((70-30) /(90-10)= 0.5)

不指定默认为slew1

施加约束

面积约束  set_area 100      100 的具体单位有晶源厂提供,定义这个单位有三种可能标准:

                                                        一个二输入与非门的大小作为单位1

                                                        以晶体管数码规定单位

                                                        根据实际的面积(平方微米等)

     可通过以下小技巧得到:先综合一个二输入与非门,用report_area看他的面积是多少

                                                如果是1  则第一种标准

                                                如果时4  则第二种

                                                如果其他值,则第三种

路径时序约束:目标是   约束电路中所有的时序路径

        输入到寄存器   寄存器到寄存器  寄存器到输出  输入到输出

定义时钟

        必须要定义的值:  clock source       clock period

           可能需要定义的值:  Duty clock       Offset/Skew       Name       

create_clock   -period 10 [gets_ports Clk]

set_dont_touch _network [gets_clocks Clk]

对所有定义的时钟网络设置为dont_touch,即综合的时候不对Clk信号优化

如果不加这句。DC会根据clk的负载对他产生buffer,而在实际电路中,时钟树的综合有自己特别的方法,需要考虑实际布线的物理信息,所以在DC不需要进行处理。

定义IO相对于时钟的时序

输入延迟   set_input_delay -max 4 -clock Clk [get_ports A]

输出延迟    set_output_delay -max 5.4 -clock Clk [get_ports B]

set_max_transition 

set_max_fanout  是指单元输入引脚相对负载的数码,并不表示真正的电容负载

set_max_capacitance  

remove_design -designs  移除DC中原有的设计

//************************************

//   屏蔽一些warning信息

//**********************************

suppress_message VER-130

suppress_message VER-129

current_design  指定顶层模块

set_drive 0 $clk  设置时钟端口的驱动为无穷大

set_ideal_network [get_ports clk]  设置时钟端为理想网络

保证综合阶段时钟网络是理想状态

复位信号同样设置

set_max_area 0 在时序满足的条件下,尽可能减少面积

环境约束

外界的温度和温度电压也会造成延时的变化

为了准确的估计模块输出的实现:输出延时、输出所接电路的负载情况,由于DC默认输出负载为0,相当于不接负载,显然过于乐观,不能反映实际工作情况

 set_load 5 [get_ports OUT1]   

set_load [load_of my_lib/and2a0/A] [get_ports OUT1]

set_load [expr [load_of my_lib/inv1a0/A]*3] OUT1

为了精确计算输入电路的时序:DC需要知道input_port的transition时间

set_driving_cell 允许用户可以自行定一个实际的外部驱动cell

set_driving_cell -lib_cell and2a0 \[get_ports IN1]

设置工作条件

 在综合的情况必须靠近

一般综合只要考虑两种情况,最差情况用于作基于建立时间的时序分析,最好情况用于作基于保持时间的时序分析

连线延时是通过设置连线负载模型(wire load model)  确定的,连线负载模型基于连线的扇出,估计它的电阻电容等寄生参数,也是有晶圆厂提供的

set current_design addtwo

set_wire_load_model -name 160KGATES

可以让DC自动根据综合出来的模块大小来选择复杂模型,这个选项时默认打开的

 连线负载模式(不同模块)

 set_wire_load_mode

围绕enclosed      顶层top    分段segmented

 set_wire_load_mode  enclosed

检查环境属性定义是否施加成功

check_timing          检查设计是否有路径没有加入约束

check_design        检查设计是否有悬空管脚或者输出短接的情况

write_script           将施加的约束或者属性写到一个文件中,可以检查这个文件看是否正确

编译

编译之后的结果

整个工程以ddc形式保存下来方便后续查询

write -f db -hier -output ~/EXAMPLE1.db

保存整个网表,用于后续的布局布线和后仿真

write -f verilog -hier -output ~/EXAMPLE1netlist.v

保存sdf文件,保存用到的标准单元的延迟值,在后仿真时也需要

write_sdf -version 2.1 ~/EXAMPLE1.sdf

 

优化策略

DC进行优化的目的是权衡timing和area约束,以满足用户对功能速度和面积的要求

优化过程是基于用户为design所加载的约束。

design rule constrain :transition fanout capacitance

optimization constant:delayed  area

DC默认DRC约束有较高优先权,必须先于optimization约束满足

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值