DC综合软件的使用有两种方法,一种是在图像界面下操作,另一种写一个脚本文件,对于大多数人,还是习惯图形界面点点点,但是亲测,发现真的很烦,因为要设置一堆东西,如果你在综合后出现问题,你修改你的代码,然后你还有重新设置一遍,结果就是每次你都要重新设置一边,综合次数多了,你会发现真的太烦了,浪费时间,所以写脚本文件很有用。

下面讲一下怎么写脚本文件

首先建一个文件夹,把你要综合的文件放进去,新建一个文件,以.scr为后缀,比如fir.scr

文件内容为:

1.首先时定义路径:

定义库文件存在的位置,命令是set my_lib_path "库文件位置“,比如

set my_lib_path "/home/smic180/digital/sc/synopsys/ /home/smic180/digital/io/synopsys/ /home/smic180/digital/sc/symbols/synopsys/"

定义搜索路径命令:set search_path "$search_path+$路径",比如set search_path "$search_path $my_lib_path "

定义一些库文件命令:

set target_library "typical.db"
set synthetic_library "dw_foundation.sldb"
set link_library "* typical.db * SP018N_V1p0_typ.db $synthetic_library"
set symbol_library "smic.sdb"

这个库文件命令里面的文件对应你自己电脑里面的库文件,所以要对应改成自己的电脑文件。

然后,我们在综合时会有一些警告,我们去除一些不重要的警告,命令:

suppress_message VER-130
suppress_message VER-129
suppress_message VER-318
suppress_message ELAB-311
suppress_message VER-936

然后是读入文件命令:

read_file -format verilog {/home/IC/Desktop/fir/fir/fir.v},命令最后是verilog文件路径,改成自己的

接着把文件设置为顶层命令:current_design fir

然后LINK命令:link

之后是设置时钟,输入,输出等等

set clk [get_ports clk] 设置时钟,我的verilog时钟名字是clk,需要改成你自己的

set reset [get_ports reset] 设置复位,我的verilog复位名字是reset,需要改成你自己的

set general_inputs [list filter_in]   设置输入,我的verilog输入名字是filter_in,需要改成你自己的          
set outputs [get_ports filter_out] 设置输出,我的verilog输出名字是filter_out,需要改成你自己的   
然后是设置时钟约束,我们设置50Mhz时钟

#1 set constraints for clock signals
create_clock -n clock $clk -period 20 -waveform {0 10}       50Mhz为20ns,所以前面写20,我们在前10ns是高电平,后10ns是低电平,所以是{0 10}
set_dont_touch_network [get_clocks clock]
set_drive 0 $clk
set_ideal_network [get_ports clk]

然后设置复位约束

#2 set constraints for reset signals
set_dont_touch_network $reset
set_drive 0 $reset
set_ideal_network [get_ports reset]

然后设置输入输出约束

#3 set input delay
set_input_delay -clock clock 12 $general_inputs
#4 set output delay
set_output_delay -clock clock 12 $outputs

编译命令:

# compile_design #
compile -map_effort medium

把数据写入文件和报告面积,时间,功耗命令:

# write *.db and *.v #

#write -f db -hier -output ./fir.db fir
#write -f verilog -hier -output ./firnetlist.v fir
write_sdf -version 1.0 ./fir.sdf
write_sdc fir.sdc
write -f ddc -hierarchy -output fir.ddc
write -hierarchy -format verilog -output firnetlist.v

#1
uplevel #0 { report_area }
#2
uplevel #0 { report_constraint -all_violators -significant_digits 2 -nosplit }
#3
uplevel #0 { report_timing -path full -delay max -nworst 1 -max_paths 1 -significant_digits 2 -sort_by group }
#4
uplevel #0 { report_power -analysis_effort low }

整个完整的fir.v文件:

module fir
(
clk,
reset,
filter_in,
filter_out
);

input clk;
input reset;
input signed [7:0] filter_in; //sfix8
output signed [19:0] filter_out; //sfix21_En12

//Module Architecture: fir

