DC实验报告流程

实验一

DC(design compile)的基本使用流程

Design Compiler是Synopsys综合软件的核心产品。它提供约束驱动时序最优化,并支持众多的设计类型,把设计者的HDL描述综合成与工艺相关的门级设计;它能够从速度、面积和功耗等方面来优化组合电路和时序电路设计,并支持平直或层次化设计。

Design Compiler的功能

       利用Design Compiler,设计者可以:

l  利用用户指定的门阵列、FPGA或标准单元库,生成高速、面积优化的ASIC;

l  能够在不同工艺技术之间转换设计;

l  探索设计的权衡,包括延时、面积和在不同负载、温度、电压情况的功耗等设计约束条件;

l  优化有限状态机的综合,包括状态的自动分配和状态的优化;

l  当第三方环境仍支持延时信息和布局布线约束时,可将输入网表和输出网表或电路图整合在一起输入至第三方环境;

自动生成和分割层次化电路图

其完整的流程见图-1。

l   

图 1

1)  建立设计环境

1)在工作目录下创建db(存放DC综合生成的项目db文件)、lib_syn(存放库文件)、log(存放综合程序运行报告)、netlist(存放综合网表)、rpt(存放综合结果的数据报告)、script(存放脚本文件)文件夹,并将.synpsys_dc文件拷到工作目录下。

2)DC启动时,会自动搜索工作目录下的.synpsys_dc文件, 根据文件中的内容来设定综合环境。因此,在启动DC前,可以先修改.synpsys_dc中库文件的路径(也可以在进入DC后设置)。

set search_path    "$search_path ../ref/db ./scripts" ……指明库所在的路径

set target_library "sc_max.db" ……目标库

set link_library   "* sc_max.db" ……链接库

set symbol_library "sc.sdb" ……特征库

在上述环境建立所需的各类库中,一般由生产商提供目标库,库中的各类cell用于逻辑映射,链接库则包括一些已经做好的设计和子模块,还包括了当前设计的目标库,门级网表实例化元件和单元都来自于它。

2)读入设计(以下命令都可在DC中的<design_vision-t>里执行)

1)RTL代码的读入

Design Compiler使用HDL Compiler将RTL级设计和门级网表作为设计输

入文件读入。通过analyze和elaborate命令读入RTL级设计,通过read_file或read命令读入门级网表。Design Compiler支持所有主要的门级网表格式。

如果你用read_file或read命令读入RTL设计,等于实现了组合3analyze和elaborate命令的功能。

2)指明设计顶层

current_design命令

       利用这个命令可设置任何一个内存中的设计为当前设计:

dc_shell> current_design ANY_DESIGN

Current design is ’ANY_DESIGN’

3)链接库文件

       要完成一个设计,它就必须与涉及到的库元件和设计链接。对于每一个子设计,必然有一个基准,将子设计或元件与链接库相连。这个过程称为设计链接或基准分解。

       Design Compiler执行下列步骤来完成基准分解:

(1)决定当前设计和它的层次引用哪些库元件和子设计;

(2)搜索链接库,查找这些引用;

(3)将设计与查找到的引用链接。

       Design Compiler首先搜索local_link_library参数定义的库和设计文件,然后再搜索link_library变量中定义的库和设计文件。

       在一个分层的设计中,Design Compiler只考虑顶层设计的局部链接库,而忽略与子设计相关的局部链接库。

       Design Compiler使用第一找到的基准。如果它查找到了具有相同名称的额外的基准,将会产生一个警告信息来识别这个忽视的、重复的基准。如果Design Compiler没有找到基准,警告信息建议该基准不能被分解。


       图2.6显示了在链接库、单元和基准之间的链接过程,在这个例子里,Design Compiler在LIBRARY_2工艺库里找到了库元件NAND2;在设计文件里找到了子设计MULTIPLIER。

图2.6 分解基准

       你可以手动地或自动地进行设计的链接。

(1)手动链接

       用link命令来手动地链接设计。在开始链接过程前,link命令移走现有的链接。

(2)自动链接

       下列的dc_shell命令自动链接设计:

? compile

? create_schematic

? group

? check_design

