Cyclone IV E FPGA要能夠正常的工作,除了需要合理的供電外,還需要有正確的配置電路。
Cyclone IV E FPGA是基於SRAM的結構的,而SRAM中的數據掉電就會丟失,因此系統上電后,必須要由配置電路將正確的配置數據加載到SRAM中,然后FPGA才能夠正常的運行。
Cyclone IV E支持5種配置方式,分別為
主動串行方式(AS)(Active Serial)
在FPGA主動串行方式(AS)下,由FPGA主動輸出控制和同步信號給專用的串行配芯片 (EPCS系列或兼容芯片),在串行配置器件收到命令后,把配置數據發送到FPGA,完成配置過程。
配置器件可使用原廠提供的專用EPCS芯片(EPCS4、EPCS8、EPCS16、EPCS64、EPCS128),也可以使用通用的串行SPI FLASH芯片如M25P40、M25P16、W25Q16等。
由於電路簡單,成本低廉,該種方式在中小容量FPGA系統中使用較為廣泛。下圖為AS配置方式時的應用電路。

可以看到,使用該種配置方式,配置器件和FPGA之間只需連接4根信號線即可實現。DATA為配置數據傳輸線,DCLK為串行數據時鍾傳輸線,nCS為器件選中信號,ASDI為命令和數據輸出引腳。
主動並行方式(AP)(Active Parallelism)
主動並行方式和主動串行方式類似,區別在於主動並行方式使用並行接口FLASH存儲器作為配置器件,並行接口FLASH存儲器與FPGA的配置接口如下所示:

該種方式配置器件和FPGA連接需要耗費較多的FPGA管腳,但是能夠顯著提升配置數據的的傳輸速度,對於資源容量較多的FPGA器件,其配置文件的尺寸也相應的較大,因此在對配置過程的時間要求較高的場合,一般使用AP配置方式。對於較低邏輯容量或較少管腳封裝的FPGA器件中,一般不支持AP配置方式。
被動串行方式(PS)(Passive Serial)
所有Altera FPGA都支持該方式。可以由Altera的下載電纜、Altera的EPC系列配置芯片,或是智能主機(微處理器或CPLD)來配置。在PS配置時,FPGA配置數據從存儲器(可以是EPC系列配置器件或其它Flash器件)中讀出,寫人到FPGA的DATA0接口上。數據由DCLK時鍾信號引腳的上升沿打入FPGA,每個DCLK時鍾周期輸入1位數據。下圖為PS配置方式時的應用電路,該模式下用一個外部的主機如MCU或者CPLD配合存儲器實現。

其中nCONFIG是配置啟動信號,該信號的一個低電平脈沖啟動一次FPGA的配置。DCLK為串行數據時鍾,DATA0為串行數據線,nCE為被配置器件選則信號,在整個配置鏈路只配置一片FPGA的情況下,nCE引腳可以直接接地,表明一直選中。在多片FPGA串行級聯情況下,該引腳接到上一級的芯片的nCEO腳上。nCEO腳是選擇輸出腳。當一個器件被配置完成后,該引腳輸出低電平,選中級聯的下一級器件,以啟動對下一級器件的配置。如果整個鏈路上只有一片器件,該引腳懸空即可。
下圖為典型的一個PS模式配置多片級聯的FPGA的應用電路。

FPGA的配置包括3個階段:復位、配置和初始化。當nCONFIG引腳信號為低時,FPGA 處於復位狀態。從下圖可看出,FPGA的nCONFIG引腳上一個低電平到高電平的上升沿將使開漏的nSTATUS引腳被釋放,nSTATUS引腳被外部上拉電阻上拉為高電平,FPGA 進入配置模式,開始接收配置數據。在所有配置數據都加載到FPGA后,進人初始化模式 (Initialization),在初始化完成后,進人用戶模式(User—Mode)。在配置模式和初始化模式 下,FPGA 用戶 I/O 處於高阻態,對於Cyclone 系列器件,用戶I/O有內部弱上拉。當進入用戶模式后,用戶 I/O就按照用戶設計的功能工作。

