使用 Design Compiler 对 Verilog 或 Vhdl 文件进行综合 EX1:verilog 一、Design Compiler 启动命令 GUI 界面:dc_shell,dc_shell-t 图形界面:design_vision 二、工程新建 进入工程目录 lab4,在工程目录中建立 rtl 文件夹,将已经写好的可综合的 Verilog 文件放入 rtl 文件夹中,新建 scripts 文件夹,放入之后写入的约束文件。 三、环境变量设置:启动 Design Compiler 后,我们可以看到: 这里需要设置环境变量,一共有四处环境需要设置: 1、search_path:当 link library 中找不到某些模块时,会自动在 search_path 所指向的路径中寻 找相应模块。Eg:Synopsy 中的 DesignWare 中的库就缺省包含在了 Search Path 下,这也就是为什 么不需要手动设置 Synthetic Library 的原因。在 Verilog 源文件中,如果找不到 Include 文件,也 会在 Search Path 下寻找。 Tel 格式:set search_path “路径” set search_path [list $search_path “ 路径 1”\”路径 2”] 2、Target library:由厂商提供,后缀一般为”.db”,里面包含标准单元。Verilog 文件映射为最 后结构级网表时,就在里面寻找标准单元。 Tel 格式:set target_library “../sc max.db(路径加库名)” 3、Link library:在最开始分析你的行为级 Verilog 文件的时候,并非里面所有的 module 都可 以转化为 Target Library 中的标准单元(比如编译好的 RAM),这就需要告诉 DC 这些东西在哪些 库,一般情况下我们设计不包含这些不被识别为 Target Library 中单元的东西,所以一般 DC 中设 置为: Set link_library [list * 路径加库名 dw_foundation.sldb] 最后的 dw_foundation.sldb 是在你的设计中折佣了 Synopsy DesignWare 提供的 IP 时,方便 DC 找到相应的 IP,否则 link 报错。 4、symbol library:标准单元在电脑上显示的样子,也就是每个标准单元的图标,一般后缀 Wie”.sdb” tel 命令:set symbol_library “路径加库名” 四、读入文件 1、首先清理系统:remove_design -all 2、读入文件:read_verilog [.v .v] Read_verilog 在只有一个 verilog 文件时比较方便,但当有很多文件需要读入时,则使用 analyze 和 elaborate 命令比较简单。 Analyze -format verilog -lib 工程目录 需要读入的很多文件所在的文件夹 Elaborate <top-module-name> -lib 工程目录 -update 3、link 链接:连接到工艺库:link 4、设计约束,约束文件的书写: 一>初始设置 1、清除原有的约束文件:reset_design 二>时钟设置 2、设置一个 333Mhz,周期为 3ns 的时钟:create_clock -period 3.0 [get_ports clk] 3、设置外部时钟源延迟最大值为 0.7ns:set_clock_latency -source -max 0.7 [get_clocks clk] 4、设置内部时钟网络延迟最大值为:0.3ns:set_clock_latency -max 0.3 [get_clocks clk] 内部时钟传输到寄存器有+/- 30ps 的延迟,这导致一共有 60ps 的不确定状态,再加上 40ps 的抖动时间,50ps 的启动时间,一共 150ps(0.15ns)的不确定时间: Set_clock_uncertainty -setup 0.15 [get_clocks clk] 5、时钟转换时间 0.12ns: Set_clock_transition 0.12 [get_clocks clk] 三>输入时序 数据输入(data1&data2)时间的最大值为:时钟周期(3ns)-时钟不确定时延(0.15ns)-寄存器启动 时间(0.2ns)-delay of S(2.2ns???)=0.45ns; Set_input_delay -max 0.45 -clock clk[get_ports data*] 片选信号 sel 传输时间 1.4ns,减去外部内部时钟时延,1.4ns-1.0ns=0.4ns Set_input_delay -max 0.4 -clock clk [get_ports sel] 四>输出时序 输出时延为 420PS+80Ps = 500ps(0.5ns): set_output_delay -max 0.5 -clock clk [get_ports out1] 内部时钟到 out2 的时延为 810ps,捕获时钟沿到达的时间要晚 3ns, 输出时钟时延为 3ns-0.15ns(不确定时钟延)-0.81ns 内部时钟延)=2.04ns Set_output_delay -max 2.04 -clock clk [get_ports out2] 管脚 out3 的启动时间为 0.4ns(从寄存器时钟到达到管教接收到信号) Set_output_delay -max 0.4 -clock clk [get_ports out3] 设置逻辑时延: Set_input_delay -max 0.3 -clock clk [get_ports Cin*] Set_input_delay -max 0.1 -clock clk [get_ports Cout] 五>设置面积大小 Set_max_area 540 时钟概念详述: Trasition:电平转化时间如下图: 如上图,理想的电平转化时间为 0,但在实际过程中,图下面梯形的图是转化时间。 Clock skew:指理想的时钟时完全同步的,也就是说寄存器的时钟同时到达,但实际上实现不 了,clock skew 是指同一时钟域内不同寄存器时钟最早到达和最迟到达的时间差。 Clock jitter:指时钟源的抖动。例如理想的 PLL 产生的时钟源每个周期都相同,但实际上每个 周期的上升沿会有一些偏差,这就是时钟抖动。 Clock uncertainty:=clock skew + jitter of clock source。时钟不确定时间就是这两个的相加。 Clock source latency:时钟定义点之前时钟源到时钟定义点的传输时间 Clock network latency:时钟定义点之后时钟到达寄存器的时间。 Clock latency:包含 clock source latency + clock network latency 输入输出延迟时钟详述: Set_input_delay:用于数据输入端口,调节数据输入和时钟输入的相位关系: Set_output_delay:用于数据输出端口,调节数据输出和时钟输出的相位关系。 5compile: 6、综合完成后,将设置的网表文件输出: Write -format verilog -hierachy -output tt.v 这一命令将写出综合得到的结构描述 verilog。 在这个命令之前,需要输入 change_names -rules verilog,确认是否使用了正确的 Verilog 语 法。 Write -format ddc -hierachy -output tt.ddc(该类型文件使用较多) 7、将约束文件输出 Wirte_sdc constrain.sdc 文件格式说明: .sdc 约束文件 .con 约束文件 .db 标准单元库文件 .sdb link 库文件 .ddc 主要是 design 相关信息,包括 timing,db,lib 等 .sdf 标准延迟网表 最后生成的网表文件:.ddc 或.v rtl 文件夹:放入初始的.v 文件 Scripts:各种约束文件 Mapped:综合后的网表文件 相关命令: Write_rep:生成一个综合的报告,说明这一设计的关键路径以及综合是否达到了速度目标。 Write_ddc:synopsys 的二进制数据库文件,读者可以把它读入到 Design Compiler 或者 Design Vision 中进一步处理 Write_sdf:写一个标准延时格式文件,读者可以通过它把从已综合电路中提取的时序反标到 作者的仿真中。 Write_pow:报告文件,描述 Design Compiler 所能提供的读者设计将消耗的功耗。 .synopsys_dc.setup 讲解: 启动 Design Compiler 时,自动执行三个配置文件。这些文件具有相同的文件 名:.synopsys_dc.setup ,但是在不同的目录下。文件中包含命令,实现参数和变量的初始 化,声明设计库等等。分别是: 1. $SYNOPSYS/admin/SETUP 目录下,DC 安装的初始化文件。 2. 当前用户的$HOME 目录下,一般用于设置一些公用的变量 3. DC 启动所在的目录下,一般用于个人的环境设置。 这里我们需要写的是用户目录下的.synopsys_dc.setup 文件, 里面主要设置四个环境变量, 就是集成了一个文件。 问题: 1. 命令解答: Set_dont_touch_network [get_ports clock] 在 create_clock -period 10 [get_ports clock]之后加该命令,免除 DCcompiler 对时钟的优化。 2. 电路加 standard Cell 库 3. 周老师安装软件?? PrimeTime compile 之后直接 report_timing,结果解读: Clock clock(fall edge):时钟下降沿 Report_timing:如何看?? 1. 报告中 incr 和 path 区别: Incr 指单个的 cell 的 delay path 指从前到后 cell delay 的累加值 额外命令;set auto_wire_load_selection true