? report_timing, report_constraints, and other report_* commands

? compare_design

当执行自动链接时,它并不移走现有的链接。自动链接过程只工作于未链接的元件

(4)设计唯一实例化

uniquify

3)  定义时序约束、面积约束和综合环境约束

1)设定时钟约束

create_clock -period 10 [get_ports clk],其中“get_ports clk”为时钟的来源,“-period 10”为时钟的周期。通过时钟定义约束了寄存器到寄存器之间的延迟。见图4。

图 4

set_dont_touch_network [get_clocks clk]

一般需要告诉综合器不要对时钟网络进行缓冲驱动,这一工作将在后续的版图布局布线中进行。

set_clock_uncertainty –setup 0.3 [get_clocks clk]

set_clock_uncertainty –hold 0.3 [get_clocks clk]

这两句是设定时钟的建立时间和保持时间。

set_clock_latency -rise 3 [get_clocks clk]

set_clock_latency -fall 3 [get_clocks clk]

这两句是设定时钟的上升时间和下降时间。

set_input_delay -max 0.6 -clock clk [get_ports “A”]

set_output_delay -max 0.8 -clock clk [get_ports “B”]

这两句是设定特定端口“A”(或“B”)的输入延时(或输出延时)。如图5。

图 5

2)设定面积约束

 set_max_area 0,规定最大面积。

3)设定输出负载

set_load 5 [get_ports OUT1]

这句定义了输出负载为5,当不知道输出负载的值为多少时,可以用以下命令。

    set_load [load_of ssc_core_slow/AN2/A] [get_ports OUT1] 或

set_load [expr{[ load_of ssc_core_slow/AN2/A]*2.2}] [get_ports OUT1]

前一句是指OUT1的输出负载等同于A,后一句是指OUT1的输出负载等同于A*2.2。

4)设定模块的输入驱动强度信息

set_driving_cell -lib_cell ND2 [get_ports IN1],综合工具需要知道输入的驱动能力来计算输入的变化时延,见图6。

图 6

5)设定综合的操作条件

    set_operating_condition best 或

set_operating_condition slow

6)设定布线延时

set_wire_load_model “tc6a120m2”,通过设定线载模型来设定布线延时。

4)  编译和优化

选择编译策略

你可以用来优化层次化设计的两种基本编译策略被称为自顶向下和从下上。

       在自顶向下的策略里,顶层设计和它的子设计一起进行编译。所有的环境和约束设置都根据顶层设计来定义。因此,它会自动的考虑内部模块的依赖性。但对于大型设计,这种方法并不实用,因为所有的设计必须同时贮存在内存里。

(1)    在从下到上的策略里,分别对子设计进行约束和编译。在成功编译后,这些设计都被赋予一个dont_touch参数,防止在随后的编译过程中对它们进行进一步的改变。然后这些编译过的子设计组合成更高层次的设计,再进行编译。编译过程一直持续到顶层设计被综合。由于Design Compiler不需要同时将所有未编译的子设计装载进内存,这种方法允许你编译大型设计。然而,在每一个阶段,你必须估计每个内部模块的约束,更有代表性的是,你必须不停地编译、改进那些估计,直到所有的子设计界面都是稳定的。每一个策略都有其优点和缺点,这取决于你设计的特殊性和设计目标。你可以选择任意一个策略来进行整个设计,或者混合使用,对每一个子设计采用最合适的策略。

(2)    优化设计

利用compiler命令启动Design Compiler的综合和优化进程。有几个可选的编译选项。特别的,map_effort选项可以设置为low、mediu或high。

       初步编译,如果你想对设计面积和性能有一个快速的概念,将map_effort设置为low;默认编译,如果你在进行设计开发,将map_effort设置为medium;当在进行最后设计实现编译时,将map_effort设置为high。通常设置map_effort为medium。

1)检查设计层次关系并进行单元映射

check_design

compile

2)修复hold时序并重新编译

   set_fix_hold [get_clocks clk]

   compile –only_hold_time

五、导出分析报告

使用report_lib命令来报告库中的内容。report_lib命令能够报告下列资料:库单位;操作条件;线形负载模型和单元

