目录
检查脚本是否有语法错误
启动dc
退出dc
重新加载脚本文件
打开dc帮助手册
辅助设置
路径和库文件设置
读入设计文件
保存映射前的ddc文件
时序约束
编译
结果检查和保存输出文件/报告
在开始之前,我们首先来了解一下提升dc使用感受的几个小技巧。
dcprocheck ./run.tcl
使用dc的批处理模式启动dc,告诉dc执行哪个脚本文件,并告诉dc把启动过程中显示在终端的信息,也就是输出结果记录到run.log中。| tee -i就是写进信息的管道命令。这样后面可以通过查看log信息来排除error和warning。
dc_shell -f run.tcl | tee -i run.log
exit
source ./run.tcl
source后面接的是脚本文件所在的位置,./表示当前目录。
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
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]
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
参考链接:
【DC】使用DC进行逻辑综合的基本步骤_dc更改current design-CSDN博客
https://www.cnblogs.com/IClearner/category/972492.html