数字IC设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 常用验证工具:
• Cadence Incisive • Synopsys VCS • Mentor Graphics Questasim
• 高级验证语言
• SystemVerilog • SystemC
• 验证方法学:
• Assertion based verification • SytemVerilog:UVM验证方法学
1. 导入netlist 2. 创建floorplan 3. 添加电源环、电源带、特殊物理单元 4. Place 5. 电源route 6. 时钟树综合 7. Route 8. Metal fill
后端设计
Innovus
• 启动方法: • 输入命令innovus
• 关闭之后有时会导致终端打字不显示,输入reset可以解决
• 大括号中的表达式不解析,可看作列表
• 过程、条件判断、循环等可以先不用
综合——设置库
• 设置库既可以在脚本里设置,也可以设置在家目录 的.synopsys_dc.setup文件
• 主要设置4个变量
• search_path 指定各个文件的搜索路径 • target_library 综合的目标库文件,通常是.db文件 • link_library 包含*(内存中的库)以及target_library和macro library • symbol_library 符号库,通常是.sdb文件,可以没有
5. 设置输入阻抗为0 set_drive
6. 设置为禁止优化网络 set_dont_touch_network
7. 设置为理想网络 set_ideal_network
• 对于pll时钟和分频时钟,只需要设置频率倍数,不需要设置上述参数 • 高级时钟控制:Clock gating • 通常把各个参数设得严格一些,以保留一些设计余量
编译命令
• Design compiler有两个编译命令,compile和compile_ultra • compile_ultra更好用,但是需要额外license • 编译的时候有选项可以把设计变成flat模式,打破hierarchy的结
构,跨模块优化
综合输出
• 输出文件: • Netlist: write_file -format verilog -hierarchy –output ccdspi_gate.v • 时序约束文件: write_sdc ccdspi_gate.sdc • 时序反标文件: write_sdf –version 1.0 ccdspi_gate.sdf • ddc工程文件: write_file –format ddc –hierarchy –output ccdspi_gate.ddc
• 当然Modelsim也可以
综合
• 综合工具:Synopsy用TCL脚本来管理 • 脚本的意义:有一套脚本之后,简单改改就能用在新设计上
• TCL脚本结构:
1. 设置库 2. 读入verilog代码 3. 设置约束 4. 执行编译 5. 输出
数字IC设计流程
设计流程
• 数字IC的设计流程分为前端和后端 • 前端将RTL代码综合成网表 • 后端实现网表的布局布线
前端流程
1. RTL设计 2. RTL验证 3. 可测性设计(可选) 4. 综合 5. 时序分析 6. 门级验证 7. 形式验证
RTL设计
• 如果是数字顶层,需要将io pad加入到RTL代码中。 • Io pad的verilog模型可以在io库手册和io库的verilog文件中找到
RTL注意事项
• RTL代码中不能包含寄存器默认赋值,如
• reg [5:0] a = 6‘b0;
• 必须用异步清零的方式赋值: always(@posedge clk or posedge rst) begin
if (rst) a <= 6'b0;
else a <= a + 1'b1;
end
RTL验证
行tcl语句
• 所有前后端工具都支持tcl脚本,用户在图形界面上的操作会把对 应的命令记录在log文件里
TCL常用语法
• 查看帮助:man command • 执行脚本:source compile.tcl • 变量赋值:set a 1 • 变量取值:$variable • 列表相关命令:list, lappend, lindex, concat • 算术运算:expr 1+2*3 • 嵌套表达式:set a [expr $b*2]
DC图形界面 原理图
时序直方图
• 执行read_ddc ccdspi.ddc命令可以打开之前的工程
时序分析
• 综合之后需要用primetime重新进行时序分析 • Primetime是signoff级的时序分析,内部算法与design compiler有
区别 • 时序分析命令与design compiler基本相同
• 下图是一个reg to reg时序路径
• 在第一个周期的上升沿,信号到达FF1,在第2个周期的上升沿要保证 信号到达FF2,即信号到达时间小于时钟到达时间
• 信号到达时间=时钟Skew+FF1翻转时间+组合逻辑延迟 • 时钟要求=时钟周期+时钟Skew-Uncertainty-Library Setup time
• 输出报告: • Setup time时序报告:report_timing -delay max > ccdspi.rep • Hold time时序报告:report_timing -delay min >> ccdspi.rep • 面积报告:report_area >> ccdspi.rep • 功耗报告:report_power >> ccdspi.rep
时序路径
• Input to reg: 信号到达时间=时钟Skew+Input Delay+组合逻辑延迟 • Reg to output:信号到达时间=时钟Skew+output Delay+组合逻辑延迟 • Setup time: 前一级信号保证在下一个时钟周期之前到达下一级 • Hold time: 前一级信号要满足下一级的hold time和clock uncertainty要
后端软件
• 后端设计工具: • Cadence Innovus (以前叫Encounter,后来叫EDI) • Synopsys IC Compiler (ICC)
• 后端时序分析、功耗分析: • Primetime
• 物理验证DRC LVS PEX: • Calibre,PVS,QRC
后端设计流程
• 设置库文件,工艺角 set_min_library set_operating_conditions • 禁用某个标准单元set_dont_use • 禁止优化set_dont_touch set_dont_touch_network • 设置面积约束 set_max_area • 设置并行编译核数 set_host_options -max_cores 16
求 • Hold time问题一般在后端通过插入buffer修复
多时钟路径、伪路径
• 多时钟路径 set_multicycle_path • 用于设置一条路径允许信号经过多个时钟周期到达下一级
• 伪路径 set_false_path • 用于禁用一条路径的时序分析,常用于跨时钟域以及异步信号 • 注意数字分频电路虽然也是跨时钟域,但不能设为伪路径
其他设置
• 修复多端口连线 set_fix_multiple_port_nets –all -buffer_constants
• 设置线载模型 set_wire_load_model -name Medium -library sc9xz_ch018ull_base_g5p0_tt_typ_max_5p00v_25c
时序约束
• 时序约束的目的是指定对整个设计的要求,在综合的时候软件会 尝试满足这些要求,同时在综合之后可以给出时序报告
• 时序约束大致分为如下几类: 1. 时钟建模 2. 输入输出延迟 set_input_delay set_output_delay 3. 输入阻抗 4. 负载 5. 多周期路径和伪路径 6. 优化相关的设置
• set link_library [concat "*" $target_library] • set symbol_library {sc9xz_ch018ull_base_g5p0.sdb}
综合——读入verilog
• 读入verilog需要依次调用下面5个命令 1. analyze -format verilog -lib WORK { filelist } 2. elaborate top_module –lib WORK 3. current_design top_module 4. link 5. uniquify
testbench代码。
形式验证
• 形式验证通过一些算法来验证综合输出的netlist是否与原rtl具有 同样的功能
• 在某种程度上比门级验证更全面,但不代表形式验证过了就一定 没问题,两者相辅相成
• 启动命令 formality –gui
生成 Formality Setup 文件
• 在dc脚本的开头加入: set_svf ccdspi.svf • 在dc脚本的结尾加入: set_svf –off
时钟建模
• 时钟建模要求设置时钟的如下参数
1. 源延迟,通常设为0 set_clock_latency -source
2. 网络延迟
set_clock_latency
3. Uncertainty
set_clock_uncertainty
4. Transition
set_clock_transition
• 时钟源延迟
• 时钟网络延迟和 uncertainty
时钟建模
时序路径
• 时序路径分为4类:
• Input to reg • Reg to reg • Reg to output • Input to output
• 时序路径计算的是同步信号从一端到另一端的时间是否小于时钟 要求的时间
时序路径
综合——设置库
• set pdk_path /opt/pdk/GF180_BCDlite_STD_ULL_20170706/GF180_ULL_SC 9/arm/gf/ch018ull/sc9xz_base_g5p0/r0p0
• set search_path [list . $pdk_path/db $pdk_path/sdb $pdk_path/slib]
启动 Design Compiler
• 首先执行source /opt/cadence/sss_env来设置环境变量 • 执行dc_shell启动无GUI界面的design compiler • 执行dc_shell –gui可以启动界面 • 启动界面之后既可以在终端里执行tcl语句,也可以在界面下方执
• 启动命令: • pt_shell • pt_shell -gui
门级验证
• 在testbench中加入下面一行 • initial $sdf_annotate("ccdspi.sdf", ccdspi_inst); • 其中ccdspi.sdf是综合输出的时序反标文件,要复制到门级验证的
文件夹里 • ccdspi_inst是设计的实例的名字 • 把rtl代码替换成综合输出的netlist • 引入数字库和io库的verilog文件 • 有些内部信号可能在综合的过程中被优化掉,需要修改相应的
• set target_library {sc9xz_ch018ull_base_g5p0_ff_typ_min_5p50v_m40c.db sc9xz_ch018ull_base_g5p0_ss_typ_max_3p30v_125c.db sc9xz_ch018ull_base_g5p0_tt_typ_max_5p00v_25c.db sc9xz_ch018ull_base_g5p0_ss_typ_max_2p50v_125c.db sc9xz_ch018ull_base_g5p0_ss_typ_max_4p50v_125c.db}
相关文档
最新文档