Verilog测试平台(testbench)技术(三)

二、测试平台技术

下面讨论许多有关测试激励生成与输出结果观测的代码编写技术。在这里待测模块我们使用一个如下描述的 Moore 状态机,它是一个 101Moore 序列检测器。当检测到输入序列为 101 时,当前状态值变为 d ,输出 z 的值为 1 。这是一个同步复位电路。

/*************************************************************************/

       `timescale 1ns/100ps

 

       module Moore_detector (input x, rst, clk, output z);

  

     parameter [1:0] a=0,b=1,c=2,d=3;

  

     reg [1:0] current;

     

     always @( posedge clk )

     begin

             if( rst )

             current = a;

             else

             case ( current )

                a: current=x?b:a;

                b: current=x?b:c;

                c: current=x?d:a;

               d: current=x?b:c;

                 default: current=a;

                endcase

     end

     assign z = (current==d)?1'b1:1'b0;

       endmodule

/*************************************************************************/

1. 测试数据

如下代码是 moore_detector 模块的测试平台,与前面类似,测试平台是一个没有输入输出端口的模块。这个模块有 4 个过程块用于生成待测状态机的测试数据。与例化模块 MUT 的输入端相连的变量在过程块里位于赋值语句的左侧,它们的定义为 reg 类型。

/*************************************************************************/

       module test_moore_detector;

              reg x,reset,clock;

              wire z;

      

              Moore_detector MUT(x,reset,clock,z);

      

              initial

                     begin

                     clock=1'b0;

                         x=1'b0;

                         reset=1'b1;

                     end

              initial

                     #24 reset=1'b0;

              always #5 clock=~clock;

              always #7 x=~x;

       endmodule

/*************************************************************************/

    通常不是在声明 reg 类型变量时对其进行初始化,而是采用 initial 块对其进行初始化。初始化变量很重要,特别是对 clock 这种需要利用它前一时刻的值来计算当前时刻的值的变量,若不对其进行初始化,它的初始值为不确定状态,并将一直保持为该状态。

2. 对仿真的控制

下面代码描述了 moore_detector 模块的另一种测试平台。上一节介绍的测试平台,如果不中断它或停止它,它会一直运行,而下面描述的测试平台解决了这个问题,它加入另一个 initial 块,使仿真在 189ms 时停止。

/*************************************************************************/

       // $stop 仿真控制任务的测试平台

       module test_moore_detector;

              reg x=0,reset=1,clock=0;

              wire z;

      

              Moore_detector MUT(x,reset,clock,z);

      

              initial

                     #24 reset=1'b0;

              always #5 clock=~clock;

              always #7 x=~x;

              initial

                     #189 $stop;

       endmodule

/*************************************************************************/

$stop $finish 是仿真控制任务。当过程块运行到此类任务时,仿真暂停或结束。暂停的仿真可以继续运行,而结束的仿真则不能。仿真波形如下图。


下面是 moore_detector 模块的第三种测试平台,它把 reset 信号无效和仿真控制任务放在同一个 initial 块里,在这种时序下,仿真在 189ns 时刻停止。

/*************************************************************************/

       // $finish 仿真控制任务的测试平台

       module test_moore_detector;

              reg x=0,reset=1,clock=0;

              wire z;

      

              Moore_detector MUT(x,reset,clock,z);

      

              initial

                  begin

                     #24 reset=1'b0;

                     #165 $finish;

                  end

              always #5 clock=~clock;

              always #7 x=~x;

 

       endmodule

/*************************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值