个人认为自学最大的门槛在于:用怎样的形式来输出所学知识,以保证对所学知识的理解是深刻的。我选择写博客来记录自学过程中的疑惑和答案。
SystemVerilog Testbench Lab系列博客将作为我这段时间学习sv的输出,希望能够学会sv在验证中的使用。Synopsys的sv_lab是学习sv的入门资料(EETOP上可以搜到),这一系列的博客都将基于此展开。
了解DUT
创建测试平台之前,阅读rtl代码了解DUT。我觉得验证人员需要关注的是DUT实现了什么功能,不必过分关注实现的细节。
在Synopsys的lab中,DUT是一个路由器,简单而言其功能是:router共有16个输入端口,每个端口可以并行工作,按照destination address、paddings、data
的顺序并行地发送数据;router根据路由逻辑,将输入端口的数据送到对应的输出端口。其发送数据与接收数据的时序图分别如下面两张图所示。
构建SV测试平台
interface
接口模块将test program和dut连接起来,需要定义信号的类型、信号的位宽、信号的方向等。
// interface
interface router_io(input bit clk);
// signals type
logic reset_n;
logic [15:0] frame_n;
logic [15:0] valid_n;
……
logic [15:0] busy_n;
// signals direction - synchronous to 'clk'
clocking cb @(posedge clk);
output reset_n;
output frame_n;
output valid_n;
……
input busy_n;
endclocking:cb
// signal direction - asynchronous to others
modport TB(clocking cb, output reset_n)