特权同学

Testbench——封装有用的子程序

0
阅读(30570)

moduel display_report();

//封装一些做测试时有用的报告显示

//包括任务errorwarningfatalterminate

//显示warning报告,同时包含显示当前时间和警告内容(由用户输入)

task warning;

input [80*8:1] msg;

begin

$write("WARNING at %t: %s", $time, msg);

end

endtask

//显示error报告,同时包含显示当前时间和错误内容(由用户输入)

task error;

input [80*8:1] msg;

begin

$write("-ERROR- at %t: %s", $time, msg);

end

endtask

//显示fatal报告,同时包含显示当前时间和致命内容(由用户输入)

task fatal;

input [80*8:1] msg;

begin

$write("*FATAL* at %t: %s", $time, msg);

terminate;

end

endtask

//显示warning报告,同时包含显示当前时间和结束信息(该任务自动生成)

task terminate;

begin

$write("Simulation completed\n");

$finish;

end

endtask

endmodule

//使用上面封装好的task

module testcase();

//包含已经编写好的display_report.v ,后面就可以调用其封装好的task了

`include " display_report.v"

……

initial begin

if (...) error("Unexpected response\n"); //调用error任务

……

terminate; //调用terminate任务

end

……

endmodule

module testcase;

initial

begin

if (...) syslog.error("Unexpected response");

syslog.terminate;

end

endmodule

特权同学平时都是写testbench在ModelSim5.7se下进行仿真测试。但是很可惜上面的方式无法通过。也许是不同测试软件测试环境的差异吧,归根到底应该是它们对于行为级硬件语言的编译执行程度不同。不过这里提出的子程序封装的概念还是很受益的,这样封装好的task对于以后的testbench随时都可以拿来用,免去繁杂的重复劳动。

Baidu
map