1、检查整体设计导出报告

2、导出设计面积报告

 

3、导出设计违例报告

4、导出setup时序违例的详细报告

 

5、导出hold 时序违例的详细报告

六、导出设计

   write_lib命令能够以Synopsys数据库、EDIF和VHDL格式来保存一个编译过的库。

生成综合网表和pnr 所需的时序约束文件

七、脚本文件介绍

       我们可以在一个脚本文件里保存那些综合过程中用过的设计参数和约束。脚本文件是用来管理设计参数和约束的理想工具。

设计实例的脚本文件

       下面这个例子是一个简单的脚本,执行了自顶向下的编译过程。脚本中包含注释,标明流程中的每一个步骤。

       /* specify the libraries */  指定库

target_library = my_lib.db

symbol_library = my_lib.sdb

link_library = "*" + target_library

/* read the design */  读入设计文件

read -format verilog Adder16.v

/* define the design environment */  设置设计环境

set_operating_conditions WCCOM

set_wire_load_model "10x10"

set_load 2.2 sout

set_load 1.5 cout

set_driving_cell -cell FD1 all_inputs()

set_drive 0 clk

/* set the optimization constraints */ 设计最优化约束

create_clock clk -period 10

set_input_delay -max 1.35 -clock clk {ain, bin}

set_input_delay -max 3.5 -clock clk cin

set_output_delay -max 2.4 -clock clk cout

set_max_area 0

/* map and optimize the design */ 映射和优化

uniquify

compile

/* analyze and debug the design */ 分析和除错

report_constraint -all_violators

report_area

/* save the design database */  保存设计数据

write -format db -hierarchy -output Adder16.db

你可以按下列方式之一执行这个脚本:

(1)进入dc_shell,然后一行行地输入命令;

(2)进入dc_shell,利用include命令执行脚本文件:

dc_shell> include run.scr

       (3)利用dc_shell的选项-f,在UNIX命令行执行脚本文件:

              % dc_shell -f run.scr

实验二  扫描链

基于扫描路径法的可测性设计技术是可测性设计(DFT)技术的一个重要的方法,这种方法能够从芯片外部设定电路中各个触发器的状态,并通过简单的扫描链的设计,扫描观测触发器是否工作在正常状态,以此来检测电路的正确性。

1 、扫描链原理

数字电路由大量的组合元件和时序元件组成,时序元件具体体现为单个的触发器。系统时钟(来控制各个触发器的数据端口相应数据的输入输出。基于扫描路径法的可测性设计就是将电路中的时序元件触发器替换为相应的可扫描的时序元件扫描触发器;然后将上一级扫描触发器的输出端连接到下一级的数据输入端,从而形成一个从输入到输出的测试串行移位寄存器,即扫描链。

2、实验步骤

1,     修改setup文件,指定路径到实验要求的工艺库

2,     Source 1read_design.tcl 读入设计

3,     依次读入

read_gate_and_protocol.tcl

 constraints.tcl

1read_design.tcl~         

preview_dft.tcl            

settings_insert_dft.tcl

2create_test_protocol.tcl 

insert_dft.tcl             

settings_protocol.tcl

compile_and_save.tcl     

handoff.tcl  

等文件

  3、时序描述文件的导出

1.      在DC中,使用write_sdf命令导出时序描述文件(该命令对当前设计有效),命令格式如下:
   write_sdf
   -version <文件版本>
   -instance <实例名>
   <时序描述文件名>
    version <文件版本>:指定导出的SDF文件的版本,可选项有1.0和2.1,缺省为2.1版
    -instance <实例名>:指定导出当前设计中某个实例的时序描述文件
    <时序描述文件名>:导出的时序描述文件的文件名
6.2.2 时序约束文件的导出
在DC中,使用write_constraints命令来到出时序约束文件(该命令对当前设计有效),命令的格式如下:
   write_constraints
   -output <文件名>
   -format
   -max_paths <路径数>
   -max_path_timing
   -from <起点列表>
    -to <终点列表>

 

第二篇:DC流程

DC流程

DC流程

DC流程

DC流程

DC流程

DC流程

相关推荐