打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Writing testbench——防止同时调用task
userphoto

2011.12.11

关注

       Testben使用的是硬件语言,而其所依赖的环境却是基于PC的软件平台。这也就决定了其独特的代码风格。有时的的确确是以一个软件式的顺序方式在给待测试硬件代码做测试,但是写出来的testbench代码中却时常布满了并行执行的陷阱。这给硬件测试者带来了不少麻烦,既然我们选择了verilog,那么就得好好领会它在硬件测试环境下的特殊性。或者说,我们应该掌握一些常用的技巧来避免这些问题,让我们的testbench更高效的执行。

下面就是一个task使用的常见冲突以及解决办法。

 

task write;

input [7:0] wadd;

input [7:0] wdat;

begin

ad_dt <= wadd;

ale <= 1’bl;

rw <= 1’bl;

@ (posedge rdy) ;

ad_dt <= wdat;

ale <= 1’b0;

@ (negedge rdy);

end

endtask

 

initial write(8’h5A, 8’h00);

initial write(8’hAD, 8’h34);

 

       上面的task实现了往存储器的指定地址写入指定数据的功能。由于verilog中的alwaysinitial在实际执行中都是并行工作的,也就很有可能出现上面两个initial同时进行task调用,同时需要写存储器的情况。那样会出现什么后果呢?可想而知,这是我们不希望看到的。

       那么如何解决这样的问题呢?看下面改进后的代码。

 

task write;

input [7:0] wadd;

input [7:0] wdat;

reg in_use;

begin

if (in_use === 1b1) $stop;

in_use = 1b1;

ad_dt <= wadd;

ale <= 1’b1;

rw <= 1’b1;

@ (posedge rdy);

ad_dt <= wdat;

ale <= 1’b0;

@ (negedge rdy);

in_use = 1b0;

end

endtask

 

       粗体部分就是加入了检错机制,用in_use作为task已被调用的标志信号,从而避免其它的调用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Verilog十大基本功2(testbench的设计 文件读取和写入操作 源代码)
Testbench文件编写纪要(Verilog)
初中初二八年级人教版英语上册全册教案下载
verilog语法学习心得(转载)
转ModelSim入门及Testbench编写——合理利用仿真才是王道
如何编写testbench的总结(非常实用的总结) 来自 初冬安静的小窝-与非网博客
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服