Testbench——封装有用的子程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
moduel display_report();
//封装一些做测试时有用的报告显示
//包括任务error,warning,fatal,terminate
//显示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随时都可以拿来用,免去繁杂的重复劳动。
用户913991 2012-2-24 03:41
用户1000403 2011-12-21 12:51