01验证基础的定义,验证策略,验证方法
答案:验证的定义:确保该模块能够成功地完成预定的任务。
验证策略:白盒验证(主要针对模块级验证),灰盒验证(子系统级),黑盒验证(系统及验证)
验证方法:逻辑仿真(功能验证),FPGA原型验证(硬件仿真),形式验证(formal 验证 )等。
02验证计划的编写,验证点的提取
答案:首先对spec进行划分,从寄存器,接口,协议,基础功能点等划分清楚;
需要验证寄存器的读写属性,默认值检查等。
03如何确保验证的模块是否验证完全
答案:①从功能方面考虑,验证完spec上提取的所有功能点,交叉验证;
②从性能方面考虑,该模块支持多少M频率的时钟等;
③从接口方面考虑,模块内涉及的协议是否都验证;
④从时序方面考虑,clk和reset是否正常等;
⑤从场景方面考虑,正常场景,异常场景的处理等。
04SV语法,class类的三要素,数据类型,面向对象OOP
答案:class的三要素:多态,封装,继承。
05随机约束中的权重分布,条件约束,slove…before约束,约束块的控制
此知识点见绿皮书137页。
06三种基础过程语句的区分:fork_join,fork_join_any,fork_join_none
答案:fork join是中间所有进程同时开始,必须所有进程执行完再接着执行;
fork join_any是中间所有进程同时开始,至少有一个进程执行完再接着执行;
fork join_none是中间所有进程同时开始,不必等待就可以接着执行其他进程了。
07
基础的bus总线协议的了解,例如:用SV语言描述apb总线的读写行为
答案:最常用的BUS总线有AXI,AHB,APB等。
interface automatic apb_if#(int ADDR_WIDTH=8, int DATA_WIDTH=32) (input wire pclk);
logic preset_b;
logic [ADDR_WIDTH-1:0] paddr;
logic psel;
logic penable;
logic pwrite;
logic [DATA_WIDTH-1:0] pwdata;
logic [DATA_WIDTH-1:0] prdata;
logic pclk_reqen;
logic pready;
logic pclk_req;
logic pslverr;
task automatic write (input [ADDR_WIDTH-1:0] addr, input[DATA_WIDTH-1:0] data);
@(posedge pclk);
#1;
psel=1;
pwdata=data;
paddr=addr;
pwrite=1;
penable=0;
@(posedge pclk);
#1;
penable=1;
wait(pready==1'b1);
@(posedge pclk);
#1;
psel=0;
pwdata=data;
paddr=addr;
pwrite=0;
penable=0;
endtask
task automatic read(input [ADDR_WIDTH-1:0] addr, output[DATA_WIDTH-1:0] data);
@(posedge pclk);
#1;
psel=1;
paddr=addr;
pwrite=0;
penable=0;
@(posedge pclk);
#1;
penable=1;
wait(pready==1'b1);
@(posedge pclk);
data=prdata;
#1;
psel=0;
paddr=addr;
pwrite=0;
penable=0;
endtask
endinterface
黄老师作业:
01验证工程师常用哪些EDA工具?
vcs,verdi,dve等
02请画出分层验证平台结构图
03代码覆盖率和功能覆盖率的关系是怎么样的?
功能覆盖率主要是针对spec文档中功能点的覆盖检测 ,而code覆盖率主要是针对RTL设计代码的运行完备度的体现,
其包括行覆盖率、条件覆盖率、FSM覆盖率、跳转覆盖率、分支覆盖率(只要仿真就可以,看看DUT的哪些代码没有动,如果有一部分代码一直没动,看一下是不是case没写到)。
功能覆盖率和代码覆盖率两者缺一不可,功能覆盖率表示着代设计是否具备这些功能,代码覆盖率表示我们的测试是否完备,代码是否冗余。
当功能覆盖率高而代码覆盖率低时,表示covergroup是不是写少了,case写少了;或者代码冗余。
当功能覆盖率很低而代码覆盖率高时,表示代码设计是不是全面,功能点遗漏;covergroup写的是不是冗余了。只有当两者覆盖率都高的时候才表明我们验证的大部分是可靠的。
代码覆盖率很难达到100%,一般情况下达到90%多已经非常不错了,如果有一部分代码没有被触动到,需要有经验的验证工程师去分析,如果确实没啥问题,就可以签字通过了。
04task和function的异同点有哪些?
task可有多个输入和输出,function中只有一个输出,且必须有一个返回值;
task中可包含时序逻辑,耗时;function不可以耗时;
task中可包含task和function,function中不能包含task。
05'include和import有什么差别?
`include将文件中所有文本原样插入包含的文件中。这是一个预处理语句,`include在import之前执行。
import不会复制文本内容。但是import可package中内容引入import语句所在的作用域。
06什么是静态变量?什么是动态变量?
静态变量:通常上需要保存的值需要被定义为静态变量。
动态变量:变量的存储区在需要时由软件工具动态地分配,在不需要时被释放。
由static和autostatic决定定义。
07各列举4个二值逻辑和四值逻辑,各列举4个有符号类型和无符号类型
二值逻辑:byte,shortint,int,bit,longint等
四值逻辑:integer,reg,logic,net_type(wire,tri)等
有符号类型:byte,int,longint,shortint等
无符号类型:bit,logic,reg,net_type(wire,tri)等
7天训练营作业
01此次实训营中老师用到了哪些软件工具?
答案:VCS是Synopsys公司的软件,是编译型verilog模拟器。Verdi是Synopsys公司的软件,但是属于收购过来的,用于打开仿真后产生的FSDB波形文件,用于看信号的波形,调试。
02此次实训营中你们是否收集了代码覆盖率,通过什么收集的,代码覆盖率包含哪些部分?
答案:此次收集了代码覆盖率,通过Makefile脚本中第30行代码收集的代码覆盖率,代码覆盖率包含了line,toggle,condition,fsm,branch这5种覆盖率综合得分得到的百分比覆盖率。
03在systemverilog语言中task和function的最明显差异?
答案:最明显差异是task可以耗时可以不耗时,而function必须不耗时间。
04老师在收集覆盖率时加了-full64这个的意义什么?
答案:-full64是支持64位模式运行,若运行平台为64位x86,加上这个选项。
05此次训练营老师介绍了rtl级前仿真的流程,大概流程是什么样勒?
答案:理解DUT→制定验证策略方法→提取验证点/搭建平台→据验证点编写测试用例进行验证跑用例进行验证→检查覆盖率评估验证效果。
06在Makefile脚本中,是否支持systemverilog语言的?
答案:不支持
07在Makefile脚本中,tb.f和rtl.f是什么作用
答案:.f<filename>指定文件列表的文件名,rtl.f文件中可包括设计代码文件(.v文件)的路径名称,和编译选项参数;tb.f文件中包含环境代码文件(.sv文件)的路径名称。