摘要: 在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的利弊,合理地選擇設計方法。