1. 程式人生 > 其它 >TestBench的功能和編碼原則

TestBench的功能和編碼原則

技術標籤:基礎FPGAVerilogverilogfpga

一.Test Bench 主要功能:
簡單來說就是:
a.通過Verilog程式的行為描述,為待測訊號提供激勵訊號
b.設定理想結果。
c.將輸出結果與理想結果比較,判斷內部功能結構是否正確。

Test Bench 編碼原則(全加器為例子)
全加器Verilog實現程式碼:

`timescale 1ns / 1ps
module add_4b(
    input clk,
    input rst,
    input  [3:0] a,
    input  [3:0] b,
    input cin,
    output reg [
3:0] sum, output reg cout ); [email protected] (posedge clk or negedge rst ) begin if(!rst) sum <= 4'b0; else begin {cout,sum} <= a+b+cin; end end endmodule

TestBench程式碼:

`timescale 1ns / 1ps
module add_4b_tb();
reg clk,rst;
reg [3:0] a;
reg [3:0] b;
reg cin; wire [3:0] sum; wire cout; integer case_num; add_4b add_4b_01( .clk (clk), .a (a), .b (b), .cin (cin), .sum (sum), .cout (cout) ); always begin #5 clk = ~clk; end initial begin clk=1'b0; case_num = 1; rst = 1; a = 4'b1010; b = 4'b0001; cin = 1'b0; #20; if (sum == 4'b1011 && cout == 1'
b0) $display ("[simulation INFO] %2d pass.", case_num); else $display("[simulation ERROR] %2d fall.",case_num); #200;//測試一,驗證無進位輸出。 case_num = 2; a=4'b1000; b=4'b1110; cin = 1'b1; #20 if (sum ==4'd7&&cout == 1'b1) $display ("[simulation INFO] %2d pass.",case_num); else $display("[simulation ERROR] %2d fall",case_num); #200;//測試二,驗證進位輸出 $finish; end endmodule

結果:在這裡插入圖片描述
結果說明:無進位輸出結果,有進位輸出結果。與預想中的一樣。測試成功。

Tb編碼規則:
1.模擬時間標度語句 必須存在

`timescale 1ns / 1ps

模擬中產生50佔空比%方波 #5 clk = ~clk;
時間延時 #200;#20;
都是基於這個時間標度進行的。

2.整個程式仍在“module_endmodule”中,不必寫出埠描述。
直接module add_4b_tb(); 即可。
3.為 輸入訊號 定義的 激勵 必須用reg
4.為 輸出訊號 定義的 激勵 必須用wire

然後就是驗證思路的設計了。
比如驗證4位全加器, (無進位) 就設定 a=1010 b=0001;
比較理想輸出1011 = 實際輸出 即可。
(有進位) 同上