后端基础——仿真验证
数字后端验证设计的正确性,离不开后仿、静态时序分析(STA)和形式验证(Formal Verification)
一,形式验证
形式验证主要用于两个阶段:
1,逻辑综合后的形式验证:主要验证Netlist和RTL的功能是否一致,保证在逻辑综合过程中没有改变原先HDL描述的电路功能。
2,物理实现后的形式验证:主要验证PnR.v和Netlist的功能是否一致。
主要工具:
Synopsys Formality
Cadence Conformal
形式验证根据电路结构静态的判断两个设计在功能上是否等价,常用来判断一个设计在经过了一个后端阶段后功能是否保持一致,其运行时无需测试向量,但必须有一个参照设计和一个待验证的设计,参照设计是设计者认为没有缺陷的设计,理论上是由高级语言C,C++实现的,也可以是用集成电路建模i语言systemC,多数情况下,参照设计就是前端的RTL,一般由verilog或VHDL实现。
二,静态时序分析
STA提供了一种针对大规模门级电路进行时序验证的有效方法。通过遍历所有的传输路径,寻找所有组合逻辑电路最坏延迟情况,检查建 立时间和保持时间是否满足要求,检查恢复时间、移除时间;时钟脉冲宽度、时钟抖动偏移, 验证设计在时序上的正确性,并确定能否在要求的工作频率下运行。
即只需要根据电路网表的拓扑,就可以检查电路设计中所有时序的时序特性,测试路径覆盖率理论上可以达到100%,从而保证时序验证的完备性。同时不需要测试向量,所以STA验证时间小于门级仿真的时间。
缺点是只能分析电路时序,不能验证电路功能的正确性。
三,后仿真
后仿是在前仿的基础上加入了延时信息的功能仿真,同时验证了设计的时序以及功能都正确,并且确保后仿功能和前仿一致。前仿与后仿所使用的仿真器是相同的,所加激励也是相同的;
不同点主要有:仿真所需文件不完全相同、作用不同、波形不同。
后仿可以分为综合后仿真和布局布线后仿真。综合后仿真是对DC综合后的网表进行仿真,连线延时来自于通过线负载模型的估计;布局布线后仿真是对布局布线后的网表进行仿真,连线延时来自于版图的提取。
1,后仿所需文件
DC综合或布局布线后生成的网表文件.v和SDF文件.sdf,与综合时所用工艺库db对应的标准单元工艺库.v文件(不区分工艺角),以及前仿所用的测试激励文件testbench.v
2,常用后仿真vcs选项
(1)-negdelay:支持SDF中的负延时
(2)-ssf:自动加载fsdb
(3)-neg_tchk:支持负延时检查
2,SDF annotated
$sdf_annotate ([sdf_file], top.U_DIGITAL_TOP, [sdf_configfile], [sdf_logfile],[mtm_spec], [scale_factors], [scale_type]);
- sdf_file指定时序签核输出的sdf文件及其路径;
- sdf_configfile”指定sdf配置文件,一般缺省;
- sdf_logfile指定sdf的log生成文件,该文件会保存VCS在运行过程中产生的Error和Warning信息。为了规VCS默认情况下不会记录超过10个以上的error信息/warning信息到log文件,可通过+sdfverbose选项来开启VCS记录所有信息;
- mtm_spec指定VCS反标哪一类延迟信息。可以使用MINIMUM,TYPICAL,MAXIMUM,TOOL_CONTROL(default);
- scale_factors指定minimum,typical,maximum延迟的因子。默认值是“1.0:1.0:1.0”
- scale_type指定在缩放比例之前使用的SDF 文件里面延迟值,可能的值有“FROM_TYPICAL”,”FROM_MIMINUM”,”FROM_MAXIMUM”,”FROM_MTM”(默认值),一般缺省;
3,导出vcd文件(做功耗等分析)
VCD是不压缩的文本格式,兼容性好,缺点是文件太大。后仿先写出高压缩比的FSDB文件,再转成VCD。可指定转换起止时间、结束时间。
fsdb2vcd xxx.fsdb -o xxx.vcd -bt 1000ns -et 2000ns
ISP处理后仿效果
4,后仿注意事项
(1)确认端口input delay是否正确生效
在将环境适配完成后,开始仿真后,在分析violation之前,先把后仿真的波形打开看看,看加载的inputdelay正确着没有,符合预期着没有,因为有时候的violation或者功能报错都可能是自己环境里面加载的inputdelay没加载正确造成的。
(2)确认sdf反标是否正确,是否有error或warning
通过sdf_annotate给DUT加载了时延后,会将反标是否正确与否等信息打印到上面语法中写的sdf.log文件中,在分析violation之前,先检查一下这个sdf.log文件中是否有异常,比如有error或者warning。error一般是sdf和netlist不匹配如某个cell类型不一致,warning可能是后端中加的各种延时仿真工具不能处理报出来的。
(3)无复位端寄存器赋初值
因为无复位端寄存器的面积比有复位端寄存器面积要小,所以有些功能下就会使用无复位端寄存器,在前仿真的时候无复位端寄存器会把x态判断为0进行仿真,不会出现X态传播,但是进行后仿真的时候,如果没有将这些无复位端寄存器赋初值,那么就会出现X态传播,所以后仿真一定要给无复位端寄存器赋初值;(具体使用方法见《(8条消息) vcs initreg选项的使用_kevindas的博客-CSDN博客》《vcs initreg 小记 - 学号党 - 博客园 (cnblogs.com)》《(8条消息) VCS init reg的使用心得_vcs initreg 不起作用_qq_22742971的博客-CSDN博客》)
四,其他参考资料
芯片后仿 - hippomyl - 博客园 (cnblogs.com)
后仿真能否被形式验证(Formal Verification)和静态时序分析(Static Timing Analysis)所取代 - 百度文库 (baidu.com)
innovus streamOut 版图GDS导入 Virtuoso 流程 - zhouxuan2016的日志 - EETOP 创芯网论坛 (原名:电子顶级开发网) -
innovus streamOut 版图GDS导入 Virtuoso 流程 - 知乎 (zhihu.com)