官术网_书友最值得收藏!

1.4 Testbench的概念

除了利用層次化設計思想設計電路的功能模塊外,通常一個完整的Verilog系統設計還應該包括測試模塊。必須對設計進行全面的測試以驗證其功能正確與否,以便在進行芯片生產前及時發現問題并進行修改。在設計數字電路系統時,通常將測試模塊和功能模塊分開設計,其中測試模塊也稱測試臺(Testbench)。Testbench同樣可以用Verilog來描述,這使得系統測試更為容易。

Testbench是通過對設計部分施加激勵,然后檢查其輸出正確與否來完成其驗證功能的。

下面以例1.1的設計為測試目標,來設計一個簡單的Testbench。

【例1.3】為例1.1中的全加器設計Testbench,以驗證其功能。

            // example_1_3: 一個簡單的Testbench
            module tb_fadder ();
                reg  [3:0] A, B;
                reg  Cin;
                wire [3:0] S;
                wire Cout;
                // 通過實例化在Testbench中調用被測對象fadder_4模塊
                fadder_4 u_fadder_4
                (   .i_A(A),
                    .i_B(B),
                    .i_Cin(Cin),
                    .o_S(S),
                    .o_Cout(Cout)
                );
                // 添加激勵
                initial begin
                    #0  A = 4'b0000;              // 激勵信號i_A初始值0
                        B = 4'b0000;              // 激勵信號i_B初始值0
                        Cin = 1'b0;               // 激勵信號i_Cin初始值0
                    #20 A = 4'b1111;              // 20 ns后, i_A值變為15
                    #20 B = 4'b0001;              // 20 ns后, i_B值變為1
                    #20 A = 4'b1110;              // 20 ns后, i_A值變為14
                    #20 Cin = 1'b1;               // 20 ns后, i_Cin值變為1
                    #10 $finish;                  // 結束仿真
                end
                // 調用系統函數$monitor, 監視列表中的參數變化并顯示
                initial
                    $monitor($time, "    A:%d   B:%d   Cin:%d , sum:%d , carry:%d ",
                          A, B, Cin, S, Cout);
            endmodule

Testbench結構如圖1.5所示。測試模塊tb_fadder調用設計模塊fadder_4并實例化為u_fadder_4。tb_fadder模塊中還包含添加激勵和觀察全加器運算結果的模塊,其結構如圖1.6所示。

圖1.5 Testbench結構

圖1.6 tb_fadder結構

圖1.7顯示了A, B, Cin的激勵波形,與例1.3中第一個initial語句描述的行為一致。而從系統函數$monitor中得到的仿真結果如下:

            0     A: 0   B: 0   Cin:0 , sum: 0 , carry:0
            20    A:15   B: 0   Cin:0 , sum:15 , carry:0
            40    A:15   B: 1   Cin:0 , sum: 0 , carry:1
            60    A:14   B: 1   Cin:0 , sum:15 , carry:0
            80    A:14   B: 1   Cin:1 , sum: 0 , carry:1

因為被測模塊是一個4位二進制全加器,所以輸出結果的最大值為十進制的15。若求和結果大于15,將產生一個進位信號。輸出端口S,Cout的波形在圖1.7中已顯示,與系統函數$monitor打印出的結果也是一致的。

圖1.7 Testbench產生的激勵波形及其得到的輸出

主站蜘蛛池模板: 龙江县| 阜新市| 尼木县| 瑞金市| 兴国县| 浦北县| 惠水县| 乾安县| 安多县| 若尔盖县| 牙克石市| 天门市| 建平县| 江门市| 稷山县| 宁海县| 弥渡县| 和平区| 江安县| 华安县| 和硕县| 青铜峡市| 岐山县| 徐闻县| 余庆县| 周宁县| 光泽县| 肇州县| 南开区| 九寨沟县| 阳东县| 平果县| 盱眙县| 湟源县| 云安县| 遂宁市| 申扎县| 哈巴河县| 偃师市| 扶风县| 杂多县|