本博客参考自文章链接
 本文以全加器为例,演示DC综合的流程。设计文件如下:
module full_adder(
input clk,
input rstn,
input [31:0] a_in,
input [31:0] b_in,
input c_in,
output reg [31:0] sum_out,
output reg c_out
);
wire c_out_w;
wire [31:0] sum_out_w;
assign {c_out_w,sum_out_w}=a_in+b_in+c_in;
always@(posedge clk)
if(~rstn)
   c_out<=0;
else
   c_out<=c_out_w;
//
always@(posedge clk)
if(~rstn)
   sum_out<=0;
else
   sum_out<=sum_out_w;
endmodule
 
创建library文件夹
创建library文件夹,将工艺库文件放入此文件夹,如下图所示
 
设置环境变量
启动dc,输入
set_app_var search_path ./library
 
输入
set_app_var target_library sc_max.db
 
设置目标库
 输入
set_app_var link_library sc_max.db
 
设置链接库
 结果如下图所示
 
读入设计文件
输入命令:
read_file -format verilog {./full_adder.v}
 
输入后显示如下:
 
 然后输入check_design检查设计,如下图所示
 
 显示1,说明读取无误
添加约束
创建时钟
create_clock -period 10 [get_ports clk]
 
设置输入延迟
set_input_delay -max 3 -clock clk [remove_from_collection [all_inputs] clk]
 
设置输出延迟
set_output_delay -max 2.5 -clock clk [all_outputs]
 
以及设置输入转换时间
set_input_transition 0.15 [all_inputs]
 
最后输入check_design进行检查
check_design
 
整个过程如图所示:
 
综合
输入compile进行综合。如下图所示
 
查看综合报告
输入report_clock查看时钟
 
 输入report_timing查看时序报告
 
 可以看到,slack为3.77,大于0,时序是MET的。
 输入report_area查看综合后的面积:
 
输出相关文件
生成一个.sdc结尾的时序约束文件:
write_sdc full_adder.sdc
 
文件内容就是我们添加的约束:
 
输出用于做后仿的.sdf时延文件:
write_sdf full_adder.sdf
 
输出RTL的网表文件
write_file -format verilog -output full_adder_netlist.v
 
网表文件的内容如下图所示
 
 由图可以发现,网表文件是RTL代码的门级描述。
查看时序违例
为了让时序违例,首先修改时钟约束
 create_clock -period 1 [get_ports clk]
 
然后重新输入compile综合。
 输入report_timing,结果如下:
 
 可以发现,将时钟约束为1ns后,时序发生违例。
![[vue学习笔记]数组+事件+v-model的使用](https://img-blog.csdnimg.cn/c13a9b4b823344edbf9e9e418e747f9b.png)














![[附源码]计算机毕业设计高校实验室仪器设备管理系统Springboot程序](https://img-blog.csdnimg.cn/8210a349a7264df78c15ac9e589c3507.png)


