testbench的简单例子和模板

简单的例子 ///模块/// input clk; input rst_n; input en;

output reg [7:0]data;
always @(posedge clk or negedge rst_n )
if(!rst_n)
    data <= 8d0;
else if(en)
    data <= data + 1b1;
else
    data <= data;

//testbench //待测模块中的input类型 reg clock;时钟输入 reg rst_n;//复位 reg en;//使能 //待测模块中output类型 wire [7:0]data;//数据输入 //时钟产生模块 initial clock=1; always #10 clock= ~clock; //激励信号产生 initial begin rst_n = 1’b0; #20; rst_n = 1’b1; en = 1;//使能信号有效,data<= data+1;数据自加 #1000; en = 0; //使能信号无效,data<=data #500 s t o p ; / / 以 实 现 完 整 信 号 仿 真 要 求 , 使 用 stop;//以实现完整信号仿真要求,使用 stop;//以实现完整信号仿真要求,使用stop结束仿真 end //例化模块,其中XXX必须同模块名 ? 可以自定义 但最好使用模块名 XXX ?(//注意clock要和reg clock 相同 ,如果定义reg clk 那么此时应该用.clk(clk) .clk(clock), .rst_n(rst_n), .en(en), .data(data), );

模板 timescale 1ns/1nsdefine clock_period 20 //定义时钟 module XXX_tb; //input类型 reg … //output 类型 wire … //时钟产生 initial clk =1; always #(clock_period/2) clk = ~clk; //激励产生 initial begin #1;//Difference clock edge rst_n = 1b0; #(clock_period5) //延时几个周期 rst_n = 1’b1; #(clock_period); .... .... #(clock_period2000); $stop;//注意确保延时周期确保信号完整性 end XXX XXX( //全部端口名例化连接 ,注意不要少 “.” … ); endmodule

经验分享 程序员 微信小程序 职场和发展