// Local Functions
// Type Definitions
// Constants
parameter signed [10:0] coeff6 = 11'd6; //sfix10_En12
parameter signed [10:0] coeff5 = 11'd5; //sfix10_En12
parameter signed [10:0] coeff3 = 11'd3; //sfix10_En12
parameter signed [10:0] coeff1_ = -11'd1; //sfix10_En12
parameter signed [10:0] coeff9_ = -11'd9; //sfix10_En12
parameter signed [10:0] coeff19_ = -11'd19; //sfix10_En12
parameter signed [10:0] coeff33_ = -11'd33; //sfix10_En12
parameter signed [10:0] coeff49_ = -11'd49; //sfix10_En12
parameter signed [10:0] coeff66_ = -11'd66; //sfix10_En12
parameter signed [10:0] coeff84_ = -11'd84; //sfix10_En12
parameter signed [10:0] coeff99_ = -11'd99; //sfix10_En12
parameter signed [10:0] coeff109_ = -11'd109; //sfix10_En12
parameter signed [10:0] coeff112_ = -11'd112; //sfix10_En12
parameter signed [10:0] coeff105_ = -11'd105; //sfix10_En12
parameter signed [10:0] coeff72 = 11'd72; //sfix10_En12
parameter signed [10:0] coeff157 = 11'd157; //sfix10_En12
parameter signed [10:0] coeff256 = 11'd256; //sfix10_En12
parameter signed [10:0] coeff365 = 11'd365; //sfix10_En12
parameter signed [10:0] coeff482 = 11'd482; //sfix10_En12
parameter signed [10:0] coeff599 = 11'd599; //sfix10_En12
parameter signed [10:0] coeff712 = 11'd712; //sfix10_En12
parameter signed [10:0] coeff814 = 11'd814; //sfix10_En12
parameter signed [10:0] coeff901 = 11'd901; //sfix10_En12
parameter signed [10:0] coeff966 = 11'd966; //sfix10_En12
parameter signed [10:0] coeff1007 = 11'd1007; //sfix10_En12
parameter signed [10:0] coeff1021 = 11'd1021; //sfix10_En12

reg signed [19:0] r0, r1, r2, r3, r4, r5, r6, r7;
reg signed [19:0] r8, r9, r10, r11, r12, r13, r14, r15;
reg signed [19:0] r16, r17, r18, r19, r20, r21, r22, r23;
reg signed [19:0] r24, r25, r26, r27, r28, r29, r30, r31;
reg signed [19:0] r32, r33, r34, r35, r36, r37, r38, r39;
reg signed [19:0] r40, r41, r42, r43, r44, r45, r46, r47;
reg signed [19:0] r48, r49, r50, r51, r52, r53, r54, r55;
reg signed [19:0] r56, r57, r58, r59, r60;

reg signed [19:0]x6 ;
reg signed [19:0]x5 ;
reg signed [19:0]x3 ;
reg signed [19:0]x1_ ;
reg signed [19:0]x9_ ;
reg signed [19:0]x19_ ;
reg signed [19:0]x33_ ;
reg signed [19:0]x49_ ;
reg signed [19:0]x66_ ;
reg signed [19:0]x84_ ;
reg signed [19:0]x99_ ;
reg signed [19:0]x109_;
reg signed [19:0]x112_;
reg signed [19:0]x105_;
reg signed [19:0]x72 ;
reg signed [19:0]x157 ;
reg signed [19:0]x256 ;
reg signed [19:0]x365 ;
reg signed [19:0]x482 ;
reg signed [19:0]x599 ;
reg signed [19:0]x712 ;
reg signed [19:0]x814 ;
reg signed [19:0]x901 ;
reg signed [19:0]x966 ;
reg signed [19:0]x1007;
reg signed [19:0]x1021;

