当前位置: 首页 > 工具软件 > Bench4Q > 使用案例 >

testbench内容整体框架_1

家浩瀚
2023-12-01

testbench其本质也是一个模块,但是我们把它看成是一个不具有外部接口的模块

  •  testbench模块声明

故开头是

module testbench_comp;    //testbench_comp是testbench声明的模块名称
...
endmodule                //模块结尾标志

使用符号常量parameter声明常数

如声明clock_period来指定clock的周期时间

parameter CLOCK_PERIOD=10;        //声明常量CLOCK_PERIOD的值是10
  • 仿真模块实例化

在实例化要simulation仿真的模块时,要先声明该模块所需要的接口变量。原则是,testbench模块需要更改值,作为输入变量输入到实例化的模块中时,应声明为reg变量,该变量在实例化模块中必须为wire类型。在实例化模块中,作为reg类型,在内部读写寄存器的,在testbench中,应声明为wire类型,可以用于供testbench读值来显示。

原则:寄存器只能由一个过程块进行操作

reg clk;
reg in0,in1;        //reg输入到comp模块中的wire
wire eq,lt,gt;      //comp模块中reg输出为wire          

comp comp_1(.clk(clk),
           .in0(in0),
           .in1(in1),
           .eq(eq),
           .lt(lt),
           .gt(gt));    //按名称进行实例化

//comp模块原型
module comp
(
input clk,
input in0,in1,
output reg eq,lt,gt
    );
  • 设置时序

使用Initial过程块及#num进行延时num ns后进行执行

initial                                
//Initial过程块标志符号,用begin、end来声明initial过程块的边界
begin
clk=0;                                
forever #(CLOCK_PEROID/2) clk=~clk;   
//forever一直循环,#(CLOCK_PEROID/2)延时(CLOCK_PEROID/2)ns后,执行clk=~clk
end

设置实例化模块输入数据时序

initial
begin
    in0=1'b0;
    in1=1'b1;
    
    #100
    in0=1;
    in1=1;
    
    #100
    in0=1;
    in1=0;
    
    #100
    $stop;            //到此处执行中断,simulation仿真停止
end

  • 整体代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/01 15:06:18
// Design Name: 
// Module Name: testbench_comp
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module testbench_comp;
parameter CLOCK_PEROID=10;
reg clk;
reg in0,in1;
wire eq,lt,gt;

comp comp_1(.clk(clk),
           .in0(in0),
           .in1(in1),
           .e_q(eq),
           .lt(lt),
           .gt(gt));

initial
begin
clk=0;
forever #(CLOCK_PEROID/2) clk=~clk;
end

initial
begin
    in0=1'b0;
    in1=1'b1;
    
    #100
    in0=1;
    in1=1;
    
    #100
    in0=1;
    in1=0;
    
    #100
    $stop;
end
endmodule

 类似资料: