FPGA代碼仿真(功能仿真或者時序仿真)是必不可少的環節,合理的測試代碼架構可以幫助我們快速編寫測試代碼節約測試代碼的編寫時間,本節將自己實際使用的測試代碼最小架構進行整理(見下圖),方便以後改進及使用。
1.待測試代碼
module TaskTest(
input i_clk ,
input i_rst ,
input [7:0] a ,
input [7:0] b ,
output [8:0] c
);
assign c = a + b;
endmodule
2.TestBench代碼
module tb_TaskTest();
reg i_clk ;
reg i_rst ;
reg [7:0] a ;
reg [7:0] b ;
wire [8:0] c ;
/********************************************
Definition parameter
*********************************************/
localparam C_Period = 20 ;//the clock period
/********************************************
Generate i_clk
*********************************************/
always begin
#(C_Period/2)
i_clk = 0;
#(C_Period/2)
i_clk = 1;
end
/********************************************
Main function
*********************************************/
initial begin
/**** Initialization variable ****/
rst;
a = 0;
b = 0;
/**** Main ****/
task0(1,1);
/**** Verify the result ****/
@(posedge i_clk);
if(c == 2)begin
$display("The result is right!!!");
end
else begin
$display("The result is wrong!!!");
end
end
/********************************************
Tasks or Functions
*********************************************/
task rst;
begin
i_rst = 0;
#(C_Period)
i_rst = 1;
end
endtask
task task0;
input [7:0] idata0;
input [7:0] idata1;
begin
@(posedge i_clk);
a = idata0;
b = idata1;
end
endtask
TaskTest TaskTest_inst(
.i_clk (i_clk ),
.i_rst (i_rst ),
.a (a ),
.b (b ),
.c (c )
);
endmodule