模块(module)是用于构建设计的基本结构。每个模块可以包含其他模块、网络、变量和其他过程块的层次结构来描述任何硬件功能。另一方面,testbench是验证设计的完整环境,因此重点放在建模的方式上,以使其更加可重用和有效。它必须正确地初始化和同步,以避免设计和测试之间的竞争条件。
为什么需要程序块?
引入SystemVerilog程序块的原因如下:
【1】提供执行测试平台的切入点;
【2】创建一个容器来容纳所有其他测试平台数据,例如任务,类对象和函数;
【3】通过在仿真周期的反应区域内执行来避免设计出现竞争条件;
Syntax
program [name] [port_list];
...
endprogram
Examples
program test1 (input clk, reset);
initial ...
endprogram
program test2 (interface wb_if);
initial ...
endprogram
program test3;
initial ...
endprogram
一个程序块可以嵌套在模块和接口中,因此同一模块中的多个程序可以共享该作用域的局部变量。在下面的例子中,mode是tb中的一个局部变量,可以被程序p1和p2访问。
module tb;
bit [3:0] mode;
program p1;
...
endprogram
program p2;
...
endprogram
endmodule
参考文献:
【1】https://www.chipverify.com/systemverilog/systemverilog-program-block