FPGA(Field-Programmable Gate Array),即現場可編程門陣列,這是我們在很多地方都看見的解釋FPGA的名詞,但是到底是現場可編程門陣列呢?何時能用到現場可編程呢?今天我們看看怎么實現FPGA的現場可編程。
先假設一種應用場合:在某個場合中FPGA內部硬件電路需要根據外部條件實時更改,有幾十種甚至上百種FPGA模型選擇。每種模型使用LE都達到上萬個,這時候我們不可能直接把所有電路做在一個工程中,這樣使用的FPGA芯片容量太龐大,非常昂貴,而且電路膠合控制太復雜,這時候我們可以對每種FPGA模型進行分別生成配置文件,當根據實時狀態現場更新FPGA電路。這樣就可以采用小容量的FPGA實現,但是怎么實現現在可編程呢?這時候ALTERA FPGA的PS模式下載和FPP模式下載就有用了。
現在以cycloneIII器件來分析怎么使用PS模式更新FPGA代碼。
首先FPGA下載配置模式應該要選擇PS模式,從數據手冊查到,連接MSEL[3..0]全部到地。即為選擇PS模式下載,並且支持3.3/3.0/2.5的編程電壓。
如下圖所示,為ALTERA官方提供的PS模式下載示意電路:
由圖上可以看出PS模式下載編程文件,只需要5個編程口,分別是:
1.CONF_DONE:編程數據完成指示腳;
2.nSTATUS: 編程狀態指示;
3.DATA[0]: 編程數據;
4.nCONFIG: 編程模式進入腳;
5.DCLK: 編程時鍾腳;(注意:cycloneIII DCLK編程時鍾最高為133Mhz,而cycloneIII LS最高編程時鍾為100Mhz)
編程時序如下:
從上圖可以看出整個編程時序非常簡單,直接輸入數據即可,但是細心的人發現了這里還有個INIT_DONE管腳,當配置文件全部導入FPGA后,FPGA內部編程控制模塊還需要使用編程數據對整個FPGA芯片電路進行修改,因此需要一段時間,如編程時序上的Tcd2um,即為編程模式轉到用戶模式下的延時時長,INIT_DONE即為指示編程完成的管腳。由於Tcd2um在每個器件都是有個時間范圍的,只需要我們在編寫控制時序時延時超過這個值即可,所以也可以省略掉INIT_DONE管腳使用。
如下圖所示即為cycloneIII在配置完成后進入用戶狀態下的時間長短。
可以看出時長在300~650us,因此設置自己控制時序時長在700us即可進行用戶操作。但是某些場合對時間要求非常高,不想白白等待700us,這個時候INIT_DONE即可作為判斷信號,指示初始化完成。
查閱數據手冊得知,INIT_DONE在cycloneIII系列芯片中處於BANK6,並且和IO口處於共用狀態,怎么使用呢?
在Quartues->Assignment->Setting->....如下圖所示,選取上INIT_DONE IO作為編程指示IO即可在編程過程中得到需要的指示信號。
以上步驟我們已經詳細講解了怎么使用PS對FPGA現場重配置。配置文件到底是什么呢?SOF?POF?都不是,配置文件為最原始的RBF二進制文件。
采用Quartues文件轉換把SOF轉換成RBF即可。
上面可以看出龍卷風未對FPP模式進行討論,但是可以參考ALTERA硬件手冊,給出如下時序圖:
細心的讀者發現了,起始FPP下載模式和PS下載模式完全一樣,指示PS數據位為1位、FPP模式數據位為8位,僅此而已。