Design Compiler进行数字综合

Design Compiler 功能

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

DC的工作流程

  • 设置环境
  • 读入并分析设计
  • 环境约束
  • 设计约束
  • 生成Netlist

设置环境

  • Target Library: 由ASIC Vendor提供,后缀一般为".db",里面包含标准单元,Verilog文件映射为最后结构级网表的时候,就在里面查找标准单元。我的标准单元库为wcell.db
set target_library  "Lib/wcells.db"
  • Link Library:在最开始分析你的行为级Verilog文件的时候,并非里面的所有Module都可以转化为Target Library中的标准单元(比如PLL,编译好的RAM,PAD这些),这就需要告诉DC这些东西在那些库里。一般情况下我们的设计不包括这些奇奇怪怪的东西,所以一般在DC中都设置为:
set link_library   [ list * Lib/wcells.db Lib/dw_foundation.sldb]

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

  • Symbol Library:标准单元在电脑上显示的一个样子,也就是每个标准单元的“图标”,一般后缀为“.sdb”。
set symbol_library  "Lib/wcells.sdb"
  • Synthetic Library:Synopsis内部集成了很多可以复用的逻辑,比如+, -, *, <, >, <=, >=这些运算,并且可以根据不同的要求来选择不同的实现,比如选择Booth乘法器或者Wallace Tree乘法器等等,一般这个库不用载入,DC会自动载入synopsis的DesignWare。

  • Search Path: 当在Link Library中无法找到某些模块时,DC会在Search Path下的库中自动找对应的模块。比如Synopsis的DesignWare中的库就缺省包含在了Search Path下,这也就是为什么一般不需要手动设置Synthetic Library的原因。在Verilog源文件中,如果找不到include的文件,也会在Search Path下寻找。

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)。

  • 设计规则约束在逻辑库中明确定义,一般要满足这些约束设计才能正常的工作。


    Design Rule Constraints.png

优化约束由用户制定,比如你对面积、功耗等等的要求。优化约束的优先级没有设计规则约束的优先级高,所以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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 1、软件启动 新开一个terminal窗口,输入命令 :design_vision,回车即可开启图形界面,进入图形...
    蜀湘情缘阅读 8,838评论 0 8
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,048评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 在这个物欲横流,信息高速传播,社会加速发展的时代。有很多人总想一飞冲天、一鸣惊人。似乎不以神速变身达人获得成功,就...
    达安一阅读 374评论 0 1
  • 老外的一篇好文章:http://stackoverflow.com/questions/29525000/how-...
    rogerwu1228阅读 522评论 0 0