EDA工具

Design Compiler进行数字综合

2017-02-09  本文已影响3328人  学而时习之_不亦说乎

Design Compiler 功能

Design Compiler的主要功能是将所写的行为级(behavior level)描述的Verilog/VHDL文件转化为结构级(structure level)的Verilog/VHDL文件。

DC的工作流程

设置环境

set target_library  "Lib/wcells.db"
set link_library   [ list * Lib/wcells.db Lib/dw_foundation.sldb]

最后的dw_foundation.sldb是在你的设计中使用了Synopsys DesignWare提供的IP时,方便DC找到相应的IP,否则link会报错
前面的“*”号表示DC的内存空间,也就是说如果设计中某个模块找不到对应的库,那么就现在内存中搜索。

set symbol_library  "Lib/wcells.sdb"
set     search_path      [ list $search_path "../Src" \
                                             "../Src/Common" \
                                             "../Src/Datapath" \
                                             "../Src/Interp" \
                                             "../Src/Log2Compute" \
                                             "../Src/Sample" \
                                             "../Src/Status"] 

读入并分析设计

#首先清理系统
remove_design -all
#读入并分析Verilog文件,autoread会自动按照文件的依赖顺序逐个分析源文件,
#如果有错误analyze命令会报错,如果没有错误会生成中间文件。
analyze -format verilog  ../Src/TMO_System.v -autoread > ./log/analyze.rpt
#elaborate命令将analyze生成的中间文件转化为technology-independent design (GTECH)
elaborate TMO_System
#确认在DC的内存中,当前正在处理的是我们的顶层TMO_System
current_design TMO_System
# 如果我们要将顶层转化为最后的网表,就要将所有的模块都组合起来,
# 这一过程即是Link,其实在elaborate命令会自动执行Link命令,如果再次执行Link命令,我看可以看到关于Link的报告
link > ./log/link.rpt
# 如果一个设计中多次使用了同一个instance,那么在DC的内存中多个instance均指向一个模块,
# 但是在电路中他们应该是多个独立的实体,uniquify命令的目的就是为这些instance都创造一个新的模块,
# 使其指向它,这样,即使在Verilog源文件中,多个instance源自同一个module,
# 在DC中他们也会指向不同的module(虽然每个module是一样的,但是名字不一样了,DC就将其看做不同的东西了)
uniquify > ./log/uniquify.rpt
# 通过check_design命令检查设计是否一致,在消除report中的所有error以后才能继续后面的工作
# Report中也会有很多很多的warning,但是一般都无关紧要,稍微看看就可以了。
check_design > ./log/check_RTL.rpt
#replace_synthetic会将设计中的很多运算符替换为DesignWare中设计好的ALU
replace_synthetic > ./log/replace_synthetic.rpt

环境约束

环境约束就是将芯片的工作环境考虑在内来进行电路转化和设计,可以简单的用下图来概括


环境约束
set_operating_conditions -min_library wcells -min BEST -max_library wcells -max WORST
set auto_wire_load_selection true 
set_wire_load_mode enclosed
# 从库中找一个标准单元来驱动所有输入
set_driving_cell -lib_cell winv_1 -pin op [all_inputs]
set_load 3 [all_outputs]

设计约束

设计约束包含两类,分别是设计规则约束(Design Rule Constraints)和优化约束(Optimization Constraints)。

优化约束由用户制定,比如你对面积、功耗等等的要求。优化约束的优先级没有设计规则约束的优先级高,所以DC会优先满足DRC的要求。


Optimization Constraints.png
#############################优化约束##################################

#首先为电路设计一个时钟,
create_clock -name "clock" -period 10 -waveform {0 5} [get_ports clock]
#实际情况下,时钟不可能是理想的,所以需要设计时钟的一些“非理想”属性
set_clock_latency          1     [get_clocks clock]
set_clock_transition       0.3   [get_clocks clock]
set_clock_uncertainty      -setup 0.8 [get_clocks clock]
set_clock_uncertainty      -hold 0.4  [get_clocks clock]
#认为时钟的驱动能力无穷大
set_drive 0  [get_ports clock]
#为了防止在时钟路径上插入Buffer而恶化时序,所以对时钟网络设置Dont_touch_network属性
set dont_touch_network [ list clock ]
set all_inputs_in_domain [get_ports [list Pi_Value hsync vsync configure_addr configure_value write read]]
set all_outputs_in_domain [get_ports [list configured_value toned_pixel TValid]]
set_input_delay  -max       2.5 -clock "clock" $all_inputs_in_domain    
set_input_delay  -min       0.4 -clock "clock" $all_inputs_in_domain
set_output_delay -max       2.5 -clock "clock" $all_outputs_in_domain
set_output_delay -min       0.4 -clock "clock" $all_outputs_in_domain


#############################DRC约束##################################
#0.35先使用库中的默认值
#set_max_transition
#set_max_capacitance
#set_max_fanout
#set_max_delay
#set_min_delay

生成Netlist

#### One Pass Compilation ####
current_design TMO_System
compile_ultra -timing_high_effort_script  > ./log/compile_pass1.rpt
set_auto_disable_drc_nets  -clock  true  -constant  true
set  bus_inference_descending_sort   true
set  bus_inference_style     %s\[%d\]
set  bus_naming_style        %s\[%d\]
set  verilogout_no_tri true
set  verilogout_show_unconnected_pins true
set_fix_multiple_port_nets  -all -buffer_constants
remove_unconnected_ports [get_cells -hier {*}]
set  change_names_dont_change_bus_members   true
change_names  -hier   -rules   verilog
#change_names  -hier   -rules   lab_vlog

#### Two Pass Compilation ####
current_design TMO_System 
compile_ultra -incremental  > ./log/compile_incr.rpt
set  bus_inference_descending_sort   true
set  bus_inference_style     %s\[%d\]
set  bus_naming_style        %s\[%d\]
set  verilogout_no_tri true
set  verilogout_show_unconnected_pins true
set_fix_multiple_port_nets  -all -buffer_constants
remove_unconnected_ports [get_cells -hier {*}]
set  change_names_dont_change_bus_members   true
change_names  -hier   -rules   verilog
#Check Netlist
check_design > ./log/check_netlist.rpt
current_design TMO_System
write -f verilog -h -output ./netlist/TMO_System_syn.v
write -f ddc -h -output ./unmapped/TMO_System.ddc
write_sdc  ./unmapped/TMO_System.sdc  -version 1.4

#get reports
report_timing -to [all_outputs]  -max_paths 5000 -nworst 5000 > ./log/timing_max_output.rpt
report_timing -to [all_registers -data_pins]    -max_paths 5000 -nworst 5000 > ./log/timing_max_register.rpt       
report_timing -to [all_outputs]                 -max_paths 5000 -nworst 5000  -delay min \
                                                > ./log/timing_min_output.rpt
report_timing -to [all_registers -data_pins]  -max_paths 5000 -nworst 5000  -delay min \
                                              > ./log/timing_min_register.rpt
report_area   > ./log/area.rpt
report_power  > ./log/power.rpt

上一篇 下一篇

猜你喜欢

热点阅读