【DC综合 】简单的dc综合脚本

目录

检查脚本是否有语法错误

 启动dc

退出dc

 重新加载脚本文件

打开dc帮助手册

辅助设置

路径和库文件设置 

读入设计文件

保存映射前的ddc文件

时序约束

编译

结果检查和保存输出文件/报告


在开始之前,我们首先来了解一下提升dc使用感受的几个小技巧。

检查脚本是否有语法错误

dcprocheck ./run.tcl

 启动dc

使用dc的批处理模式启动dc,告诉dc执行哪个脚本文件,并告诉dc把启动过程中显示在终端的信息,也就是输出结果记录到run.log中。 tee  -i就是写进信息的管道命令。这样后面可以通过查看log信息来排除error和warning。

dc_shell  -f run.tcl | tee -i run.log

退出dc

exit 

 重新加载脚本文件

source ./run.tcl

source后面接的是脚本文件所在的位置,./表示当前目录。

打开dc帮助手册

man ***

DC 工具的帮助手册内包含了各种主题和章节,如概述、命令行选项、设计约束语言 (Design Constraints Language, DCL)、综合流程、优化技术、时序分析等。你可以使用箭头键上下滚动浏览内容,按下Q键退出帮助手册。


开始介绍脚本内容,因为提供的是最简单的版本,所以对约束部分的约束条件进行了省略,大家根据自己的需要自行补充。


辅助设置

sh date
remove_design -designs

sh_date:显示启动时间。

remove_design:删除之前载入的所有设计信息,以免干扰新的综合结果。


路径和库文件设置 

set    HDL_PATH    /***/***/top_module/hdl
set    LIB_PATH    /***/***/lib

设置文件路径,这里随便举个例子,通过自己自定义路径变量,后续设置库文件使用到路径时就不用写一大串。

  set_app_var search_path [list ${HDL_PATH}/core \
                                ${HDL_PATH}/common]

从上面中我们会发现,定义(路径)变量用的都是set(跟tcl语法一样),因此这里就要强调一下:

set : 自己自定义的一些变量,方便定义系统变量的时候,不用那么麻烦;主要是定义。

set_app_var :定义DC内部的系统变量、指定DC内部的连接等。主要指定有:search_path、synthetic_library、target_library、link_library、symbol_library 以及其他的一些命令开关等。

当定义完这些“自定义”的变量之后,我们就要做一些正经事了,就是指定DC要用到的库了。

指定搜索路径(Search_path):当读入了一些工艺库时,忘了设置它的路径,那么DC就会根据这个变量设置的路径去寻找库。DC可以根据这些路径进行寻找相关的库文件;或者,当需要多个.v文件时,通过这个变量告诉DC那些.v文件可能的路径,让DC根据.v文件的名字去找.v文件。

set_app_var  search_path  [list  .  $xxx   $xxxx ](注意:换行的时候需要加换行符\,而且\后面不能有空格),list是列表的意思,意思是这个search_path有多个(路径)变量,第一个路径变量搜索不到(库或者需要的文件),可以从下一个路径中找。

