韓躍強(qiáng)
摘要:本文對(duì)MCU與FPGA組成系統(tǒng)的結(jié)構(gòu)進(jìn)行了分析,并以ALTERAFPGA的結(jié)構(gòu)為基礎(chǔ),進(jìn)行了總線互連的設(shè)計(jì)。
關(guān)鍵詞:可編程邏輯器件三態(tài)總線FPGA
引言
近年來(lái),隨著可編程邏輯器件的迅速發(fā)展,越來(lái)越多的系統(tǒng)設(shè)計(jì)開(kāi)始采用這種半定制的ASIC(專用集成電路)。PLD(可編程邏輯器件)及整套EDA(電子設(shè)計(jì)自動(dòng)化)工具的使用,為開(kāi)發(fā)人員提供了自上而下設(shè)計(jì)系統(tǒng)的途徑。這種系統(tǒng)可以簡(jiǎn)化系統(tǒng)設(shè)計(jì)、優(yōu)化系統(tǒng)結(jié)構(gòu)與電氣特性、便于系統(tǒng)的調(diào)試與維護(hù)、縮短設(shè)計(jì)周期以及降低成本。尤其是在數(shù)字系統(tǒng)的研制階段或中小批量生產(chǎn)中,上述優(yōu)點(diǎn)更為明顯。
1、FPGA可重構(gòu)系統(tǒng)結(jié)構(gòu)分析
在高速系統(tǒng)中實(shí)現(xiàn)人機(jī)界面以及參數(shù)設(shè)置等非高速操作,往往使用具有良好接口功能的通用MCU(微控制器)來(lái)實(shí)現(xiàn)。因此,這種由MCU和FPGA(FieldProgrammableGateArray)構(gòu)成的系統(tǒng)使用更為廣泛。按照MCU與FPGA之間的相互關(guān)系以及在系統(tǒng)中所起的作用,主要可以分為兩類:MCU控制FPGA工作的系統(tǒng)和MCU協(xié)同F(xiàn)PGA工作的系統(tǒng)。
1.1MCU控制FPGA工作的系統(tǒng)
這類系統(tǒng)采用MCU作為系統(tǒng)的主要控制器件,在FPGA中實(shí)現(xiàn)控制器的外設(shè)電路功能。實(shí)質(zhì)上,這是傳統(tǒng)MCU控制系統(tǒng)的繼承發(fā)展,它把各個(gè)分立的外部設(shè)備與接口,根據(jù)系統(tǒng)需要,在FPGA中定制實(shí)現(xiàn)。比如在FPGA中實(shí)現(xiàn)SRAM(靜態(tài)隨機(jī)存儲(chǔ)器)、鍵盤(pán)與顯示接口以及總線的擴(kuò)展等應(yīng)用。
由于主要控制任務(wù)在MCU上實(shí)現(xiàn),系統(tǒng)邏輯實(shí)現(xiàn)的重點(diǎn)在編制MCU程序上,而FPGA則更多的使用IP(IntellectualProperty)核實(shí)現(xiàn)基本功能模塊。因此,在整個(gè)系統(tǒng)設(shè)計(jì)過(guò)程中,軟件開(kāi)發(fā)所占比重較大。
1.2MCU協(xié)同F(xiàn)PGA工作的系統(tǒng)
這類系統(tǒng)通常以可編程邏輯器件為核心,在其內(nèi)部實(shí)現(xiàn)面向應(yīng)用的邏輯功能,而MCU則占據(jù)次要地位。應(yīng)該說(shuō),這類系統(tǒng)充分利用了可編程邏輯器件和MCU的特點(diǎn),實(shí)現(xiàn)了優(yōu)勢(shì)互補(bǔ)。它主要應(yīng)用在面向應(yīng)用、并行處理以及高速等環(huán)境中。例如,使用高密度的FPGA進(jìn)行高速的多路A/D采樣,經(jīng)內(nèi)部處理模塊處理后,并行輸出結(jié)果,整個(gè)過(guò)程的時(shí)序控制在FPGA內(nèi)部實(shí)現(xiàn);而MCU只負(fù)責(zé)對(duì)FPGA各功能模塊的參數(shù)裝載,發(fā)送啟動(dòng)命令以及監(jiān)控FPGA工作狀態(tài)等任務(wù)。這類系統(tǒng)的開(kāi)發(fā)重點(diǎn)主要在FPGA邏輯功能的硬件實(shí)現(xiàn)上,而MCU的控制軟件就比較簡(jiǎn)單了。
在實(shí)際應(yīng)用中,系統(tǒng)的特點(diǎn)并不像以上兩種類型這么明顯,普遍存在的是兼具以上特點(diǎn)的系統(tǒng),只是所占比重不同而已。
2、MCU結(jié)合可編程邏輯器件系統(tǒng)的互連接口
MCU與可編程邏輯器件互連,有直接連接和總線連接兩種方式。直接連接只需把MCU與FPGA的I/O引腳相連即可。而總線連接可分為單向總線和雙向總線兩種類型。對(duì)于單向總線,實(shí)質(zhì)上是一組以直接方式互連的I/O。而實(shí)現(xiàn)雙向總線,就需要使用可編程邏輯器件的雙向口構(gòu)造三態(tài)總線了。
三態(tài)總線的實(shí)現(xiàn),需要使用三態(tài)緩沖器,實(shí)現(xiàn)高、低電平和高阻三個(gè)狀態(tài)。在FPGA上可有內(nèi)部和外部?jī)煞N三態(tài)總線的實(shí)現(xiàn)方式。
內(nèi)部三態(tài)總線是在器件內(nèi)部的各邏輯部分之間互連的總線。由于不同廠商采用不同的技術(shù),因此內(nèi)部三態(tài)主要有兩種方法實(shí)現(xiàn)。一種是使用三態(tài)門(mén)實(shí)現(xiàn)真實(shí)的三態(tài)總線,這需要器件內(nèi)部具有三態(tài)邏輯支持。比如XILINX公司的FPGA產(chǎn)品,在其內(nèi)部CLB(可編程邏輯塊)中,有三態(tài)緩沖器。另一種是把三態(tài)邏輯轉(zhuǎn)化為MUX(多路選擇器)實(shí)現(xiàn),這樣內(nèi)部邏輯不需要三態(tài)門(mén)的支持。這種器件以ALTERA公司的FPGA為代表。雖然這一方法是模擬三態(tài)邏輯,但是具有降低成本和消除信號(hào)競(jìng)爭(zhēng)的特點(diǎn)。
外部三態(tài)總線是器件在端口上實(shí)現(xiàn)的,用來(lái)與其它芯片互連,這對(duì)于大量的系統(tǒng)設(shè)計(jì)是必須的。因此,所有的可編程邏輯器件都在I/O端口上實(shí)現(xiàn)了真實(shí)的三態(tài)緩沖。同時(shí),由于大量雙向總線的存在,所以三態(tài)總線往往與雙向端口聯(lián)系在一起,形成雙向的三態(tài)總線。
在含F(xiàn)PGA的MCU系統(tǒng)中,F(xiàn)PGA通過(guò)外部三態(tài)總線與MCU的總線端口互連。而且,一片F(xiàn)PGA通常實(shí)現(xiàn)多個(gè)功能模塊,所以內(nèi)部三態(tài)總線是外部系統(tǒng)總線在FPGA器件內(nèi)部的延伸。因此,外部和內(nèi)部的三態(tài)總線共同構(gòu)成了連接MCU與FPGA的系統(tǒng)總線。本文以ALTERA公司的CYCLONE系列器件為例,來(lái)闡述雙向三態(tài)總線的設(shè)計(jì)方法。
ALTERA公司的ACEX1K系列器件是2003年推出的面向低成本、高容量以及低功耗等網(wǎng)絡(luò)通信及控制應(yīng)用的中密度可編程器件。它依然采用了ALTERA傳統(tǒng)的LUT(查找表)結(jié)合EAB(嵌入式陣列塊)結(jié)構(gòu),因此內(nèi)部沒(méi)有三態(tài)緩沖器,而是采用MUX模擬三態(tài)邏輯。這一轉(zhuǎn)換過(guò)程,由QuartusII軟件在編譯時(shí)自動(dòng)完成。
在器件的I/O端口,每個(gè)IOE(輸入輸出元件)都包含一個(gè)I/O緩沖,以及一個(gè)既可做輸入又可做輸出的寄存器。由圖1可見(jiàn),在I/O引腳上實(shí)現(xiàn)了三態(tài)緩沖結(jié)構(gòu)。當(dāng)引腳作雙向口使用時(shí),IOE中的寄存器作為輸出數(shù)據(jù)寄存器連接到三態(tài)門(mén)的輸入端。輸入數(shù)據(jù)和輸出允許寄存器分別使用相鄰LE(邏輯單元,是LAB的組成元素)中的寄存器,即雙向三態(tài)的實(shí)現(xiàn)既使用了IOE,有使用了內(nèi)部邏輯資源。
3、基于ALTERA可編程邏輯器件實(shí)現(xiàn)三態(tài)總線的方法
3.1內(nèi)部三態(tài)總線的實(shí)現(xiàn)
內(nèi)部三態(tài)總線是外部三態(tài)總線在FPGA器件內(nèi)部的延伸,用來(lái)連接可編程邏輯器件片內(nèi)的各功能模塊。
ALTERACYCLONE器件使用MUX代替內(nèi)部三態(tài)總線。使用ALTERA公司的集成編譯環(huán)境QuartusII,在圖形輸入和AHDL語(yǔ)言輸入方式下,可以自動(dòng)進(jìn)行這種轉(zhuǎn)換。例如,下面是采用圖形方式輸入的內(nèi)部三態(tài)邏輯(如圖2),(a)、(b)兩種情況為三態(tài)門(mén)驅(qū)動(dòng)輸出引腳和三態(tài)門(mén)驅(qū)動(dòng)內(nèi)部邏輯。
QuartusII將自動(dòng)進(jìn)行MUX轉(zhuǎn)換(如圖3),分別對(duì)應(yīng)有無(wú)輸出引腳。并且一個(gè)三態(tài)門(mén)只能驅(qū)動(dòng)一個(gè)引腳,這是由器件的硬件結(jié)構(gòu)決定的。可見(jiàn)三態(tài)門(mén)只能在I/O引腳上實(shí)現(xiàn)。
3.2外部三態(tài)總線的實(shí)現(xiàn)
3.2.1與其它芯片相連的外部三態(tài)總線
MCU與FPGA采用總線方式互連,在MCU端有現(xiàn)成的總線接口,而在FPGA端,需要自行設(shè)計(jì)總線端口,即外部總線的實(shí)現(xiàn)就是總線端口的設(shè)計(jì)。此外,總線通常連接多個(gè)設(shè)備,因此需要實(shí)現(xiàn)雙向三態(tài)總線。在ALTERA的FPGA中實(shí)現(xiàn)雙向三態(tài)端口,QuartusII既支持語(yǔ)言方式輸入,又支持圖形方式輸入,分別討論如下。
(1)雙向三態(tài)總線的VHDL語(yǔ)言描述。
下面一段VHDL代碼描述了一個(gè)雙向三態(tài)總線的端口。
這段程序可以作為FPGA器件的對(duì)外端口邏輯模塊。ext_data作為器件對(duì)外部的雙向口,它的輸出實(shí)現(xiàn)了三態(tài),而它的輸入,只要按正確時(shí)序讀取外部信號(hào),是不需要實(shí)現(xiàn)三態(tài)的。輸入口in_data和輸出口out_data是對(duì)FPGA內(nèi)部的接口,這是由于內(nèi)部邏輯不必實(shí)現(xiàn)雙向,所以是輸入和輸出分開(kāi)的。這一點(diǎn)在后面的圖形表示中將更加直觀。
(2)雙向三態(tài)總線的圖形描述。
依然以上述模塊為例,采用QuartusII的圖形方式輸入,利用參數(shù)化模塊庫(kù)(LPM)實(shí)現(xiàn)(如圖4)。這種方法尤為清晰簡(jiǎn)便。
圖中out_data為模塊輸出,實(shí)際對(duì)應(yīng)FPGA的輸入功能,所以與其相連的三態(tài)門(mén)保持常通狀態(tài)以實(shí)現(xiàn)內(nèi)部連接。這也是由于三態(tài)門(mén)不能直接驅(qū)動(dòng)內(nèi)部邏輯決定的。
3.2.2用外部雙向三態(tài)總線實(shí)現(xiàn)內(nèi)部邏輯塊的互連
雖然ALTERA器件不支持內(nèi)部三態(tài),但是通過(guò)上面的圖形描述,啟發(fā)我們通過(guò)引腳上的三態(tài)門(mén)實(shí)現(xiàn)器件內(nèi)部邏輯塊之間的雙向三態(tài)總線互連,當(dāng)然,也可以使用MUX技術(shù)實(shí)現(xiàn)。
圖5為需要實(shí)現(xiàn)的內(nèi)部邏輯互連,但是這種情況在ALTERA的FPGA上無(wú)法實(shí)現(xiàn),需要轉(zhuǎn)換成MUX。而通過(guò)使用兩組雙向引腳,利用I/O口上的三態(tài)門(mén)轉(zhuǎn)化為外部總線,就可以實(shí)現(xiàn)了(如圖6)。需要注意的是,圖6中引腳間的互連需在PCB(PrintedCircuitBoard)板上實(shí)現(xiàn),這里所用的BIDIRC端口只是對(duì)連接進(jìn)行了表示,在FPGA器件內(nèi)部不能實(shí)現(xiàn)。
這種使用I/O端口實(shí)現(xiàn)的內(nèi)部總線可以連接內(nèi)部各個(gè)模塊實(shí)現(xiàn)雙向三態(tài)連接,但是是以占用I/O端口資源為代價(jià)的,所以如無(wú)特別要求,對(duì)內(nèi)部三態(tài)總線應(yīng)采用MUX邏輯實(shí)現(xiàn)。而對(duì)于如與MCU連接的外部雙向三態(tài)端口,可直接使用圖4所示方法實(shí)現(xiàn),F(xiàn)PGA對(duì)外的輸出實(shí)現(xiàn)三態(tài)控制,而輸入不需三態(tài)控制,由內(nèi)部邏輯保證輸入正確性。
4、結(jié)束語(yǔ)
MCU與FPGA相結(jié)合的系統(tǒng),由于其可重構(gòu)、靈活的優(yōu)點(diǎn),十分適合工控系統(tǒng)的應(yīng)用。而總線式系統(tǒng)結(jié)構(gòu)是這一系統(tǒng)的主要特點(diǎn)之一,是實(shí)現(xiàn)系統(tǒng)邏輯功能的基礎(chǔ)結(jié)構(gòu)。
參考文獻(xiàn):
[1]AlteraCorp.ACEXCYCLONEProgrammableLogicDeviceFamilyDataSheet.Ver.1.1,2003.
[2]曾凡泰,陳美金.VHDL程序設(shè)計(jì).北京:人民郵電出版社,2000.
[3]蔣璇.數(shù)字系統(tǒng)設(shè)計(jì)與PLD應(yīng)用技術(shù).北京:電子工業(yè)出版社,2001.