在當今商業競爭日益加強的環境中,產品是否便于現場升級和是否便于靈活運用,成為商家迅速占領市場的關鍵因素。在這種背景下,Alter公司開發的基于SRAM LUT結構的FPGA器件得到了廣泛應用。 現場可編程門陣列FPGA(Field Programmable Gate Array)是一種高密度可編程邏輯器件,其邏輯功能是通過把設計生成的數據文件配置進芯片內部的靜態配置數據存儲器(SRAM)來實現的,具有可重復編程性,可以靈活實現各種邏輯功能。由于SRAM的易失性,每次系統上電時必須重新配置數據,即ICR(In-Circuit Reconfigurability)。只有在數據配置正確的情況下,系統才能正常工作。因此需要外接ROM保存其配置數據。FPGA的配置是有時序要求的,如果FPGA本身不能控制配置時序,就需要外部配置器件來進行時序控制。以Altera公司的FPGA為例,因其本身不能控制時序,就有專用的EPC系列配置器件供其使用。在嵌入式系統中,因為含有微處理器,可以使用微處理器產生配置時序,將保存在系統ROM中的配置數據存儲到FPGA中。所以沒有必要使用專用的EPC系列配置器件來配置FPGA。這樣不僅節約了成本,還有效地縮小了系統體積。本文重點討論在嵌入式系統中FPGA的配置方案。 2. FPGA器件的配置方式 Altera公司生產的具有ICR功能的FPGA器件有FLEX6000、FLEX10K、APEX和ACEX等系列,它們可以用以下方式進行配置: 1. 使用專用EPC配置器件,如EPC16、EPC8、EPC2、EPC1; 2. 被動串行方式(PS),使用微處理器的串行接口; 3. 被動并行同步方式(PPS),使用微處理器的并行同步接口; 4. 被動并行異步方式(PPA),使用微處理器的并行異步接口; 5. 邊界掃描方式(JTAG),使用JTAG下載電纜。 下面詳細分析上述五種配置方式。 使用EPC配置器件時,首先將配置文件從計算機下載到EPC配置器件中去,然后由EPC配置器件控制配置時序對FPGA進行配置。EPC配置器件有一次可編程和可擦寫編程型兩種:一次可編程型芯片只能寫入一次,不適于開發階段反復調試、修改及產品的方便升級;可擦除編程型價格昂貴,且容量有限,對于容量較大的可編程邏輯器件,需要多片配置芯片組成菊花鏈進行配置,增加了系統設計的難度。 使用PS、PPS、PPA方式配置時,配置文件事先是以二進制形式保存在系統ROM中,然后通過微處理器將配置數據送進FPGA中。PS是通過串行方式送到FPGA中,PPS是以并行方式送給FPGA。FPGA在其內部將并行數據轉換成串行數據,該數據轉換時需要外部配置時鐘的驅動。比較PS和PPS,所用的配置時間幾乎相同,而PS的接口方式比較簡單,所以嵌入式系統中通常選擇PS方式配置FPGA。使用PPA方式配置數據時,微處理器將配置數據以并行方式送給FPAG,然后在FPGA內部進行數據串行化處理。與PPS不一樣的地方是串行化處理時不需要配置外部時鐘的驅動,但接口更復雜,工程中很少使用。 邊界掃描方式需要連接計算機,無法在現場使用,嵌入式系統中很少采用這種方式。 通過上述的分析,在嵌入式系統中要使用FPGA時,可以采用專用EPC配置器件、PS、PPS、PPA,但是PS、PPS、PPA比專用EPC配置更具成本和體積優勢。在PS、PPS、PPA中,PS又是最優的通信方式。所以在嵌入式系統中,通常選擇PS被動串行方式來配置FPGA。 3. 嵌入式系統中FPGA的配置電路設計 3.1. PS方式配置時序 在嵌入式系統中,微處理器可以產生配置時序,能夠和FPGA直接通信,將ROM中的配置文件傳輸到FPGA的SRAM中去。通常使用PS被動串行方式進行配置FPGA,下面就通信中使用到的五根信號線的配置時序進行說明。 五根信號線分別為nCONFIG、nSTATUS、CONF_DONE、DCLK、DATA,連接微處理器的五個I/O口和對應的FPGA的引腳。 … 圖1 PS方式配置信號時序圖 微處理器上的五個I/O端口連接上述五個信號線。其中連接nCONFIG、DCLK、DATA端口設置成輸出態,nSTATUS、CONF_DONE端口設置成輸入態。當微處理器開始與FPGA通信時,微處理器首先在nCONFIG上送出一個大于8μm的負脈沖,并且檢測nSTATUS上的信號。當FPGA接收到nCONFIG上的下降沿時,迅速將nSTATUS和CONF_DONE拉低,并且保持低電平信號一直到nCONFIG抬高電平。當nCONFIG上抬高電平后過1μm,nSTATUS也將電平抬高,微處理器檢測到nSTATUS上的變化后認為FPGA已經做好了接收數據的準備。下一步微處理器將產生配置時鐘脈沖,配置時鐘的第一個上升沿至少要比nSTATUS上升沿晚1μm。又由于配置數據和配置時鐘上升沿同步,所以在配置時鐘上升沿發生之前,數據線必須已經有了配置數據信號。配置數據是按照低位在前高位在后的順序把數據送上數據線。當所有數據都傳輸完畢后,CONF_DONE線上電平被抬高以示配置完畢。如果傳輸中出現了異常,FPGA迫使nSTATUS拉低電平,微處理器一旦檢測到了這種現象將重新開始配置。由于配置文件中已經包含了FPGA初始化的一些代碼,所以傳輸完配置文件后,FPGA就可以正常工作了。 3.2 配置電路設計 嵌入式系統中FPGA的PS方式配置方式電路設計如圖2所示。左側的微處理器和FLASH、SDRAM組成了一個最基本的嵌入式系統。FLASH作為程序的存儲器,其中存儲著系統的整個應用程序、配置程序和配置文件。SDRAM作為系統程序運行空間,可以有效地解決微處理器自身SRAM容量小的問題。 4.系統軟件設計 FLASH 中存儲的程序包括系統程序、配置程序、配置文件。系統加電后,微處理器從FLASH的0地址的引導程序開始運行,完成系統初始化后,微處理器將FLASH中的應用程序移至到SDRAM中運行。由于目前嵌入式系統大多采用實時多任務操作系統,所以設計時應將配置程序放置在第一個運行的任務中,保證開機后就開始運行。 軟件設計時根據微處理器與FPGA通信信號線上的時序要求來設計。首先初始化微處理器的端口,在P0引腳上產生一個20μm的負脈沖,讀取P4引腳上的信號,如果是高電平就開始數據準備,將數據讀出,通過位移操作以串行比特流把低位的數據送上P1引腳,通過P2產生一個時鐘上升沿。因為時鐘上升沿與數據傳送是同步的,這樣P1引腳上的信號就傳送到了FPGA。再將讀出的數據右移位,將低位送上P1引腳,在P2上再產生一個時鐘上升沿。如此循環下去,等讀出的一個字節傳送完畢時再讀取下一個字節,按同樣的方式傳送出去。數據傳送的同時檢測P4(nSTATUS)是否為低,如果傳送過程中遇到錯誤,P4將為低,這樣系統需要重新配置。等到把數據傳送完畢后檢測P3引腳的狀態,如果是高電平說明配置成功,如果是低電平則說明配置失敗,系統需要重新配置。 軟件設計語言可以選擇C,也可用匯編。開發過程中根據芯片的硬件本身特點,注意各方面的優化。因為嵌入式系統中從SDRAM中讀取數據的速度很快,所以軟件設計時無須考慮從SDRAM到微處理器的傳輸速度問題。向FPGA器件寫數據時,最低有效位居先。微處理器產生的配置時序可以通過給時序引腳發送高低電平來實現。 5. 結論 當今嵌入式系統已應用到各個領域中,因此無論成本還是體積上的優化,都是很有必要的。用嵌入式系統本身的資源優勢來完成其它部件的專用功能,能夠很有效地達到最優化集成、降低成本的作用。本文討論的通用方案適用于不同的微處理器和Altera公司所有相關系列的FPGA產品。由于FPGA具有可重復配置的功能,所以在嵌入式系統中可預先包含多個不同功能的配置文件,根據現場的需要進行相應的配置。這充分顯示出FPGA現場升級、靈活運用的設計理念。 |