set_app_var    target_library    [list ${LIB_PATH}/***.db]

指定目标工艺库(target_library):DC将RTL级的HDL描述映射到实际的门级电路时所需要的标准单元库。这个库指定为半导体制造商提供的工艺库。这里指定的就是库的名字。

set_app_var    link_library    [list * ${LIB_PATH}/***.db]

指定链接库(link_library):这里指定的就是库的名字了,链接库可以从下面几点理解:

  ·链接库是target_library一样的单元库或者是已经综合到门级的底层模块设计(比如IP核)。作用是:用于分辨电路中逻辑门和子模块的功能,然后用实际的库单元或者子模块代替它们;在由上而下的综合工程中,上一层的设计调用底层已经综合的模块时,将从link_library中寻找并且链接起来,因此当读入的文件是门级网表(比如用到了IP核的网表)时,需要把 link library 设成指向生成该门级网表的目标库,否则 DC 因不知道网表中门单元电路的功能而报错。

如果需要将已有的设计从工艺A转到工艺B时,可以将当前的单元综合库A设为link_library,而将单元综合库B设为target_library,重新映射一下就可以了。

  ·路径面前加*号表示开辟一块单独的内存空间给DC自己使用,然后先搜寻内存中已有的库,然后再搜寻变量link_library指定的其他库。DC搜寻的库为search_path指定的目录(比如说之前读入设计时读入了库a,库a存到内存里;这时DC在进行综合的时候,发现缺少某个东西,于是就先从库a里面找,找不到时就会从列表里面的变量路径中找)。

  ·一般情况下,我们只用一个工艺库,需要引用目标工艺库,因此指定target_library;此外我们还有可能用到synopsys公司的IP核,因此需要指定他的DW库。(这一点也就是上面这么指定link_library的原因)。

图像库symbol_library可以不设置,它只在使用图形化界面启动dc时会用到,当设计工程量太大的时候,更多采用的是命令行形式。


读入设计文件

set TOP core 
set_svf /work/***/top_module/dc/output/$TOP.svf
analyze -format verilog -vcs "-f /work/***/top_module/hdl/core/file.f"
elaborate -architecture verilog $TOP
current_design $TOP
link
uniquify
check_design
check_timing
  1. 设置顶层模块名字。
  2. 如果后续需要用到formality进行形式验证的话,那需要提前在dc中用到set_svf命令,以生成形式验证中所要用到的svf文件。在读入设计前加上set_svf并指明文件存放路径,然后在脚本的最后写上set_svf -off关闭。
  3. 通过analyze读入设计文件,当模块涉及到的Verilog文件太多且存在于不同路径下时,可以专门写一个filelist文件用来存放路径和文件名,用上面提到的命令就能实现多个.v文件的读入。
  4. 转换,注意加上-architecture选项,不然后续综合可能会报错。
  5. 设置顶层文件为$TOP。
  6. 当读取完所有要综合的模块之后,需要用link命令将读取到 DC 存储区的模块或者实例连接起来。
  7. uniquify实例唯一化命令。对于被多次实例化的同一子设计,由于其例化后的工作环境各不相同,因此,需要用 uniquify 命令为每个实例在内存中创建一份副本,以便区分开每个实例。DC可以根据不同的应用环境进行合适的优化。
  8. 检查设计,看设计中是否存在缺少的模块,返回值为1表示设计无误。
  9. 检查时序,有没有缺失或者冲突的关键约束,返回值为1表示时序无误。

保存映射前的ddc文件

write -hierarchy -format ddc -output ../unmapped/core_pre.ddc

时序约束

create_clock [get_ports {mclk}] -name mclk -period 1 -waveform {0 0.5}
create_clock [get_ports {sclk}] -name sclk -period 5 -waveform {0 0.25}
set_clock_uncertainty 0 [get_clocks {mclk}]
set_clock_uncertainty 0 [get_clocks {sclk}]
set_clock_groups -asynchronous -group [get_clocks mclk] -group [get_clocks sclk]
set_false_path -from [get_clocks sclk] -to [get_clocks mclk]
  1. 定义时钟
  2. 将时钟不确定值设置为0。
  3. 用于定义时钟组(clock groups)和时钟域间的关系。该命令指定了哪些时钟是异步时钟,并且在综合和时序分析中需要注意它们之间的相对时序。
  4. 设置时钟的伪路径。伪路径也称为虚假路径,指时序分析时不需要关心的路径。DC 不能自动识别伪路径,故需要显示指定。如果设计中有多个时钟,那么跨时钟域之间的路径为伪路径,如上例所示。

编译

compile

结果检查和保存输出文件/报告

redirect -tee -file ../report/report_timing_max.txt {report_timing -delay_type max}
redirect -tee -file ../report/report_constraint.txt {report_constraint -all_violators}
  
write -format verilog -hierarchy -output ../mapped/core_netlist.v
write -format ddc -hierarchy -output ../mapped/core.ddc
  
set_svf -off
  1. 查看时序报告,并把结果输出重定向到对应的txt文件。
  2. 查看约束报告,看是否有时序违例的情况出现,同样是采用重定向的方式把内容写到txt文件中。
  3. 保存映射后的网表文件,注意加上hierarchy选项。
  4. 保存综合后的ddc文件。
  5. 停止生成svf文件。

参考链接:

【DC】使用DC进行逻辑综合的基本步骤_dc更改current design-CSDN博客

https://www.cnblogs.com/IClearner/category/972492.html

你可能感兴趣的:(学习)