ISE-testbench實例

本文介紹在ISE開發環境下,由兩個16bit加法器構成的、可以完成4個16bit輸入的18bit輸出加法器。

IP核

IP Core就是預先設計好、經過嚴格測試和優化過的電路功能模塊,如乘法器、FIR濾波器、PCI接口等,並且一般採用參數可配置的結構,方便用戶根據實際情況來調用這些模塊。隨着FPGA規模的增加,使用IP core完成設計成爲發展趨勢。

IP Core生成器(Core Generator)是Xilinx FPGA設計中的一個重要設計工具,提供了大量成熟的、高效的IP Core爲用戶所用,涵蓋了汽車工業、基本單元、通信和網絡、數字信號處理、FPGA特點和設計、數學函數、記憶和存儲單元、標準總線接口等8大類。

IP核生成器的使用

在這裏,我們使用ISE提供的IP Core生成器創建3個加法器IP Core。包含2個16bit 2輸入加法器與1個17bit 2輸入加法器。

點擊工程器件,右鍵新建源文件。選擇IP Core,填寫基本信息後,在IP Core目錄中選擇Math Function->Adders Subtracter

填寫基本的IP Core屬性。16bit輸入的加法器,輸出時17bit;同理17bit輸入、輸出時18bit。

IP Core在綜合時被認爲是黑盒子,綜合器不對IP Core做任何編譯。IP Core的仿真主要是運用Core Generator的仿真模型來完成的,會自動生成擴展名爲.v的源代碼文件。設計人員只需要從該源文件中查看其端口聲明,將其作爲一個普通的子程序進行調用即可。

邏輯生成

`timescale 1ns / 1ps
module add(
    input clk,
    input [15:0] a1,
    input [15:0] a2,
    input [15:0] b1,
    input [15:0] b2,
    output [17:0] c
    );
wire [16:0] ab1,ab2;

adder adder16_1(
    .a(a1),
    .b(a2),
    .s(ab1),
    .clk(clk));

adder adder16_2(
    .a(b1),
    .b(b2),
    .s(ab2),
    .clk(clk));

adder17 adder7(
    .a(ab1),
    .b(ab2),
    .s(c),
    .clk(clk));
endmodule

這裏定義了兩個wire類型變量存儲16bit輸入的加法器輸出結果,同時作爲17bit加法器的輸入。

上圖是RTL級結構。

TestBench文件編寫

`timescale 1ns / 1ps
module ttt;

    // Inputs
    reg clk;
    reg [15:0] a1;
    reg [15:0] a2;
    reg [15:0] b1;
    reg [15:0] b2;

    // Outputs
    wire [17:0] c;

    // Instantiate the Unit Under Test (UUT)
    add uut (
        .clk(clk), 
        .a1(a1), 
        .a2(a2), 
        .b1(b1), 
        .b2(b2), 
        .c(c)
    );

    initial begin
        // Initialize Inputs
        clk = 0;
        a1 = 0;
        a2 = 0;
        b1 = 0;
        b2 = 0;

        // Wait 100 ns for global reset to finish
        #100;

        // Add stimulus here
        forever begin
            #5;
            clk=~clk;
            if(clk==1)begin
                a1=a1+1;
                a2=a2+1;
                b1=b1+1;
                b2=b2+1;
            end
        end
    end
endmodule

上面設置的激勵規定了輸入初始值全爲0,同時每隔10ns,4個模塊15bit變量輸入值加1。在仿真中可以看到仿真結果,由於每一級都會產生一個時鐘週期的延遲,最終會有2個時鐘週期的延遲。

Tips

要注意的是,在IP Core創建的時候,一定要確保所有輸入端口都有用到。我剛開始生成的時候,多選擇了C_in輸入,導致在綜合是由Warn提醒,同時在測試時,輸出仿真失敗,顯示紅色警告。18bit的輸出結果最低2bit一直是xx.這裏一定要注意。對於FPGA仿真而言,每一個值都應該有初始值設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章