特权同学

Testbench——封装有用的子程序

0
阅读(30775)

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随时都可以拿来用,免去繁杂的重复劳动。