做中介开什么网站,新闻发布会的工作环节包括,广东住房和城乡建设厅网站王芃,らだ天堂中文在线逻辑综合工具Design Compiler使用教程
图形界面design vision操作示例
逻辑综合主要是将HDL语言描述的电路转换为工艺库器件构成的网表的过程。综合工具目前比较主流的是synopsys公司Design Compiler#xff0c;我们在设计实践过程中采用这一工具。Design compiler有两种工作…逻辑综合工具Design Compiler使用教程
图形界面design vision操作示例
逻辑综合主要是将HDL语言描述的电路转换为工艺库器件构成的网表的过程。综合工具目前比较主流的是synopsys公司Design Compiler我们在设计实践过程中采用这一工具。Design compiler有两种工作模式一种是tcl模式另一种为图形模式。在设计中为增强直观性采用图形界面design vision。TCL命令行模式可在设计过程中摸索熟悉并使之成为习惯。tcl模式在启动工具之前准备工作有四项设计的HDL源文件、采用的工艺库文件、设计的约束文件、工具的启动文件。图形界面模式最少需要前两项这里不作多说明。
1. 启动工具
登陆Linux之后进入的目录即是用户的家目录在家目录下建立dcLab作为本次实验dc的操作主目录。在dcLab目录下建立设计存放目录如source、约束文件目录如constrn、输出网表文件目录ntlst、报告输出目录rpt、log文件目录log、dc启动目录work等等。 实验室中的工作站存放有umc公司和tsmc公司的0.18um标准单元库的所有文件存放在目录/usr/eda/designKit/下面设计过程中需要查找的话注意路径与示例中的图片上所示路径稍有不同。 Design compiler工具在工作站中已经安装完毕且用户的环境变量和license也已设置完成登录之后直接启动工具即可。如果打开终端之后无法启动工具可能就是license没有启动需要首先采用命令start_slic启动license然后design vision才能正常开启与工作。建立相关的工程目录之后进入本次实验的工作目录~/dcLab/work后采用启动命令design_vision启动工具后相应的界面如下图1所示。 在该界面中最上方为菜单项和工具栏用于设计过程中的各项操作。当窗口中选中不同的对象时不同的菜单项和工具项会被激活。工具栏下面就是主窗口用于显示不同的设计对象、各种报告等。再下方为log/history窗口log 页面显示操作响应history界面回显菜单操作相应的tcl命令操作过程中一定要对照查看尽快熟悉tcl模式。最下方有design_vision-xg-t提示的就是tcl命令输入的位置可以尝试将history页面的回显键入查看响应。 图1 design vision启动界面 启动工具之后就可以工作了主要可分为四部分内容对工程进行启动项设置、对设计进行面积/功耗/时序/环境/drc等约束、对设计进行综合、查看报告并保存结果。
2. 配置工程启动文件
工具启动之后需要设置相应的工程启动文件用于设定搜索路径、相关库文件等内容对应工作目录下的.synopsys_dc.setup文件该文件应该位于工具启动目录~/dcLab/work下dc启动过程中会自动读取该文件的内容用来配置工程启动项。 我们此时假设该文件不存在当设置完成之后可以将之保存以后重启工具就可以不必设置了。选择菜单项File—Setup…出现Application Setup窗口如下图2所示。启动项相关的内容就在该表项中设置用户可以直接填入相关内容或者点击各栏右侧的查找按钮标有…的小框找到相应路径或 者文件的位置。 图2 setup设置窗口 在该窗口中可以看到打有红星标号的项目是必须设置的但是一般填上四项search path、Link library、Target library*、symbol library*。首先来设置搜索路径该项主要用来指明设计中工具所需文件的路径应该包括源代码文件路径、工艺库文件如果源代码有pad则也应该包括pad库文件所在路径、工具提供的中间库文件gtech、designWare路径、以及操作过程中需要读取的中间文件所在路径等。点击search path条目右侧的查找按钮就会出现set search path 表格窗口如下图3所示。 图3 search path设置窗口 表格窗口已有的几项保留不动其中第一项的点符号.表示当前工作目录其余3项为工具提供的通用gtech库、ip单元库design ware以及符号symbol库和仿真模型库所在位置。点击Add…按钮添加搜索路径注意 工作站上的软件工具、库文件均存放在/usr/eda目录下与本例位置/opt/eda/稍有不同如下图4所示。 图4 添加search path窗口 选择标准单元工艺库所在的目录点击OK完成一条搜索路径的设置回到图3 界面此时表格窗口中会多出一项刚刚添加的路径。同样点击Add…按钮添加其余的搜索路径symbol所在路径、设计代码所在路径、约束文件所在路径、io工艺库所在路径等。完成路径设置后图3 所示的search path设置窗口会变成如下图5所示。点击OK按钮完成set search path工作。 图5 完成search path的表格窗口 以上工作对应的tcl命令set search_path “path”其中path内容就是上 述的路径如”…/code …/constrn /usr/eda/designKit/umn18/sc-x/synopsys”。 完成搜索路径的设置后要进行工艺库相关的文件配置。其实配置好搜索路径后可以直接将相应的库文件写入对应的表格项同一项中各文件中间用空格分开即可。这里为了熟悉工具仍然逐项查找填写。在图2界面中点击Link library右侧的查找按钮出现Set Link Libraries的表格窗口如下图6所示。 图6 链接库的表格窗口 在上图中第一项不要改动表示的是链接对象为当前内存。同上面设置search path一样点击Add…按钮查找库文件注意工作站上的路径位置与本例不同出现的界面如下图7所示。 图7 链接库的查找与选择 选中库文件后注意link library和后面的target library采用的是synopsys的数据库文件格式db或者ddc该文件是二进制格式欲了解其内容可以察看 相对应的lib文本文件试着读一下会了解更多点击open按钮回到图6的界面其中增加了一项刚刚选择的库文件如下图8所示的界面至此完成一个库文件的设定。 图8 选定slow.db链接库 在标准单元库中选定slow.db和fast.db两个库文件io单元库中也一样。一般在逻辑综合中最大延时是最重要的约束因此也可以直接采用slow或者worst case库而不标明fast或者best case库。本例中将其加上主要用于对照时序报告察看二者的区别。 设置完成链接库之后形成如下图9所示的表格图窗其中最后一项为工具自带的design ware IP库用于复杂功能逻辑优化。 图9 链接库文件选定图窗 因为在前面设置了search path其中包括了上述工艺相关库的路径因此在设置link library和后面的target library的时候可以直接写上库的文件名称而略 去路径工具可以自动完成相应文件的搜索去除路径之后的链接库文件如下图10所示。 图10 无路径的链接库文件选定图窗 在上图10或者图9中点击OK按钮完成连接库的设定。设置链接库的操作可以直接采用tcl命令set link_library ”library” 来完成其中引号中的就是刚才设定的几个库文件用空格分开简单吧。 目标库的设定target library同link library操作一样而且除了没有表示内存的星号*之外内容也是完全一样的。选定或者填写结果如下图11所示。 图11 目标库的设定图窗 目标库设置采用的tcl命令为set target_library “lib”其中lib的内容即为刚才设置的几个库文件例“fast.db slow.db”。 然后再进行符号symbol库的设定符号库主要是用来在gui窗口中查看电路时使用的表示基本单元器件的视图。同target library一样也可以直接写 入库名忽略路径。因该umc库中没有symbol文件故采用工具中自带的symbol库文件。选择窗口、库名称见下图12。 图12 目标库的设定图窗 符号库设置的tcl命令为set symbol_library “lib”。在图12中点击ok按钮完成设置symbol库。 至此setup内容已经完成设置结果如下图13所示。 图13 setup设定窗口 在图13中点击OK按钮完成启动项内容的设置。随后该设置可以在菜单命令中导出File—Save info—Design Setup将该文件保存为设计启动配置文件.synopsy_dc.setup直接放在work目录下。下次再在该目录下启动工具的时候就不必重新配置点击File—Setup…就可以看到表格中的各项已经配置完成了。
3设计读入
完成启动项配置后就要将设计倒入工具选择菜单命令File—Read…出现Read Design窗口。查找设计代码所在路径选中所有需要的设计代码如下图14所示。点击Open按钮完成代码读入。 图14 setup设定窗口 在读入代码的过程中注意dv下方的log窗口回显与报告如下图15。同时点选history键查看相应的tcl命令read或者read_verilog。 图15 读入设计时的窗口 读入设计之后当前的设计会是读如过程中最后一个代码文件对应的设计 要将顶层设计设为当前设计。在dv主界面的工具栏下方的工具条下下拉选项选中、设置当前设计我们这里是dcLabCore。同样注意history栏中的tcl命令set current_design dcLabCore记住对应的操作。 图16 当前设计设定 完成当前设计的设定后以后的操作就是针对该设计进行的。下面要做的就是将设计与库链接起来。选择菜单命令File—Link Design。出现Link Design窗口如下图所示。注意Search path与Link library两项与前述启动项中的设置是否一致。 图17 Link Design窗口 点击OK按钮完成设计与库的链接。此时要注意log窗口的链接过程的操作回显及时修改错误与告警。 完成链接后要对设计进行检查。选择菜单命令Design—Check Design出现如下窗口点击OK按钮对设计进行检查。注意log栏中的报告。 图18 Check Design窗口 至此读入设计的工作完成。在这过程中源代码中的各种与综合相关的问题都会被检查出来注意随时查看报告并修改直到被综合器接受。下面就要对设计进行约束了。
4设计约束与编译
在dv的主界面中因为已经读入设计此时很多菜单和工具栏已经激活。在图16中先选中Logical Hierarchy中的dcLabCore项点击工具栏中的Create Symbol View或者菜单项Schematic—New Symbol View 选项出现当前设计的symbol我们的约束就要在当前设计中添加。 这里之所以先创建一个symbol因为很多设计的约束比如创建时钟create clock、输入输出延时set input_delay/output_delay、驱动与负载set drive/load、时钟无关路径set false_path等等都是针对设计的端口的port图形化的 界面操作起来容易些。得到的symbol如下图19所示。 图19 创建当前设计的symbol 首先创建时钟在symbol中选中clk_cal端口然后选择菜单项Attributes— Specify Clock…注意灰色的Port name项应该为clk_cal如果不是不要关闭Specify Clock窗口再在symbol上选中该端口就会发现port name相应改变。 时钟的约束这里设定主要有四项一项是时钟的名称要方便易记、意义明确就好二项是时钟的周期由频率决定这里clk_cal为50M故周期20ns时间单位在库中定义三项是时钟的波形定义一个时钟周期内高电平所处的时间区间四项是将时钟网络设定为don’t touch也就是在综合的过程中时钟线上不要添加包括驱动buffer在内的任何器件。时钟信号clk_cal的选择与填写过 程如下图20所示。 图20 创建时钟clk_cal 注意在Don’t touch network选项前打勾。点击OK按钮完成时钟clk_cal的创建。时钟的参数这里就不解释了。同样的方法创建时钟clk_cd如下图。 图21 创建时钟clk_cd 时钟信号clk_cd频率80M故此周期12ns同clk_cal一样将上升沿设定在波形中间。以上操作对应tcl命令create_clock。 创建完成时钟之后就要进行输入set input_delay和输出延时output_delay的约束因为该约束是相对于时钟信号的。在symbol界面中按住键盘ctr键用鼠标选择addi1/addi2/multi1/multi2/cacul_ind端口因为这些端口是和同一时钟clk_cal绑定的设计中输入由时钟clk_cal驱动的触发器中选择Attributes— Operating Environment —Input Delay菜单项填写、选中相应的项目。如下图所示。 图21 创建相对时钟clk_cal的输入延时 通常输入延时计算为时钟周期的60%也就是说留出60%的外部裕量。注意图中Relative to clock项的时钟选择要与设计中的定义一致。 同样完成相对于时钟信号clk_cd的端口codei、codec_ind的输入延时选择、填写后的界面如下图21所示。上述操作对应的tcl命令为set input_delay “port”, 其中port即为相应于时钟的端口。 图21 创建相对时钟clk_cd的输入延时 完成输入延时之后进行输出延时的设定output_delay。选中symbol中的端口caculo它是由时钟信号clk_cal驱动输出选择菜单项Attributes — Operating Environment —Output Delay填写、选择如下图的内容点击Apply按钮完成设置。 图21 创建相对时钟clk_cal的输出延时 同样完成输出信号decdo的输出延时的设定注意该信号是和时钟clk_cd绑定的。以上操作定应tcl命令set output_delay。 现在除了输入信号sub_en和输出信号sub_ovfl以外所有的信号除rstn都进行了约束。现在来进行余下这两个端口信号的约束。在symbol中选中这两个端口选择菜单项Attributes—Optimization Constraints—Timing Constraints出现Timing Constraints窗口如下图所示选择填写完成约束。对应的tcl命令为set max_delay。 图22 约束输入与输出间的最大延时 这里采用set max_delay的方法是因为输入端口信号sub_en到输出信号端口sub_ovfl之间没有时序逻辑只有组合逻辑因此要约束输入端口到输出端口之间的最大延时最小延时除非有需要否则可以不加以约束。 时序约束中还需要将无关路径区分开来采用set_false_path的方法。所谓无关路径就是告诉综合器某两条或者多条路径之间没有时序关系可以不必理会、优化这些路径间的电路。设计中。sub_en端口的信号送入纯组合逻辑而且与时钟clk_cal和clk_cd不存在相位依赖关系故此这里设置为false path。在symbol界面中选定sub_en端口和clk_cal、clk_cd端口选择菜单项Attributes —Optimization Directive—Timing Paths出现如下窗口From栏中留有sub_en项To栏中留有clk_cal和clk_cd两项选中False path项。 图23 无关路径设置 下面来设置驱动与负载drive/load。首先选中symbol中的输入信号端口如下图所示。选择菜单项Attributes— Operating Environment—Drive Strength出现Drive Strength窗口。按照下图填写、选择相应的内容完成驱动设置。 图24-a 配置输入驱动 图24-b 配置输入驱动 在symbol界面选中三个输出端口选择菜单项Attributes— Operating Environment—Load出现Load窗口。注意选中三个输出信号端口。在Capacitive load栏中填容性负载数值。 图25 输出负载约束 以上操作对应tcl命令set drive/load。 现在来设置操作环境Operating Conditions的设置。选择菜单项Attributes— Operating Environment— Operating Conditions出现如下窗口。 图26 操作环境的设置 按照图示选择相应的内容按按钮OK完成操作环境的设置。对应的tcl命令为set operating_conditions。 同样的完成wire Load的设置选择Attributes— Operating Environment— Wire Load菜单项选择umc18_wl20模型。对应的tcl命令set wire_load。 图27 线载模型的设置 下面进行design rule的设定主要是fanout和transition。选择菜单项Attributes— Optimization Constraints— Design Constraints出现下图所示界面只填写图示的两项即可。对应的tcl命令set max_fanout/transition。 图28 fanout与transition的设置 至此设计相关约束设置完成可以对设计进行综合了。选择菜单项Design— Compile Design出现设计编译窗口如图选择点击OK按钮编译设计。 图29 设计编译界面 编译的过程会随着设计的复杂变慢编译的过程中注意log窗口的输出。完成编译后需要查看各种报告。
5查看报告与设计输出
很多时候综合并不是一次就通过的在这过程中有可能时序不满足约束要求或者约束设置的不合理或者设计本身有问题等需要查看报告、调试。这里最重要的一个报告是约束报告。选择菜单项Design—Report Constraints出现如下图30所示的界面。 图30 约束报告选择界面 勾选想要查看的内容点击OK按钮可以看到与约束相关的报告。简单的一个报告如下图31所示。 查看报告的选项大多位于菜单Design和Timing之下。在完成综合之后如果Report Constraints没有发现错误和不期望的告警可以尝试将这些报告项输出具体查看一下非常有助于了解设计、熟悉工具。同时可以对照库中的.lib 文件查看一些参数。 图31 约束报告结果 如果没有报告错误就可以将设计保存下来。选择菜单项File—Save as可以将设计保存为各种格式。 图32 保存设计界面 同样可以保存启动项文件和约束文件选择菜单项File—Save info— Constraints/Design setup保存相应文件。 6.synopsys_dc.setup文件与dcLab.con文件 a. 启动项文件 文件.synopsys_dc.setup应位于当前的工作目录中Linux/Unix下为隐含文件。这里先给出一典型的.synopsys_dc.setup文件如下所示。 文件.synopsys_dc.setup第一项内容设定工具工作过程中需要搜索的路径位置search_path一般包括源代码的目录、库文件工艺库模型文件、symbol文件的目录、约束/运行脚本的目录、某些中间文件的目录以及在工具的安装目录配置的启动搜索目录包括gtech库等目录。 文件.synopsys_dc.setup第二项内容一般用来设定目标库target_library也就是工艺库的名称综合过程中工具会自动在搜索目录中寻找来完成综合工作。第三项内容一般用来设定链接库link_library用于解析设计电路中的最小颗粒单元其中*用来表示内存。 文件.synopsys_dc.setup第四项内容用来设定symbol库也就是design vision 可以看到的网表图形。其余的内容还可以包括命名规则、别名定义等可以任意设定示例中没有一一给出。 b设计的约束文件 约束文件主要用于优化设计电路的主要内容有读入/分析源文件、设定设计的工作条件/环境/设计规则、时序条件、面积约束、综合策略等。 首先是读入源代码也就是HDL文本描述的设计文件此处不用制定目录design compiler会在搜索目录$search_path中搜索。tcl语句如下
read_verilog {dcLabCore.v dcLabTop.v iopads.v}
读入设计原文件后一般设定当前设计这样约束条件才可有针对性施加
current_design dcLabCore
设定当前设计后要完成链接也就是将设计与库链接起来用于映射过程中搜寻相应的单元完成综合。tcl语句 link
检查设计主要是检查完成转换translate的设计 check_design。然后设定输出网表的格式规则输出未优化的设计
set verilogout_no_tri true
change_names -rule verilog -hier
write -f ddc -hier –out ../output/dcLabCore.ddc
然后对设计设定时序约束这是最重要的一项约束用于设定设计的工作速度的。针对不同的设计部分有不同的约束方法。这里假设设计为全同步设计单时钟工作复杂情况参考design compiler的手册即可。以下语句设定时钟及属性、输入信号的时间裕量
create_clock –name clk_cal -period 20 [get_ports clk_cal]
#名称clk_cal对应端口clk_cal50M工作频率
set_clock_uncertainty -setup 0.2 [get_clocks clk_cal] #时钟的不确定时间
set_clock_latency -source -max 0.3 [get_clocks clk_cal]#时钟输入延时
set_clock_latency -max 0.1 [get_clocks clk_cal]#时钟延时
set_clock_transition -max 0.2 [get_clocks clk_cal]#时钟上升/下降时间
set_dont_touch_network [get_ports clk* rstn]
#不对时钟复位信号优化
set_ideal_network [get_ports clk* rstn] #延时分析时认为时钟复位无延时
set_input_delay -max 12 -clock clk_cal [get_ports add* mult*]#输入信号裕量
set_output_delay -max 12 -clock clk_cal [get_ports caculo] #输出时间裕量
完成时序约束后要对设计的工作环境、设计规则等进行约束如下约束语句
set_wire_load_mode top
#设定线载模型的模式
set_wire_load_model -library slow -name umc_wl20 -max
#线载模型要粗略综合一下估出面积再设定
以下是设计规则的约束
set_driving_cell -lib_cell FFEDQHD4X -pin Q [get_ports all_inputs]
#驱动能力的约束
set max_cap [expr [load_of slow/AND2HD4XSPG/A] * 5]
set_load [expr 3 * $max_cap] [all_outputs] #设计负载设定
set_fanout_load 10 [all_outputs] #扇出负载
然后是综合的策略简单的设计比较容易这里不展开
compile -map_effort medium -incremental_mapping
输出综合报告、输出综合网表、综合数据以及标准延时文件
rc log/rc.log #时序报告
write -f verilog -hier -out output/dcLabTop.sv #输出网表
write -f ddc -hier -out output/dcLabTop.ddc#综合数据文件
write_sdf -version 2.1 mapped/light_controller.sdf #标准延时文件上述内容为约束文件主要内容同学们可以讲示例中的约束保存下来自己细看一下。