DC综合简介及基本流程

一:首先我们要知道DC综合是用来干什么的。

        DC综合用一句话概括就是将RTL级描述的电路在工艺、面积、时序等约束下转换为基于工艺库的门级网表。综合包括三个阶段:转换、优化、

1.转换:将RTL级描述转换为DC通用的GTECH库原件组成的RTL级网表。

2.优化:根据设计者施加的延时、面积等约束条件,对电路进行优化。

3.映射:将优化之后的电路映射到工艺库上,形成一个门级网表。

二:准备工作

1.自己需要综合的RTL工程文件;

2.libraries工艺库文件;

3.编写的.synosys_dc.setup文件(在上一个文章中有)和tcl文件

三:设置综合环境

设置一些约束信息,可以写成tcl文件,也可以自己在终端输入每一条命令。

#---------------------------------------------------------

 read_verilog {a.v b.v c.v top.v}  //读取.v文件
 current_design top                //设置设计的顶层文件
   
 set PERIOO_100M [expr (1.0/100.0)*1000]
 create_clock -period $PERIOO_100M -waveform [list 0 5] [get_ports nice_clk] //创建时钟

 set_clock_uncertainty -setup 0.2 [get_clocks nice_clk]  //定义时钟不确定性信息,
 set_clock_uncertainty -hold 0.05 [get_clocks nice_clk]  //建立时0.2ns,保持时间0.05ns
//创建输入延时,从输入引脚到第一个寄存器之间的延时
 set DFF_CKQ 0.638
 set IP_DELAY [expr 0.02 + $DFF_CKQ]
 set_input_delay $IP_DELAY -clock nice_clk [remove_from_collection [all_inputs] nice_clk]   
//创建输出延时,从输出寄存器到输出引脚之间的延时
 set DFF_SETUP 0.546
 set OP_DELAY [expr 0.02 + $DFF_SETUP]
 set_output_delay $OP_DELAY -clock nice_clk [all_outputs]         

 set_drive 0 {nice_clk nice_rst_n}  //设置输入驱动,等于0,就是输入驱动无穷大

 set_load 4.013 [all_outputs]      //设置输出负载,输出端驱动负载能力的大小

 set_max_area 0           //将设计的最大面积进行约束,设为0,就会尽可能的优化面积
//让每个port都有单独的buffer驱动的意思,主要影响后期的布局布线。
 set_fix_multiple_port_nets -all -buffer_constants [get_designs]

 replace_synthetic -ungroup    //将设计中的运算符替换成IP库中指定的运算符

 check_design   //检查设计
 link           //链接
 

四:综合输出的文件

1.ddc文件:保留综合结果的DDC文件,之后可以直接load这个文件,查看综合结果

2..综合后的.v 门级网表文件 (用于后端给PT做STA)

3..综合后的.sdc 时序约束文件,用于布局布线

4.sdf文件,标准延时格式,用于静态分析和后仿。

你可能感兴趣的:(DC综合,fpga开发,硬件架构,经验分享)