使用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:

数字生活 引用 删除 5life   /   2007-12-21 01:21:57
但是使用force 要小心,毕竟该语句只能保证你能通过CASE,一定要保证这个是合理的。
数字生活 引用 删除 5life   /   2007-12-21 01:21:40
5
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar