使用force强制模块内部信号到某个特定值
上一篇 /
下一篇 2007-12-20 23:13:48
/ 个人分类:Verilog及工具
需要场合:
比如在某种场合,需要把底层模块中的某个信号固定为特定值,这时可以使用 force 语句。是在模块外部,而不是模块内部通过外部输入信号的方式来改变其值。
比如在测试平台tb,例化一个模块x,例化名为 dut。 x模块内有很多信号,其中有复位 reset,是x模块的一个输入信号; 还有一个信号,count,是一个计数器,为一个reg变量,时钟clk的上升沿工作。
这时可以在tb使用force来改变dut例化模块中的reset和count的值,比如下面的激励:
initial // Test stimulus
begin
reset = 0;
#5 reset = 1;
#4 reset = 0;
#100;
force dut.reset = 1;
#10;
force dut.count = 20;
#100;
force dut.reset = 0;
#100;
end
仿真可以发现,在109ns时,dut的reset信号变为高了。但是这时tb的reset信号还是为低(tb的reset是连接到dut的reset端),而dut内部的count则在119ns之后,一直保持为值20。
这时,问题出来了:不能让count这个信号的值一直维持在 force得到的值上! 如何释放 force对它的控制,而让dut内部逻辑恢复对 count信号的约束呢?
方法是使用release语句。 示范如下:
initial // Test stimulus
begin
reset = 0;
#5 reset = 1;
#4 reset = 0;
#100;
force dut.reset = 1;
#10;
force dut.count = 20;
#100;
//force dut.reset = 0;
#100;
release dut.count;
release dut.reset;
end
== 有兴趣的可以自己找个简单的测试平台试试。
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: