本博客參考自文章鏈接
本文以全加器為例,演示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
創(chuàng)建library文件夾
創(chuàng)建library文件夾,將工藝庫文件放入此文件夾,如下圖所示
設置環(huán)境變量
啟動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,說明讀取無誤
添加約束
創(chuàng)建時鐘
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
文件內(nèi)容就是我們添加的約束:
輸出用于做后仿的.sdf時延文件:
write_sdf full_adder.sdf
輸出RTL的網(wǎng)表文件
write_file -format verilog -output full_adder_netlist.v
網(wǎng)表文件的內(nèi)容如下圖所示
由圖可以發(fā)現(xiàn),網(wǎng)表文件是RTL代碼的門級描述。
查看時序違例
為了讓時序違例,首先修改時鐘約束文章來源:http://www.zghlxwxcb.cn/news/detail-412299.html
create_clock -period 1 [get_ports clk]
然后重新輸入compile
綜合。
輸入report_timing
,結果如下:
可以發(fā)現(xiàn),將時鐘約束為1ns后,時序發(fā)生違例。文章來源地址http://www.zghlxwxcb.cn/news/detail-412299.html
到了這里,關于【數(shù)字IC設計】Design Compiler入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!