
最近在学习关于ATPG的内容现分批次整理最近的学习笔记。仅为自己以后的回顾做记录若有不对的地方欢迎走过路过的大侠指正。关于ATPG是指自动测试向量生成的缩写所以这里说的仿真是指对ATPG的工具生成的测试向量进行仿真。本文主要针对TetraMax工具生成的测试向量进行仿真笔记的记录在TetraMax网页版帮助文档中找到这里参考的是2013版本下面也是基于此版本进行展开可以得知支持Verilog DPV testbench的仿真器有synopsys VCS、cadence NC-Verilog、Cadence Verilog-XL、Model Technology ModelSim。1 关于Verilog DPV testbench通过TetraMAX工具生成patterns的同时也可产生用于仿真的文件该命令为write_patterns其具体的使用可以在TetraMax的命令行通过man write_patterns查看该命令会打开网页版的帮助文档。生成的仿真文件包括design_name.v和design_name_stildpv.v两个文件design_name是指我们自己命名的文件名。Design_name.v文件在design_name_stildpv.v中调用。Design_name_stildpv.v就是vcs仿真时的testbench文件,里面的格式就是正常仿真时的文件格式一样module-endmodule该文件是命令生成的不需要手写。Design_name.v文件通过$STILDPV_setup()系统函数调用该系统函数可以在网页版的帮助文档里查找到并能看到design_name_stildpv.v文档的详细内容。2 关于design_name.v文件Design_name.v文件的格式和design_name.stil文件的一样内容相近。都主要包含了header、signals、signal groups、timing、scanstructures和.stil文件中的不一样该文件中把具体的scan上的reg按先后顺序都列出来了、scanchain、patternburst、patternexec、procedures、macrodefs里面包含test_setup、pattern块。在进行patterns仿真时仿真波形的变化应该和test_setup和pattern里的数据对应pattern也是按其顺序在波形上先后体现的。Test_setup和pattern里的数据是一个时钟周期对应一个数据。Test_setup中的C是指相应的端口为常数V为对应端口变化的矢量loop是指将该loop中的矢量循环打入输入端口loop后面跟着的次数是指循环输入的次数。Pattern里面包含多个具体的pattern从0到N。每个具体的pattern里包含了call “load_unload”和call “multiclock_capture”两部分。在call “load_unload”部分包含了不同的scan输入输出引脚需要在对应scan_chain的pin脚看call “multiclock_capture”中包含了“_pi定义好的输入引脚列表”、“_po输出引脚列表”、“_clkscan时钟”。若“_clk”等于0则不执行capture操作若“_clk”等于P则执行capture操作。执行capture操作时scan_enable一定为0.pattern 0包含了输入数据没有包含输出数据是因为第一组数据输入后才会输出有效数据故没有输出数据最后一个pattern只包含了输出数据没有包含输入数据此时波形上输入数据为固定值在最后一个pattern只需要打出最后一组输出有效数据。Scanstructures中写明了scanlength该长度和后面具体pattern中输入输出数据量一致。3 关于使用VCS的仿真命令使用该种方法进行atpg的仿真需要在正常的仿真命令中需加入如下语句acc2 \-P $STILDPV_HOME/lib/stildpv_vcs.tab \$STILDPV_HOME/lib/libstildpv.a \tetramax加入该部分语句后编译器才能识别design_name_stildpv.v中的$STILDPB_*()系统函数也指向tetramax的pattern。注意atpg仿真和功能仿真的芯片物理环境不一样。如数模混合芯片中功能仿真模拟部分需要正常产生相应的激励而在atpg仿真中只需要模拟部分处于某种状态。因此用于仿真的部分文件需要在功能仿真的基础上进行相应的调整。4 未弄明白的问题Q1同一个项目同一个脚本同一个命令输出的.stil文件和.v文件scanlength为何不一样Q2为何.stil文件中的scanlength和该文件中pattern的输入输出数据长度不一致