1. gzyueqian
      18078865874
      首頁 > 新聞中心 > > 正文

      VHDL語言程序配置EAB的研究

      更新時間: 2007-08-22 17:27:57來源: 粵嵌教育瀏覽量:1517

        摘要: 在FPGA(現場可編程門陣列)的使用中,要將VHDL(甚高速集成電路硬件描述語言)編寫的程序配置到EAB(嵌入式陣列塊)單元中,會遇到許多問題,配置很難成功。根據配置EAB的經驗,詳細介紹了正確配置EAB的方法。

        0 引言
         
        FLEX10K器件是工業界個嵌入式的PLD(可編程邏輯器件),由于其具有高密度、低成本、低功率等特點,成為當今Altera PLD中應用廣泛的器件系列。FLEX10K器件主要由EAB(嵌入式陣列塊)、LAB(邏輯陣列塊)、快速通道線和I/O單元4部分組成。設計輸入(圖形或VHDL(甚高速集成電路硬件描述語言)等)經過編譯后產生的數據格式(網表),大多配置到LAB中。在很多時候,為了提高設計效率、減少LAB的占用等,希望將設計配置到EAB中。要將設計配置到EAB中是一個較為復雜的過程,在這個過程中必須遵守一定的規則,同時,又要對設計的狀態、輸入、輸出
      及信號的傳遞等進行全面分析。根據對EAB配置的經驗,本文將詳細介紹在MAX+Plus II 9.5編譯環境中利用VHDL程序配置EAB的要求及過程。

        1 EAB單元的結構特點
         
        EAB單元是在FLEX10系列FPGA(現場可編程門陣列)內部嵌入一些隨機存儲單元塊,這些隨機單元塊在一定程度上根據電路設計的不同要求,比較靈活地改變電路結構和接口信息,例如可以實現乘法器、RAM、ROM和FIFO等功能。其內部結構見圖1。

        每個EAB單元主要包括數據區、總線和讀寫控制等,其中數據區是EAB的核心。每個EAB單元包含2048 bit的RAM/ROM,可以根據數據線/地址線的不同設置將其調整為1024×2bit、5 12×4bit和256×8 bit。對EAB配置時,總線的位數、讀寫的控制及RAM/ROM的大小,在MAX+Plus II 9.5中是根據用戶的設計,自動調用系統中的兩個參數化的宏函數(IMPL_eab,altrom)來實現的。換句話說,利用VHDL語言設計的程序要配置到EAB中,在設計上必須滿足兩個參數化的宏函數(IMPL_eab,altrom)的參數要求。
       
        2 EAB單元的配置
         
        將設計配置到EAB單元中,分為兩種方式:一種是將設計中調用的標準元件配置到EBA單元中;另一種是將VHDL編寫的程序作為一個獨立的單元配置到EAB中。前一種方式比較簡單,只需要根據菜單命令的要求做適當的設置就可以;后一種方式比較復雜,與不配置到EAB單元中的程序設計相比,在設計中增加了許多要求,在下面的分析中將能夠體會到。

        2.1 標準元件配置到EBA單元中的方法
         
        實現標準元件對EAB的配置比較簡單,其基本過程是:

        a)在設計的層次結構中,選擇要配置的模塊單元(元件);
        b)在菜單Assign中選擇Logic Option命令,打開其對話框;
        c)在對話框中選擇Individuai Logic Options選項,在對話框中選擇Impiement in EAB選項,點擊OK,回到Logic Option對話框中,在Existing Logic Option Assignments框中顯示Impiement in EAB=ON,點擊OK,重新對設計編譯,選定的標準元件模塊被配置到EAB單元中。

        2.2 VHDL程序設計配置到EBA單元中的方法
         
        首先,分析一個4位計數器的VHDL程序設計,設計的程序代碼如下:

        library ieee;
        use ieee.std_logic_1164.all;
        package mytype is
        subtype statej is std_logic_vector(1 downto 0);
        constant jish0:statej:="00";
        constant jishl:statej: "01";
        constant jish2:statej:="10";
        constant jish3:statej:="11";
        end mytype;
        library ieee;
        use ieee.std_logic_1164 .all:
        use work.mytype.all;
        entity jish is
        pert(
        clk:in std_logic;
        out1:out std_logic_vector(1 downto 0));
        end jish;
        architecture shu of jish is
        signal present:statej;
        begin
        if(clk'event and clk=1)then
        case present is
        whenjish0=>
        present<=jishl;
        out1<="00":
        whenjishl=>
        present<=jish2;
        out1<="01";
        when jish2=>
        present<=jish3;
        out1<="10";
        when jish3=>
        present<=jishO;
        out1<="11";
        when others=>present<=jish0;
        out1<= "00";
        end case;
        end if;
        end process;
        end shu;  
         
        該4位計數器的VHDL 程序代碼配置到FLEX10K10LC84中,占據了4個LAB單元,如圖3所示,它不能配置到EAB單元中去。

        為了將該段VHDL代碼配置到EAB單元中去,需要對程序代碼進行改寫。在改寫過程中需要遵循以下3個基本原則:

        將配置到EAB中的設計作為一個獨立的模塊;
        采用層次化設計的方法,其中需配置到EAB單元中的模塊作為低層,設計一個頂層結構實現對它調用;
        在整個設計中需要建立一個從低層到頂層的反饋路徑。
         
        根據這3個原則對上述程序代碼中的設計進行改寫,使其能配置到EAB單元中去。

        a)獨立模塊的建立。就是使模塊具有完全的輸入輸出。在上述程序代碼所示的4位計數器的VHDL程序設計中,從輸入來看,狀態機有4個狀態,需要2bit輸入,它構成了模塊的輸入;從輸出來看,由狀態機的2 bit輸出和OUT1組成模塊的輸出。上述程序代碼改寫后的程序代碼如下:

        library ieee;
        use ieee.std_logic_1164.all;
        package mytype is
        subtype statej is std_logic_vector(1 downto 0);
        constant jish0:statej:="O0";
        constant jishl:statej:="0l";
        constant jish2:statej:="10";
        constant jish3:statej:="11";
        end mytype ;
        library ieee;
        use ieee.std_logic_1164 .all;
        use work.mytype.all;
        entity jishu is
        port(
        clk:in std_logic;
        present:in statej;
        next1:out statej;
        out1:out std_logic_vector(1 downto 0));
        end jishu;
        architecture shu of jishu is
        begin
        process(clk,present)
        begin
        if(clk'event and clk=1) then
        case present is
        whenjishO=>
          next1<=jish1;
          out1<= "O0":
        whenjish1=>
         next1<=jish2;  
          out1<="01":
        whenjish2=>
          next1<=jish3;
          out1<= "10"
        when jish3=>
          next1<=jishO;
          out1<="11":
        when others=>next1<=jish0;
        out1<= "00";
        end case;
        end if;
        end process;
        end shu;

        b)頂層文件的設計,主要實現對底層模塊(4位計數器)的調用,同時建立反饋路徑。其程序代碼如下:

        library ieee;
        use ieee.std_logic_1164.all;
        use work.mytype.all
        entity jishueab is
        port(
         clk:in std_logic;
         out1:out std_logic_vector(1 downto 0));
        end jishueab;
        architecture shueab of jishueab is
        component jishu
        port(
        clk:in std_logic;
        present:in statej;
        nextl:out statej;
        outl:out std_logic_vector(1 downto 0));
        end component;
        signal present1,next2: statej;
        begin
        present1<=next2:
        u1:jishu port map(clk=>,present=>present1,nextl=>next2,out1=>out1);
        end shueab;

        c)EAB單元的配置。建立了獨立模塊(元件)和設計了頂層文件,并對頂層文件編譯之后,程序代碼是不會自動配置到EAB單元中的。為了將4位計數器的VHDL程序設計配置到EAB單元中,還需要標準元件配置到EBA單元中的方法設置配置過程。4位計數器的VHDL程序設計配置到FLEX10K10LC84的EAB單元中的情況如圖4所示。

        為了實現其他VHDL設計配置到EAB單元中,可以通過上述例子舉一反三,完成對EAB單元的配置。

        3 結束語
         
        對EAB的使用不只局限在存儲功能上,它可以用簡單的單級邏輯實現函數的功能,因此具有更高的器件效率和更好的性能。許多復雜的功能都能在一個EAB中實現,占用的器件面積更小,并且比邏輯單元的實現延時更短、速度更快。當然,在設計中應該權衡EAB與LAB的利弊,合理地選擇設計方法。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日本欧美国产中文字幕 | 亚洲天天做夜夜做天天欢人人 | 首页中文字幕中文字幕免费 | 亚洲另类中文字幕 | 亚洲Av每日更新在线观看 | 日韩一级欧美动漫国产在线观看 |