色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > FPGA仿真方法介紹及其仿真程序設(shè)計

          FPGA仿真方法介紹及其仿真程序設(shè)計

          作者: 時間:2012-03-15 來源:網(wǎng)絡(luò) 收藏

          一、概述



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

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

          二、仿真程序的設(shè)計

          1 仿真的三個階段

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

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

          (3)門級仿真:門級電路的仿真主要是驗證系統(tǒng)的工作速度,慣性延時僅僅是仿真的時候有用在綜合的時候?qū)⒈缓雎浴?br />
          2 仿真程序的內(nèi)容

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

          3 仿真要注意的地方

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

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

          (4)為了比較和分析電子系統(tǒng)的功能,尋求實現(xiàn)指標(biāo)的最佳結(jié)構(gòu),往往利用一個測試平臺對實體的不同結(jié)構(gòu)進(jìn)行仿真,一般是應(yīng)用配置語句為同一被測實體選用多個結(jié)構(gòu)體。

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

          4 VHDL仿真程序結(jié)構(gòu)

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

          (1)產(chǎn)生時鐘信號

          -- 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)提供仿真信號

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

          絕對時間仿真:

          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)顯示結(jié)果

          VHDL提供標(biāo)準(zhǔn)的std_textio函數(shù)包把輸入輸出結(jié)果顯示在終端上。

          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建立測試程序

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

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

          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://cafeforensic.com/article/190646.htm


          關(guān)鍵詞: FPGA 仿真 方法 程序設(shè)計

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