FPGA在上電后,nCONFIG引腳為低電平先進行復位,所有配置RAM內容都清空,I/O 口處於高阻態(或內部弱上拉)。FPGA的狀態引腳nSTATUS和CONF_DONE引腳輸出低 電平。當nCONFIG引腳產生一個低電平到高電平的上升沿后,FPGA進人配置模式。FPGA會首先采樣配置模式(MSEL)引腳的信號狀態,以決定采用何種配置模式。隨后,FPGA 將釋放開漏輸出的nSTATUS引腳,使其由外部上拉電阻拉到髙電平,這時表示FPGA可以接收配置數據了。在配置之前和配置過程中,用戶I/O 口都是高阻態(或內部弱上拉)。 接收配置數據時,配置數據由DATA(並行配置時為DATA[7..0])引腳送入,配置時鍾信號由DCLK引腳送入,配置數據在DCLK的上升沿被鎖存到FPGA中。當FPGA成功接收完所有配置數據后,FPGA將釋放開漏輸出的CONF_DONE引腳,CONF_DONE被外部上拉電阻上拉為高電平,CONF_DONE,表明配置完成並進入 FPGA的初始化。在初始化過程中,內部邏輯、內部寄存器和I/O寄存器將被初始化,I/O驅動器將被使能。之后,FPGA完成進入用戶模式的操作,所有內部邏輯以及I/O都按照用戶的設計運行。 INIT_DONE引腳上的信號可以指示初始化是否完成。INIT_DONE是一個可選的信號,如使用該功能,需要在Quartus II中指定。 在完成配置后,DCLK和DATA引腳不應懸空,而應被拉成固定高電平或低電平。 從上文分析可知,只要人為地在外部將nCONFIG引腳拉低一段時間,然后再拉髙,便能 重新啟動一次配置。所以市面上有些開發板廠家就在nCONFIG腳上接了一個輕觸開關到地,按下開關便能將nCONFIG拉低,然后釋放,即可啟動一次配置。

JTAG配置方式
JTAG協議制定了一種邊界掃描的規范,邊界掃描架構提供了有效的測試緊密PCB板上元件的能力。邊界掃描可以在不使用物理測試探針的情況下測試引腳連接,並在器件正常工作的過程中捕獲運行數據。對於FPGA,我們也可以使用JTAG電路來將配置數據送入器件中。對於Altera FPGA,Quartus II軟件自動生成用於使用JTAG下載器配置的.sof文件。這種配置方式也是我們在開發和調試的過程中使用最多的方式。
JTAG的指令高於一切其他配置模式,也就是說,JTAG配置方式可以打斷其他配置方式的配置過程。
對於在 JTAG 模式中的器件操作所需的四個管腳為TDI、TDO、TMS和TCK。在了解JTAG配置之前,先對這四個管腳的功能進行下介紹。


使用JTAG配置一個器件時,編程軟件(Quartus Programmer)會旁路所有其它的器件。在旁路模式下,器件通過一個旁路寄存器將編程數據從 TDI 管腳傳至 TDO 管腳,該方案的目的就是在編程軟件編程器件的時候能夠實施校驗。即通過TDI送入器件的配置數據會在一個時鍾周期之后呈現在TDO上。Quartus II 軟件在完成配置后驗證成功的 JTAG 配置。在配置結束后,軟件通過JTAG端口檢查CONF_DONE的狀態,以確認配置是否完成。如果 CONF_DONE不為高,那么 Quartus II 軟件就獲悉配置是失敗的。如果 CONF_DONE 是高的,軟件就確定配置是成功的。在使用JTAG TDI 端口連續發送配置比特流之后, TCK 端口計入一個額外的時鍾周期以執行器件的初始化。
配置方案選擇與設置
Cyclone IV E器件支持多種配置方式,那么器件在上電或者收到配置啟動信號(nCONFIG)后,就需要通過一定設置才能確定究竟使用哪種方式完成配置。在器件上,由專用的四個信號MSEL[3..0]來設置配置方式。需要注意的是,較小的 Cyclone IV E 器件或封裝選項(E144 和 F256 封裝)不具有 MSEL[3] 管腳。在不具備 MSEL[3] 管腳的 Cyclone IV E 器件,不支持使用3.0V或2.5V電平標准的主動串行快速上電復位 (AS Fast POR)配置方案和主動並行(AP)配置方案。要配置這些設備與其它支持的配置方案,根據下表中的MSEL設置選擇 MSEL[2..0] 管腳。

可以看到,當確定使用一種配置方案的時候,根據配置引腳(DCLK、DATA)所在IO Bank的IO供電電壓不同,MSEL的設置也不一樣。例如希望使用AS標准方式配置,當配置電壓標准為3.3V時,MSEL[3..0] = 0010,而當配置電壓標准為3.0V或2.5V時,MSEL[3..0] = 0011。所以,確定MSEL的前提應該是確定配置電壓標准。具體到E144或者F256的封裝上,由於沒有MSEL3,當確定使用AS方式方式配置時,如果配置電壓為3.3V,則應該設置MSEL[2..0] = 010,當確定使用PS方式配置時,如果配置電壓為3.3V,則應該設置MSEL[2..0] = 000。需要注意的是,對於MSEL信號,要么直接連接到VCCA(2.5V),要么直接連接到GND,不得懸空或者串接電阻。
如需詳細對每個知識點探查,可查看《Cyclone IV Device Handbook》文檔中相關章節,以獲得更加細致的描述。
