• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > EDA/PCB > 設計應用 > FPGA仿真方法介紹及其仿真程序設計

    FPGA仿真方法介紹及其仿真程序設計

    作者: 時間:2012-03-15 來源:網絡 收藏

    一、概述



    (1)交互式:利用EDA工具的器進行仿真,使用方便,但輸入輸出不便于記錄規檔,當輸入量較多時不便于觀察和比較。

    (2)測試平臺法:為設計模塊專門設計的仿真程序,可以實現對被測模塊自動輸入測試矢量,并通過波形輸出文件記錄輸出,便于將仿真結果記錄歸檔和比較。

    二、仿真程序的設計

    1 仿真的三個階段

    (1)行為仿真:目的是驗證系統的數學模型和行為是否正確,對系統的描述的抽象程度較高。在行為仿真時,VHDL的語法語句都可以執行。

    (2)RTL仿真:目的是使被仿真模塊符合邏輯綜合工具的要求,使其能生成門級邏輯電路。在RTL仿真時,不能使用VHDL中一些不可綜合和難以綜合的語句和數據類型。該級仿真不考慮慣性延時,但要仿真傳輸延時。

    (3)門級仿真:門級電路的仿真主要是驗證系統的工作速度,慣性延時僅僅是仿真的時候有用在綜合的時候將被忽略。

    2 仿真程序的內容

    (1)被測實體的引入。
    (2)被測實體仿真信號的輸入。
    (3)被測實體工作狀態的激活。
    (4)被測實體信號的輸出
    (5)被測實體功能仿真的結果比較,并給出辨別信息
    (6)被測實體的仿真波形比較處理

    3 仿真要注意的地方

    (1)仿真信號可以由程序直接產生,也可以用TEXTIO文件產生后讀入。

    (2)仿真程序中可以簡化實體描述,省略有關端口的描述。仿真程序實體描述的簡化形式為:
    ENTITY 測試平臺名 IS
    END 測試平臺名;
    (3)對于功能仿真結果的判斷,可以用斷言語句(ASSORT)描述。

    (4)為了比較和分析電子系統的功能,尋求實現指標的最佳結構,往往利用一個測試平臺對實體的不同結構進行仿真,一般是應用配置語句為同一被測實體選用多個結構體。

    CONFIGURATION 測試平臺名 OF 被測實體名 IS
    FOR 被測實體的A的結構體名
    END FOR;
    END 測試平臺名;
    同樣,若選用結構體B,則配置語句可寫為:
    CONFIGURATION 測試平臺名 OF 被測實體名 IS
    FOR 被測實體的B的結構體名
    END FOR;
    END 測試平臺名;

    4 VHDL仿真程序結構

    測試平臺僅僅是用于仿真,因此可以利用所有的行為描述語言進行描述,下表表示了一個測試平臺所包含的部分,典型的測試平臺將包括測試結果和錯誤報告結果。

    (1)產生時鐘信號

    -- Declare a clock period constant.
    Constant ClockPeriod : TIME := 10 ns;
    -- Clock Generation method 1:
    Clock = not Clock after ClockPeriod / 2;
    -- Clock Generation method 2:
    GENERATE CLOCK: process
    begin
    wait for (ClockPeriod / 2)
    Clock = ’1’;
    wait for (ClockPeriod / 2)
    Clock = ’0’;
    end process;

    (2)提供仿真信號

    提供仿真信號可以有兩種方法:絕對時間仿真和相對時間仿真。在絕對時間仿真方法中,仿真時間只是相對于零時刻的仿真時間。在相對時間仿真方法中,仿真的時間首先提供一個初值,在后繼的時間設置中相對于該初始時間進行事件動作。

    絕對時間仿真:

    MainStimulus: process begin
    Reset = ’1’;
    Load = ’0’;
    Count_UpDn = ’0’;
    wait for 100 ns;
    Reset = ’0’;
    wait for 20 ns;
    Load = ’1’;
    wait for 20 ns;
    Count_UpDn = ’1’;
    end process;
    相對時間仿真:
    Process (Clock)
    Begin
    If rising_edge(Clock) then
    TB_Count = TB_Count + 1;
    end if;
    end process;
    SecondStimulus: process begin
    if (TB_Count = 5) then
    Reset = ’1’;
    Load = ’0’;
    Count_UpDn = ’0’;
    Else
    Reset = ’0’;
    Load = ‘1’;
    Count_UpDn = ‘1’;
    end process;
    FinalStimulus: process begin
    if (Count = 1100) then
    Count_UpDn = '0';
    report Terminal Count
    Reached, now counting down.
    end if;
    end process;

    (3)顯示結果

    VHDL提供標準的std_textio函數包把輸入輸出結果顯示在終端上。

    5 簡單的仿真程序

    library IEEE;
    use IEEE.std_logic_1164.all;
    entity testbench is
    end entity testbench;
    architecture test_reg of testbench
    component shift_reg is
    port (clock : in std_logic;
    reset : in std_logic;
    load : in std_logic;
    sel : in std_logic_vector(1 downto 0);
    data : in std_logic_vector(4 downto 0);
    shiftreg : out std_logic_vector(4 downto 0));
    end component;
    signal clock, reset, load: std_logic;
    signal shiftreg, data: std_logic_vector(4 downto 0);
    signal sel: std_logic_vector(1 downto 0);
    constant ClockPeriod : TIME := 50 ns;
    begin
    UUT : shift_reg port map (clock => clock, reset => reset,
    load => load, data => data,
    shiftreg => shiftreg);
    process begin
    clock = not clock after (ClockPeriod / 2);
    end process;
    process begin
    reset = ’1’;
    data = 00000;
    load = ’0’;
    set = 00;
    wait for 200 ns;
    reset = ’0’;
    load = ’1’;
    wait for 200 ns;
    data = 00001;
    wait for 100 ns;
    sel = 01;
    load = ’0’;
    wait for 200 ns;
    sel = 10;
    wait for 1000 ns;
    end process;
    end architecture test_reg;

    6 TEXTIO建立測試程序

    在由仿真程序直接產生輸入信號的方法中,測試矢量是仿真程序的一個部分,如果系統比較復雜,測試矢量的數目非常大,修改測試矢量時就必須修改程序,重新編譯和仿真。工作量大。因此,在測試矢量非常大的時候可以用TEXTIO的方法來進行仿真。

    TEXTIO仿真方法:測試矢量從仿真程序中分離出來,單獨存于一個文件中(即TEXTIO文件),在仿真時,根據定時要求按行讀出,并賦予相應的輸入信號。這種方法允許采用同一個測試平臺,通過不同的測試矢量文件進行不同的仿真。值得注意的是,測試矢量文件的讀取,需要利用TEXTIO程序包的功能。在TEXTIO程序包中,包含有對文本文件進行讀寫的過程和函數。

    LIBRARY IEEE;
    USE IEEE.std_logic_1164.all;
    LIBRARY ieee;
    USE IEEE.STD_LOGIC_TEXTIO.ALL;
    USE STD.TEXTIO.ALL;
    ENTITY testbench IS
    END testbench;
    ARCHITECTURE testbench_arch OF testbench IS
    COMPONENT stopwatch

    本文引用地址:http://www.czjhyjcfj.com/article/190646.htm


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 东乌珠穆沁旗| 宜宾市| 西昌市| 广汉市| 科技| 蛟河市| 巴林右旗| 滦平县| 绥化市| 赫章县| 鸡西市| 南阳市| 镇雄县| 绥阳县| 鄢陵县| 麻城市| 桃江县| 嘉鱼县| 沧州市| 区。| 崇义县| 枞阳县| 大新县| 建宁县| 郁南县| 康定县| 日土县| 手游| 吉安县| 若尔盖县| 英超| 灵丘县| 庄浪县| 建水县| 永兴县| 门头沟区| 荔浦县| 富蕴县| 平阳县| 鄂州市| 墨江|