FPGA電路
在附圖一的FPGA電路中,列舉其中功能比較重要者說(shuō)明如下: ●主電路:這是完整的數據路徑----從微控制器總線(xiàn)到可共享的參數/地址映像內存、到DRAM/IDE總線(xiàn)。它包含了微控制器能夠存取的所有外部緩存器、事件偵測(event detection)和移動(dòng)請求位(action request bits)。外部緩存器組是位于DRAM內,執行各種特定的任務(wù);當關(guān)機時(shí),這些緩存器將會(huì )消失。事件偵測、移動(dòng)請求位都是為了讓微控制器得知目前的狀態(tài),并采取適當的移動(dòng)、或執行特定的韌體程序。
●控制用的狀態(tài)機:負責接收各種移動(dòng)請求位,并使所有的控制線(xiàn)生效(assert),最后導致數據移動(dòng)。它是一種簡(jiǎn)單的,但大型的狀態(tài)機;平時(shí)它處于閑置和等待的狀態(tài),直到要采取移動(dòng)。所有的狀態(tài)是采用S_state_#的方式命名的。OR閘在適當的狀態(tài)下,會(huì )使正確的控制訊號生效,如附圖二所示。這個(gè)電路也包含了「優(yōu)先級編碼器(priority encoder)」。在閑置狀態(tài)時(shí),若擱置了許多個(gè)請求,則優(yōu)先級編碼器可以決定哪一個(gè)要先執行。這種電路雖然有點(diǎn)復雜,但是它使用「一熱(one-hot)」的簡(jiǎn)單概念。所謂「一熱」是指每一個(gè)狀態(tài)是使用一個(gè)正反器(flip-flop)實(shí)現的,在每一個(gè)狀態(tài)下,只有一個(gè)正反器是處于高值,其余都是低值,而且「熱位(hot bit)」會(huì )一直移動(dòng),直到回到閑置狀態(tài)。在DMA路徑上,具有一個(gè)正反器(也可以省略不用),當結束DMA作業(yè)的條件成立時(shí)(ISZERO),此正反器會(huì )收到「熱位」。所有的控制訊號是由OR閘產(chǎn)生的,只要輸入的狀態(tài)訊號群組中有一個(gè)是高值,OR閘就會(huì )輸出高值(使控制訊號生效)。例如:若(圖二)的OR2的S_RD_IDE_1或S_WR_IDE_1為高值,則IDE_ADDR的輸出也會(huì )是高值,因此IDE_ADDR生效了。不過(guò),有一些對時(shí)間要求很?chē)栏竦模╰iming critical)訊號,并不是使用OR閘產(chǎn)生的,它們是使用建立/重置(set/reset)緩存器產(chǎn)生的。建立/重置緩存器的功效和OR閘一樣,但是沒(méi)有延遲。
微控制器總線(xiàn)MOVX偵測 傾聽(tīng)微控制器總線(xiàn),當沒(méi)有MOVX指令要執行時(shí),使DMA_OK訊號生效。當DMA_OK未生效時(shí),優(yōu)先級編碼器不會(huì )讓任何非CPU的硬件單元存取DRAM。所以,它對微控制器的讀取和寫(xiě)入請求是立即響應的,不會(huì )有延遲發(fā)生。這對8051微控制器而言,是很重要的,因為8051沒(méi)有等待狀態(tài)。如果有偵測到一個(gè)MOVX作業(yè)碼,但是MOVX沒(méi)有被執行,一個(gè)31周期的定時(shí)器可以使DMA_OK再次生效。
■微控制器的地址譯碼 這些訊號生效后,可以使外部緩存器在微控制器的內存映像區域內使用。通常,這是將地址排線(xiàn)和REG_RD訊號或REG_WR訊號AND在一起;REG_RD和REG_WR訊號是由狀態(tài)機產(chǎn)生的。
■DRAM/IDE地址多任務(wù)器(mux) 在DRAM的行列式地址位(address bits)、IDE的地址位(來(lái)自于微控制器)之間,做DRAM/IDE地址腳位的切換;或為零,當執行IDE DMA的直接傳輸作業(yè)時(shí)(類(lèi)似PIO)。
■MP3輸出位移緩存器(shift register) 這是16位的位移緩存器,它從IDE接口得到一個(gè)16位的字組(word),并以位移的方式將此字組送至 MP3譯碼器。
■MP3位計數器 計算位移緩存器送至MP3譯碼器的位數目。當所有的16位都被移出時(shí),會(huì )產(chǎn)生一個(gè)訊號,此時(shí),位移緩存器準備供給STA013 DMA使用,以繼續從DRAM中讀取和傳送下一個(gè)字組。
■DRAM的重清(refresh)時(shí)脈 這個(gè)電路會(huì )每15.2 ?s 產(chǎn)生一個(gè)脈沖,要求狀態(tài)機執行一個(gè)DRAM重清周期。此脈沖會(huì )在主電路內,建立一個(gè)請求旗標,當總線(xiàn)可以使用時(shí),狀態(tài)機會(huì )開(kāi)始執行重清作業(yè),而且優(yōu)先等級比較高的請求不會(huì )被擱置。
■DRAM/IDE地址緩沖器(buffer) 保存地址,這些地址是用來(lái)驅動(dòng)DRAM和IDE接口。
■32-byte的SRAM內存 使用兩個(gè)16×16寬度的DRAM內存,將它們虛擬成具有地址或數據鎖定(latch)功能的SRAM。其中一個(gè)保存DRAM的分頁(yè)(page)號碼,這些分頁(yè)是映像至微控制器的地址空間0xFF00至0xFF1F的區域(DRAM_PAGE_CFG緩存器),它們和微控制器的12個(gè)地址位一起被送至DRAM/IDE地址多任務(wù)器,最后可以為DRAM的讀寫(xiě)作業(yè),產(chǎn)生一個(gè)唯一的地址。第二個(gè)SRAM負責保存DMA的參數值(在0xFF20至0xFF3F的區域內)。微控制器的外部?jì)却妫―RAM)空間映像如附(表一)所示。 ■地址映像內存的寫(xiě)入功能生效 允許對地址映像內存進(jìn)行寫(xiě)入作業(yè)。不過(guò),它只允許微控制器在0xFF00至0xFF1F的內存區域寫(xiě)入數據。
■DMA參數內存的寫(xiě)入功能生效 允許對DMA參數內存進(jìn)行寫(xiě)入作業(yè)。微控制器能寫(xiě)入這些參數,而且,這些參數也可以被狀態(tài)機更新,例如:在進(jìn)行DMA傳輸作業(yè)時(shí),狀態(tài)機可以改變它們。
■16位的遞增/遞減電路 在進(jìn)行DMA傳輸作業(yè)時(shí),16位的遞增/遞減可以用來(lái)更新參數值。遞增電路是為了計算DRAM的目標地址,遞減電路是為了計算字組。DMA參數內存的輸出值會(huì )被送至此電路中,而且也會(huì )被送至16個(gè)多任務(wù)器中,以允許DMA參數被轉譯成地址,就好像它們來(lái)自于微控制器的地址總線(xiàn)(address bus)一樣。
■零、壹和奇數值檢測器 當DMA參數值被改變時(shí),這個(gè)電路能夠立即得知;如果DMA參數值是零、壹或奇數地址,這個(gè)電路也能夠通知狀態(tài)機。當DMA參數值是零時(shí),狀態(tài)機會(huì )清除DMA的請求旗標,以終止DMA作業(yè),并將「完成DMA傳輸」的中斷旗標設為1。
■微控制器的「地址鎖定致能(address latch enable;ALE)」訊號之同步 能使微控制器的ALE訊號和FPGA 的時(shí)脈同步。微控制器的其它控制訊號也是采用類(lèi)似的同步機制,但是它們位于主電路中。
■2:1多任務(wù)器/4位 此電路允許在每32 byte內存內的地址,可以被內存的一般功能控制,或被微控制器的總線(xiàn)控制(當韌體從這些緩存器中讀出或寫(xiě)入,來(lái)改變地址映像或建立DMA傳輸時(shí))。
■2:1多任務(wù)器/8位 它被使用在IDE區塊內。它允許從微控制器的數據區域中,將數據加載至輸出緩沖器內。
■2:1多任務(wù)器/16位 當執行一個(gè)DMA周期時(shí),利用這個(gè)電路,可以從微控制器的地址總線(xiàn)(一般作業(yè)),切換成DMA參數內存的地址總線(xiàn)。
■2:1多任務(wù)器/16位 利用這個(gè)電路可以選擇DMA參數內存的輸入值;它是在更新的DMA參數(在一個(gè)DMA周期內)和微控制器的數據總線(xiàn)(當微控制器寫(xiě)入DMA設定值)之間做切換。單獨設計這個(gè)16位的多任務(wù)器,是因為FPGA開(kāi)發(fā)工具的「可設定的邏輯區塊(configurable logic block;CLB)」之映像,無(wú)法將額外的邏輯閘納入上列的那些2:1多任務(wù)器內(如此會(huì )浪費8個(gè)CLB,并在重要的時(shí)序路徑上,增加額外的延遲時(shí)間),除非邏輯閘是在同一個(gè)電路設計圖內。
■16至8位總線(xiàn),三態(tài)(tri-state)緩沖器 此三態(tài)緩沖器允許一個(gè)16位總線(xiàn)的任一半字節(8 bit)去驅動(dòng)一個(gè)8位總線(xiàn)。它可以讓微控制器從寬16位的內存中讀取數據。
■8至16位總線(xiàn)緩沖器 連接兩個(gè)8位的總線(xiàn)成為一個(gè)16位總線(xiàn)(但FPGA開(kāi)發(fā)工具并不會(huì )因此混淆)。
■8至16位總線(xiàn)緩沖器 連接一個(gè)8位的總線(xiàn)兩次,成為一個(gè)16位總線(xiàn)(但FPGA開(kāi)發(fā)工具并不會(huì )因此混淆)。此16位總線(xiàn)的任一半字節都是來(lái)自于此8位總線(xiàn),如附(圖三)。 ■8位緩存器 一個(gè)8位緩存器,用來(lái)收集微控制器的地址位。
此外,由于不同的FPGA開(kāi)發(fā)工具的性能差異,可能還需要: ●數個(gè)具有不同位數(例如:5至9位)的位移緩存器:它們在狀態(tài)機中使用??梢员苊庖驗樵谕浑娐吩O計圖內具有太多的符號,而使FPGA開(kāi)發(fā)工具當機。 ●正反器(在CLB中):這是唯一的CLB正反器,以一個(gè)比在FPGA開(kāi)發(fā)鏈接庫(library)中還要小的符號來(lái)重設計。 ●正反器(在IOB中):這是唯一的「I/O區塊(IOB)」正反器,以一個(gè)比在FPGA開(kāi)發(fā)鏈接庫(library)中還要小的符號來(lái)重設計。
FPGA電路算是此MP3播放機系統中,比較復雜的一部份,一般的OEM/ODM可以指定規格委外設計。另一個(gè)OEM/ODM廠(chǎng)商必須注意的是韌體的設計;或許韌體也可以委外設計,但是他們必須懂得如何使用底層韌體(匯編語(yǔ)言)所提供的應用程序接口(API),來(lái)設計上層的使用者程序(C語(yǔ)言程序)。
|
評論