1、逻辑综合概述
目标:使用Design Compiler(DC)综合生成满足时序与拥塞条件的门级网表。
- 读入层次化RTL
- 加载综合库、技术数据以及设计约束条件
- 时序分析和检查时序违例
- 采用从顶层至底层的DC技术对RTL进行综合
- 生成时序报告
- 使用DC GUI分析并改善布局拥塞
- 输出PR需要的文件
1.1 综合的三个步骤
综合 = 转化 + 逻辑优化 + 门级映射
转化:将RTL代码转化为为通用布尔逻辑(GTECH or unmapped ddc format)
逻辑优化+门级映射(compile):将GTECH转化为与工艺库对应的专用门(mapped ddc format)
补充:.ddc是Synopsys的一个格式,在优化的各个阶段都可以写出.ddc格式的文件。
2、DC工具的使用
2.1 启动DC的三种方式
① Design Vision(界面可视化)
% design_vision -topographical_mode
② DC Shell(脚本不成熟时使用)
% dc_shell -topographical_mode
dc_shell -topo >
③ Batch模式(这种模式更加常用!!!)
% dc_shell -topo -f run.tcl | tee -i run.log
2.2 Linux DC Shell命令
获取路径信息以及文件名
dc_shell -topo > pwd cd ls
显示之前输入过的命令
dc_shell -topo > history
再次执行上一条执行的命令‘
dc_shell -topo > !!
执行历史记录中编号为9的命令
dc_shell -topo > !9
执行最近执行过的报告命令
dc_shell -topo > !rep
执行任何Linux命令
dc_shell -topo > sh <Linux_command>
获取任何Linux的变量值
dc_shell -topo > get_unix_variable <Linux_variable>
3、加载设计与技术数据
命令总览
% cd work_directory
% dc_shell
dc_shell -topo > read_verilog {a.v b.v top.v}
dc_shell -topo > set_app_var target_library ""
dc_shell -topo > set_app_var link_library ""
dc_shell -topo > current_design top
dc_shell -topo > link
dc_shell -topo > check_design
dc_shell -topo > write -f ddc -hier -out unmpd/top.ddc
dc_shell -topo > source -echo -verbose top.sdc
dc_shell -topo > check_timing
dc_shell -topo > compile -boundary -scan -map high
dc_shell -topo > report_constraint -all_violators
dc_shell -topo > change_names -rule verilog -hier
dc_shell -topo > write -f verilog -hier -out mpd/top.v
dc_shell -topo > write -f ddc -hier -out mpd/top.ddc
dc_shell -topo > exit
CWD(Curent Work Directory):当前工作目录
3.1 Flat RTL Design
⭐⭐⭐设计流程
dc_shell -topo > read_verilog top.v
加载默认的GTECH库和用户指定的link库
将RTL加载到DC内存中
读入后RTL转化为GTECH(unmapped ddc format)
将其中某个设计模块设置为当前设计(current design)
dc_shell -topo > read_vhdl rtl.vhd
该命令会创建“VHDL设计库”,“VHDL设计库”默认名称为“WORK”,文件和目录默认放在CWD下。
为了使得CWD结构相对干净,可以将VHDL设计库重定向。
dc_shell -topo > define_design_lib WORK -path ./work
dc_shell -topo > read_vhdl rtl.vhd
set_app_var search_path '$search_path mapped libs cons'
read_verilog mapped/MYREG_mapped.v
如果CWD包含在search_path变量中,可以省略目录名。
默认search_path为:其中"."代表CWD
search_path = '. <Install_dir>/libraries/syn
<Install_dir>/dw/sim_ver
<Install_dir>/dw/syn_ver'
set_app_var target_library libs/65nm.db
printvar target_library
默认为your_library.db(不存在的库名称)
target_library是standard cell db,是综合目的库,用于在compile期间生成指定的门级网表。
set_app_var link_library "* $target_library"
link_library是提供门级网表实例化的基本单元,门级网表的实例化的单元都来自于该库,链接库包括已经Translate的GTECH网表(*)(在DC内存中),standard cell db($target_library),macros(RAM、ROM、IP、etc)。
设置完target_library和link_library后,执行link操作。
link是设计中例化模块的过程。
此时RTL代码已经被Translate为GTECH(unmapped ddc format)
后续将持续更新~~~