阿憨(ahan) Verification Specialist
Email:ahan.mail@gmail.com
数字电路(fpga/asic)设计入门6
上一篇 / 下一篇 2005-12-31 21:49:49 / 天气: 晴朗 / 心情: 高兴 / 个人分类:IC设计与验证
综合工具DICDER -- 博客专栏U-b8q-~cEo
第一节: 什么是综合呢?synthesis,台湾翻译为-合成,其作用就是将硬件描述语言的RTL级代码转变为门级网表。当然,现在综合技术已经很成熟了,还有推出的行为(behavioral)综合和物理(physical)综合。我们这里讨论的是逻辑(logic)综合。DICDER -- 博客专栏g&vo1XyI
综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展,我们就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是我们使用的RTL CODE。很多人入门都用HDL做设计,就以为HDL就只是用来做设计的,没有看到HDL最初始的一面,所以在验证的时候,就无法用好HDL另外一部分强大的功能。有时间还是可以看看Writing Testbench这本书,增强对HDL语言在验证方面作用的了解,也是提高对HDL认识很好的补充。DICDER -- 博客专栏E!~3gV-s1A(C$W
我们以DesignCompiler为例子讲解综合的过程。
2AV1W*R;PY;^g+I?0 首先,综合就要必须要用综合库,这个你可以向厂家要,综合库可以通过.lib这个库文件转变成.db综合库,这个过程可以在DesignCompiler里面用实现,综合库里面有什么内容呢?.db 是无法阅读的,.lib是可以阅读的,里面有库的基本参数的单位,库运行的条件,各种参数,最重要的是两个部分,一个是WLM-Wire Load Model,一个Gate的定义(输入输出,功能,时序参数,面积等等);这只是StandarCell的库,另外还有其他库,如RAM,DSP的综合库,都以.db的形式存在。DICDER -- 博客专栏T,mf5B:K;TMw
综合需要三种输入,一个是代码,一个是综合库,一个是综合脚本script。综合脚本主要包括了一下内容,对综合工具环境的配置,对综合对象外部环境的设置(operation condiction),对WLD的设置,对综合对象的时序的约束,综合策略,综合优化,综合报告和输出。下面给入门的人一个现成的script例子。(tcl script)
/M!T:t1y][)i0####### Set Directary #########
g0wycCp'U0set LIB typical
m2e;l"lVo.gW(Q0set SYNDIR $HOMEDICDER -- 博客专栏%|nE+W(zh^2n3d?
set SRCDIR $HOME/src
&m5m3]!Y*d1[F}0set SCRDIR $HOME/scriptDICDER -- 博客专栏7by*D?xXc
set RPTDIR $HOME/rptDICDER -- 博客专栏5|@JK s;na8Y
set SYNDB $HOME/db
Aj%pc+?&]Y5Ql'Np|0set SYNOPSYS "/cad/synopsys/"
!qI(q`7Q(J0t0######Enviroment############
.sQx/VeJ x Q0define_design_lib WORK -path $SYNDIR/WORKDICDER -- 博客专栏V[6n-}3N!j2p;D
set bus_naming_style %s_%dDICDER -- 博客专栏1j;pN,?[4zw
set verilogout_single_bit "false"
V1DC'g`;c0set hdlin_enable_vpp "true"DICDER -- 博客专栏)W5XV5QfAV~"I
set hdlin_enable_vpp "true"
#[{sPXbuP0set verilogout_no_tri "true"DICDER -- 博客专栏PR)j:Sn5~+q ])e
set write_name_nets_same_as_ports "true"DICDER -- 博客专栏m \_Qsh9~6O@)jf/V
set compile_preserve_sync_resets "true"
z;X,A(yAP0set_ultra_optimization true
!kx}F&R0set verilogout_equation falseDICDER -- 博客专栏rt!s2ulqaE
set verilogout_no_tri trueDICDER -- 博客专栏e*v.{0s`
set sdc_write_unambiguous_names falseDICDER -- 博客专栏,qtJ { F*U
######Libary#################DICDER -- 博客专栏v2S0{$Iv!D`"][
set synopsys_path "$SYNOPSYS/libraries/syn \\DICDER -- 博客专栏BQ^PO N
$SYNOPSYS/dw/sim_ver"DICDER -- 博客专栏^:]Q4[u4LC;M
set standarcell_path "*"
?#w*V8T KE%Vf+h0set search_path "$search_path \\
OCbJ.KV-m e)[5l7b0 $synopsys_path \\
MxGV2NlCt0 $standarcell_path"DICDER -- 博客专栏/J$dagiq
set target_library "typical.db"DICDER -- 博客专栏A5VUP8s@Bt1`
set symbol_library "*"DICDER -- 博客专栏 Bp'o q+^1u
set synthetic_library "dw_foundation.sldb"
#uRT0?b5ka0set link_library "* $target_library dw_foundation.sldb"DICDER -- 博客专栏zrL[!\S*M7l
######Read Design#############
&F4Xc I.M?0analyze -format verilog -lib WORK [list *] > $RPTDIR/analyze.rptDICDER -- 博客专栏.edIp;?`}` i
0KE#g2z~0elaborate designtop -lib WORK -gate_clock > $RPTDIR/elaborate.rpt
mE f;w vN0DICDER -- 博客专栏D#K{J1^&p-N
write -format db -hier -modified -output $SYNDB/$TOPMODULE.rtl.dbDICDER -- 博客专栏b@rH,z6\#P T@8B
"F,G+U0Mm%Y \mr0current_design $TOPMODULEDICDER -- 博客专栏I9VI/c2v'r,}$P
#######Set INTERFACE ENV#########DICDER -- 博客专栏,j'@,^4{{#b'U\I^
set_drive 10 [all_inputs]
_6B |~w5Y3d? \,c0set_fanout_load 10 [all_outputs]
第一节: 什么是综合呢?synthesis,台湾翻译为-合成,其作用就是将硬件描述语言的RTL级代码转变为门级网表。当然,现在综合技术已经很成熟了,还有推出的行为(behavioral)综合和物理(physical)综合。我们这里讨论的是逻辑(logic)综合。DICDER -- 博客专栏g&vo1XyI
综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展,我们就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是我们使用的RTL CODE。很多人入门都用HDL做设计,就以为HDL就只是用来做设计的,没有看到HDL最初始的一面,所以在验证的时候,就无法用好HDL另外一部分强大的功能。有时间还是可以看看Writing Testbench这本书,增强对HDL语言在验证方面作用的了解,也是提高对HDL认识很好的补充。DICDER -- 博客专栏E!~3gV-s1A(C$W
我们以DesignCompiler为例子讲解综合的过程。
2AV1W*R;PY;^g+I?0 首先,综合就要必须要用综合库,这个你可以向厂家要,综合库可以通过.lib这个库文件转变成.db综合库,这个过程可以在DesignCompiler里面用实现,综合库里面有什么内容呢?.db 是无法阅读的,.lib是可以阅读的,里面有库的基本参数的单位,库运行的条件,各种参数,最重要的是两个部分,一个是WLM-Wire Load Model,一个Gate的定义(输入输出,功能,时序参数,面积等等);这只是StandarCell的库,另外还有其他库,如RAM,DSP的综合库,都以.db的形式存在。DICDER -- 博客专栏T,mf5B:K;TMw
综合需要三种输入,一个是代码,一个是综合库,一个是综合脚本script。综合脚本主要包括了一下内容,对综合工具环境的配置,对综合对象外部环境的设置(operation condiction),对WLD的设置,对综合对象的时序的约束,综合策略,综合优化,综合报告和输出。下面给入门的人一个现成的script例子。(tcl script)
/M!T:t1y][)i0####### Set Directary #########
g0wycCp'U0set LIB typical
m2e;l"lVo.gW(Q0set SYNDIR $HOMEDICDER -- 博客专栏%|nE+W(zh^2n3d?
set SRCDIR $HOME/src
&m5m3]!Y*d1[F}0set SCRDIR $HOME/scriptDICDER -- 博客专栏7by*D?xXc
set RPTDIR $HOME/rptDICDER -- 博客专栏5|@JK s;na8Y
set SYNDB $HOME/db
Aj%pc+?&]Y5Ql'Np|0set SYNOPSYS "/cad/synopsys/"
!qI(q`7Q(J0t0######Enviroment############
.sQx/VeJ x Q0define_design_lib WORK -path $SYNDIR/WORKDICDER -- 博客专栏V[6n-}3N!j2p;D
set bus_naming_style %s_%dDICDER -- 博客专栏1j;pN,?[4zw
set verilogout_single_bit "false"
V1DC'g`;c0set hdlin_enable_vpp "true"DICDER -- 博客专栏)W5XV5QfAV~"I
set hdlin_enable_vpp "true"
#[{sPXbuP0set verilogout_no_tri "true"DICDER -- 博客专栏PR)j:Sn5~+q ])e
set write_name_nets_same_as_ports "true"DICDER -- 博客专栏m \_Qsh9~6O@)jf/V
set compile_preserve_sync_resets "true"
z;X,A(yAP0set_ultra_optimization true
!kx}F&R0set verilogout_equation falseDICDER -- 博客专栏rt!s2ulqaE
set verilogout_no_tri trueDICDER -- 博客专栏e*v.{0s`
set sdc_write_unambiguous_names falseDICDER -- 博客专栏,qtJ { F*U
######Libary#################DICDER -- 博客专栏v2S0{$Iv!D`"][
set synopsys_path "$SYNOPSYS/libraries/syn \\DICDER -- 博客专栏BQ^PO N
$SYNOPSYS/dw/sim_ver"DICDER -- 博客专栏^:]Q4[u4LC;M
set standarcell_path "*"
?#w*V8T KE%Vf+h0set search_path "$search_path \\
OCbJ.KV-m e)[5l7b0 $synopsys_path \\
MxGV2NlCt0 $standarcell_path"DICDER -- 博客专栏/J$dagiq
set target_library "typical.db"DICDER -- 博客专栏A5VUP8s@Bt1`
set symbol_library "*"DICDER -- 博客专栏 Bp'o q+^1u
set synthetic_library "dw_foundation.sldb"
#uRT0?b5ka0set link_library "* $target_library dw_foundation.sldb"DICDER -- 博客专栏zrL[!\S*M7l
######Read Design#############
&F4Xc I.M?0analyze -format verilog -lib WORK [list *] > $RPTDIR/analyze.rptDICDER -- 博客专栏.edIp;?`}` i
0KE#g2z~0elaborate designtop -lib WORK -gate_clock > $RPTDIR/elaborate.rpt
mE f;w vN0DICDER -- 博客专栏D#K{J1^&p-N
write -format db -hier -modified -output $SYNDB/$TOPMODULE.rtl.dbDICDER -- 博客专栏b@rH,z6\#P T@8B
"F,G+U0Mm%Y \mr0current_design $TOPMODULEDICDER -- 博客专栏I9VI/c2v'r,}$P
#######Set INTERFACE ENV#########DICDER -- 博客专栏,j'@,^4{{#b'U\I^
set_drive 10 [all_inputs]
_6B |~w5Y3d? \,c0set_fanout_load 10 [all_outputs]