always @(posedge clk or negedge reset)
if (reset == 1'b0)
begin
x6 <=20'b0;
x5 <=20'b0;
x3 <=20'b0;
x1_ <=20'b0;
x9_ <=20'b0;
x19_ <=20'b0;
x33_ <=20'b0;
x49_ <=20'b0;
x66_ <=20'b0;
x84_ <=20'b0;
x99_ <=20'b0;
x109_ <=20'b0;
x112_ <=20'b0;
x105_ <=20'b0;
x72 <=20'b0;
x157 <=20'b0;
x256 <=20'b0;
x365 <=20'b0;
x482 <=20'b0;
x599 <=20'b0;
x712 <=20'b0;
x814 <=20'b0;
x901 <=20'b0;
x966 <=20'b0;
x1007 <=20'b0;
x1021 <=20'b0;
end
else
begin
x6 <= filter_in * coeff6 ;
x5 <= filter_in * coeff5 ;
x3 <= filter_in * coeff3 ;
x1_ <= filter_in * coeff1_ ;
x9_ <= filter_in * coeff9_ ;
x19_ <= filter_in * coeff19_ ;
x33_ <= filter_in * coeff33_ ;
x49_ <= filter_in * coeff49_ ;
x66_ <= filter_in * coeff66_ ;
x84_ <= filter_in * coeff84_ ;
x99_ <= filter_in * coeff99_ ;
x109_ <= filter_in * coeff109_;
x112_ <= filter_in * coeff112_;
x105_ <= filter_in * coeff105_;
x72 <= filter_in * coeff72 ;
x157 <= filter_in * coeff157 ;
x256 <= filter_in * coeff256 ;
x365 <= filter_in * coeff365 ;
x482 <= filter_in * coeff482 ;
x599 <= filter_in * coeff599 ;
x712 <= filter_in * coeff712 ;
x814 <= filter_in * coeff814 ;
x901 <= filter_in * coeff901 ;
x966 <= filter_in * coeff966 ;
x1007 <= filter_in * coeff1007;
x1021 <= filter_in * coeff1021;
end

always @(posedge clk or negedge reset)
if (reset == 1'b0)
begin
r0 <= 20'b0;
r1 <= 20'b0;
r2 <= 20'b0;
r3 <= 20'b0;
r4 <= 20'b0;
r5 <= 20'b0;
r6 <= 20'b0;
r7 <= 20'b0;
r8 <= 20'b0;
r9 <= 20'b0;
r10 <= 20'b0;
r11 <= 20'b0;
r12 <= 20'b0;
r13 <= 20'b0;
r14 <= 20'b0;
r15 <= 20'b0;
r16 <= 20'b0;
r17 <= 20'b0;
r18 <= 20'b0;
r19 <= 20'b0;
r20 <= 20'b0;
r21 <= 20'b0;
r22 <= 20'b0;
r23 <= 20'b0;
r24 <= 20'b0;
r25 <= 20'b0;
r26 <= 20'b0;
r27 <= 20'b0;
r28 <= 20'b0;
r29 <= 20'b0;
r30 <= 20'b0;
r31 <= 20'b0;
r32 <= 20'b0;
r33 <= 20'b0;
r34 <= 20'b0;
r35 <= 20'b0;
r36 <= 20'b0;
r37 <= 20'b0;
r38 <= 20'b0;
r39 <= 20'b0;
r40 <= 20'b0;
r41 <= 20'b0;
r42 <= 20'b0;
r43 <= 20'b0;
r44 <= 20'b0;
r45 <= 20'b0;
r46 <= 20'b0;
r47 <= 20'b0;
r48 <= 20'b0;
r49 <= 20'b0;
r50 <= 20'b0;
r51 <= 20'b0;
r52 <= 20'b0;
r53 <= 20'b0;
r54 <= 20'b0;
r55 <= 20'b0;
r56 <= 20'b0;
r57 <= 20'b0;
r58 <= 20'b0;
r59 <= 20'b0;
r60 <= 20'b0;
end
else
begin
r0 <= x6 ;
r1 <= r0 + x5 ;
r2 <= r1 + x6 ;
r3 <= r2 + x5 ;
r4 <= r3 + x3 ;
r5 <= r4 + x1_ ;
r6 <= r5 + x9_ ;
r7 <= r6 + x19_ ;
r8 <= r7 + x33_ ;
r9 <= r8 + x49_ ;
r10 <= r9 + x66_ ;
r11 <= r10 + x84_ ;
r12 <= r11 + x99_ ;
r13 <= r12 + x109_;
r14 <= r13 + x112_;
r15 <= r14 + x105_;
r16 <= r15 + x84_ ;
r17 <= r16 + x49_ ;
r18 <= r17 + x3 ;
r19 <= r18 + x72 ;
r20 <= r19 + x157 ;
r21 <= r20 + x256 ;
r22 <= r21 + x365 ;
r23 <= r22 + x482 ;
r24 <= r23 + x599 ;
r25 <= r24 + x712 ;
r26 <= r25 + x814 ;
r27 <= r26 + x901 ;
r28 <= r27 + x966 ;
r29 <= r28 + x1007;
r30 <= r29 + x1021;
r31 <= r30 + x1007 ;
r32 <= r31 + x966 ;
r33 <= r32 + x901 ;
r34 <= r33 + x814 ;
r35 <= r34 + x712 ;
r36 <= r35 + x599 ;
r37 <= r36 + x482 ;
r38 <= r37 + x365 ;
r39 <= r38 + x256 ;
r40 <= r39 + x157 ;
r41 <= r40 + x72 ;
r42 <= r41 + x3 ;
r43 <= r42 + x49_ ;
r44 <= r43 + x84_ ;
r45 <= r44 + x105_;
r46 <= r45 + x112_;
r47 <= r46 + x109_;
r48 <= r47 + x99_;
r49 <= r48 + x84_;
r50 <= r49 + x66_;
r51 <= r50 + x49_;
r52 <= r51 + x33_;
r53 <= r52 + x19_;
r54 <= r53 + x9_;
r55 <= r54 + x1_;
r56 <= r55 + x3;
r57 <= r56 + x5;
r58 <= r57 + x6;
r59 <= r58 + x5;
r60 <= r59 + x6;
end

assign filter_out = r60;

endmodule

脚本文件:

sh date
set company {EE252}
set designer {Tutorial}
set my_lib_path "/home/smic180/digital/sc/synopsys/ /home/smic180/digital/io/synopsys/ /home/smic180/digital/sc/symbols/synopsys/"
set search_path "$search_path $my_lib_path "
set target_library "typical.db"
set synthetic_library "dw_foundation.sldb"
set link_library "* typical.db * SP018N_V1p0_typ.db $synthetic_library"
set symbol_library "smic.sdb"

#void warning Info #

suppress_message VER-130
suppress_message VER-129
suppress_message VER-318
suppress_message ELAB-311
suppress_message VER-936
#suppress_message TIM-134
#suppress_message DDB-24
#suppress_message VO-4
#suppress_message VO-11

#read&amp;link&amp;Check design#

#read_file -format verilog ./fir.v
read_file -format verilog {/home/IC/Desktop/fir/fir/fir.v}
current_design fir
link
#Loading db file '/opt/Synopsys/Synplify2015/libraries/syn/generic.sdb'

# define IO port name #

set clk [get_ports clk]
set reset [get_ports reset]

set general_inputs [list filter_in]
set outputs [get_ports filter_out]
set verilogout_no_tri true;
set_fix_multiple_port_nets -all -buffer_constants;

# set_constraints #

#1 set constraints for clock signals
create_clock -n clock $clk -period 20 -waveform {0 10}
set_dont_touch_network [get_clocks clock]
set_drive 0 $clk
set_ideal_network [get_ports clk]
#2 set constraints for reset signals
set_dont_touch_network $reset
set_drive 0 $reset
set_ideal_network [get_ports reset]
#3 set input delay
set_input_delay -clock clock 12 $general_inputs
#4 set output delay
set_output_delay -clock clock 12 $outputs
#5 set design rule constraints
#set_max_fanout 1743 $general_inputs
#set_max_transition 0.5 [get_designs "fir"]
#6 set area constraint
#set_max_area 0

# compile_design #

compile -map_effort medium

# write *.db and *.v #

#write -f db -hier -output ./fir.db fir
#write -f verilog -hier -output ./firnetlist.v fir
write_sdf -version 1.0 ./fir.sdf
write_sdc fir.sdc
write -f ddc -hierarchy -output fir.ddc
write -hierarchy -format verilog -output firnetlist.v

#1
uplevel #0 { report_area }
#2
uplevel #0 { report_constraint -all_violators -significant_digits 2 -nosplit }
#3
uplevel #0 { report_timing -path full -delay max -nworst 1 -max_paths 1 -significant_digits 2 -sort_by group }
#4
uplevel #0 { report_power -analysis_effort low }

sh date

怎么运行呢?

首先运行DC软件命令模式,在linux下,命令是dc_shell

运行完,命令路径进入de_shell,输入source fir.scr,就是你之前的脚本文件如图:

得到结果:

面积

时间

功耗

同时得到一些文件,会在我们之后的工作用到,firnetlist是网表文件

DC(Design Compiler)使用说明相关推荐

  1. EDA实验课课程笔记(七)——DC(Design Compiler)的简介及其图像化使用(一)

    本博文用于记录DC的基本知识及一些相关的最基本概念.然后配合演示视频,对DC有一个最初步的认识.参考学校老师的PPT讲解,以及实验指导书中的内容. Design Compiler的简介及其图像化使用 ...

  2. DC1+2: Tcl与Design Compiler (一二)——前言+DC综合与Tcl语法结构概述+DCT/DCG+wireloadmodel+Comments

    DCbasic and TCL命令 本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 1.逻辑综合的 ...

  3. linux无法运行sssverify,Synopsys Design Compiler在fedora Core 9下面的安装

    首先转载下文.我是按照这个博文的步骤来的.我安装的平台是FC9,也是单机版安装的.但是我按照以下步骤安装之后,运行dc或者dv,都会出现 fatal: Design compiler is not e ...

  4. Design Compiler知识点汇总

    DC是Synopsys的的逻辑综合工具,在实际使用时有很多需要注意的小点.转一下这边整理的不错的博客,不定期增添部分细节. 1.1 什么是DC?       DC(Design Compiler)是S ...

  5. design compiler

    1.1 什么是DC? DC(Design Compiler)是Synopsys公司的logical synthesis工具,它根据design description和design constrain ...

  6. Tcl与Design Compiler (二)——DC综合与Tcl语法结构概述

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 1.逻辑综合的概述 synthesis = tra ...

  7. sip 时序图_Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象(下)

    ~  回复  以下关键词  查看更多IC设计教程 ~ 目前支持的关键词有: Innovus                            ICC or IC Compiler DC or De ...

  8. Tcl与Design Compiler (八)——DC的逻辑综合与优化

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 对进行时序路径.工作环境.设计规则等进行约束完成之 ...

  9. Design Compiler (八)——DC的逻辑综合与优化

    对进行时序路径.工作环境.设计规则等进行约束完成之后,DC就可以进行综合.优化时序了,DC的优化步骤将在下面进行讲解.然而,当普通模式下不能进行优化的,就需要我们进行编写脚本来改进DC的优化来达到时序 ...

  10. DC5:Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象+Comments

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 前面一直说到综合库/工艺库这些东西,现在就来讲讲讲 ...

最新文章

  1. 听说用 Lombok 可以早点下班?
  2. C#中将字符串内容换行写入到txt文件中
  3. Oracle入门(十三B)之高级查询(上)
  4. TensorFlow自带例子
  5. BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
  6. 【C语言笔记初级篇】第二章:分支与循环
  7. matlab dist函数
  8. 八皇后(信息学奥赛一本通-T1214)
  9. Lyft无人车战略揭秘:两个团队并行,用百度Apollo,想定行业标准
  10. 量体裁衣:将DevOps转型融入到企业文化
  11. vivado 设计约束学习笔记1
  12. 数据加密技术之加密算法
  13. 打印目录和更新时就会出现“错误!未定义书签!”的解决技巧
  14. 个人网站可以申请微信授权登录吗?
  15. NTP网络校时(北斗卫星授时设备)技术核心源码让网络时间同步不再难
  16. Service(服务)之 Local Service(本地服务)
  17. teamviewer12 linux安装,ubuntu16.04安装teamviewer12依赖包解决
  18. 从0带您打造企业级 Vue 服务器渲染 Nuxt.js (一) 入门
  19. 华为防火墙笔记-加密与证书
  20. fico RMA部署规则时,jdk过期报错

热门文章

  1. 计算机连接打印机用户数量修改,win7系统下局域网如何限制每台打印机的使用成员数量...
  2. linux 重定向 21
  3. 7-6 王牌特工3 (15 分)
  4. SSMS证书已被颁发者吊销解决办法
  5. 公司性格测试,来一发
  6. python中string模块各属性以及函数的用法
  7. 超全软件下载网站和网页(一网一匠)
  8. 都有云技术了,传统动态vps还有什么用?
  9. 小游戏--三子棋——N子棋(实现)
  10. 关于大成资源网这一个月大成网停更详细原因