曹 慧,程宏斌,2*,汪 洋,2,鄭喜鳳,2
(1. 長春希達電子技術有限公司 吉林 長春 130103;2. 中國科學院 長春光學精密機械與物理研究所 吉林 長春 130033)
常規LED顯示控制系統主要由上位機、發送卡和接收卡組成,通過網絡鏈路,實現LED顯示屏的顯示和控制。發送卡接收視頻和控制信號,并將數據打包傳輸接收卡。接收卡截取自己需要的數據完成灰度調制或控制響應,并通過千兆網將數據串行轉發給下一張接收卡[1-3]。
在指揮、監控中心等工程項目中,LED顯示屏要求(7×24)h不間斷運行,因此確保控制系統程序升級正確越發重要。系統通過網絡傳輸更新發送卡、接收卡外置Flash存儲的程序文件,在過程中存在因干擾產生錯誤數據或遇到掉電、誤擦除等破壞程序文件完整性的情況,致使現場可編程門陣列(Field Programmable Gate Array,FPGA)[4-12]不能再次調用,人工逐一板卡燒錄程序費時費力,造成重大顯示故障。通過Xilinx Spartan-6 FPGA的MultiBoot特性,完成FPGA多重配置設計,在Flash某一固定區域存儲備用程序,當FPGA更新程序出錯時,調用備用程序保障常規顯示和網絡鏈路功能,隨后在線更新程序,提高控制系統的容錯率。
Spartan-6 FPGA在通電時從外部Flash加載存儲的項目程序文件(mcs),完成FPGA的配置后執行系統功能。mcs文件一般只包含一個比特流配置文件,但也允許有多個。Spartan-6 FPGA具有MultiBoot邏輯配置模塊,來實現MultiBoot和Fallback操作。MultiBoot操作可以有選擇地從Flash的多個比特流文件中加載其中的一個,通過ICAP設置寄存器并觸發IPROG命令,在系統不重復上電情況下對FPGA重新配置[4-6],實現不同的功能。Fallback操作是在切換加載比特流文件過程中出錯時,用預存的安全比特流文件替代并進行FPGA的重新配置。
MultiBoot邏輯配置流程中有Header、MultiBoot和Golden 3個比特流配置文件,此時外部Flash存儲器中的比特流文件組織模式及FPGA配置流程如圖1所示。

圖1 MultiBoot邏輯配置流程Fig.1 MultiBoot logic configuration process
Header配置文件包含同步字、MultiBoot和Golden配置文件在Flash存儲的起始地址等信息[7]。系統上電時,FPGA從0地址加載Header配置文件,根據存儲的地址跳轉并加載MultiBoot配置,這是滿足用戶使用的系統常規程序。Golden配置文件為備用的安全程序,當加載MultiBoot配置出錯時,觸發Fallback操作,加載該安全程序配置FPGA。
如圖1所示,Header、MultiBoot和Golden(Fallback)配置文件在加載過程中出錯時,根據相應寄存器內設置的起始地址值FPGA會重新加載3次,加載次數的計數器名稱為Strike。若Strike的計數值為6,則從0地址開始,FPGA執行Header→MultiBoot→Golden (Fallback)→Header的循環加載。若期間MultiBoot或Golden(Fallback)配置文件加載成功,則停止循環。每次循環Strike值加1,最多3次,Strike值為9則停止所有配置加載。
Fallback操作一旦被觸發且加載Golden配置成功,只有重啟系統或使用IPROG命令才能實現重新加載其他FPGA配置文件。MultiBoot特性提高了器件利用率及系統安全性、降低了復雜系統的成本。
LED顯示系統方案設計如圖2所示,增加MultiBoot控制模塊,采用狀態機編碼,按照指令流程通過Xilinx內置的ICAP核向配置文件發送IPROG命令,熱啟動調用Flash中存儲的備用程序,實現對FPGA重新配置。

圖2 系統方案設計Fig.2 System scheme design
采用FPGA型號為Xilinx Spartan-6 Lx16、Flash型號M25P16,FPGA與SPI Flash物理連接的硬件電路如圖3所示,數據寬度為×1 SPI配置的方式,M[1∶0] = 2′b01[8-9]。

圖3 配置接口硬件電路Fig.3 Configuration interface hardware circuit
LED顯示控制系統針對不同的顯示屏需要進行相匹配的顯示參數設置,在SPI Flash內采用顯示參數設置與程序運行功能相獨立地址存儲,系統上電時加載程序比特流文件和顯示參數設置文件,完成FPGA配置后實現不同顯示屏的正常顯示。
發送卡、接收卡的Flash存儲區分為程序文件區和設置文件區。程序文件區保存實現各自功能的程序比特流數據;發送卡設置文件主要包含視頻信號截取、屏幕帶載分辨率、數據分包編碼信息等;接收卡設置文件主要包含單卡帶載分辨率、級聯編碼、顯示灰度和刷新率、Gamma表、校正系數表等。
SPI Flash的容量選擇與系統設計的加載模式和FPGA芯片的型號有關。在發送、接收端采用相同的主備兩種FPGA配置加載設計方案,SPI Flash內存儲Header、主程序MultiBoot、備用程序Golden比特流文件和2個程序附屬顯示設置文件(Config.hex)。所用型號為M25P16,16 Mbit(0x000000-0x1FFFFF)容量的Flash詳細的存儲空間如表1所示。

表1 Flash存儲空間Tab.1 Flash storage space
軟件設計主要分為兩個部分:第一部分是在FPGA上開發的應用模塊。實現系統發送卡、接收卡各自的功能,同時也為配置重載模塊提供時鐘信號和觸發信號,本文采用在線 Flash程序寫入完成后輸出的標識信號作為觸發信號。第二部分是FPGA配置重載模塊。包括Header文件編寫、MultiBoot和Golden程序文件中例化ICAP核,滿足觸發條件后,發送IPROG命令,實現FPGA重新配置。程序備份啟動及升級流程如圖4所示。

圖4 程序運行流程圖Fig.4 Program operation flowchart
根據程序運行流程,Header配置文件作為啟動引導作用,參照Xilinx Spartan-6指令對內部相關寄存器的規則[7](如表2所示),逐條編譯指令數據形成Header配置文件并保存為HEX形式,圖5為向內部寄存器GENERAL2寫入指令數據的詳解示例。
MultiBoot和Golden程序功能完全相同,需要注意的是:Golden備用程序內對應上位機程序升級指令的Flash擦除、寫入的偏移地址為MultiBoot主程序地址,且各程序在SPI Flash起始地址需要與Header程序文件內地址設置值對應。在主備程序的MultiBoot控制模塊中同時例化ICAP核, Xilinx的編譯平臺ISE中調用ICAP原語路徑為Edit→LanguageTemplates,Verilog→Device Primitive Instantiation→Spartan-6→Config/BSCAN Components→Internal Configuration Access Port(ICAP_SPARTAN6),調用接口如下:

ICAP_SPARTAN6_inst (
.BUSY(BUSY), // Busy/Ready output
.O(O), // 16Bit Configuartion data output
.CE(CE), // ICAP Enable input(Active-Low)
.CLK(CLK), // Clock input
.I(I), // 16Bit Configuration data input
.WRITE(WRITE) // Read/Write control input
);


表2 Header配置文件內指令Tab.2 Header configuration directive definition

續 表

圖5 指令數據詳解示例Fig.5 Detailed examples of command data
在使用該接口時,通過如圖2所示的MultiBoot控制模塊中狀態機只對CE、CLK、I、WRITE 4個信號不斷賦值來發送指令數據,不用關注BUSY、O的值[7]。ICAP寫數據的指令時序圖如圖6所示。

圖6 ICAP寫數據指令時序圖(I總線寬度為16 bit)Fig.6 ICAP write data instruction timing chart (I bus width is 16 bit)
按照Xilinx Spartan-6指令對內部相關寄存器的規則,通過狀態機完成表2中序號1→2→8→11→12→13的6個指令ICAP賦值,生成IPROG指令。ICAP_SPARTAN6數據總線寬度為16 bit,需要把引用的6個32 bit指令數據依次拆分為16 bit數據,以主備程序內Flash寫入完成標識Spi_wda=1為觸發信號,實現主備程序在線更新后按照運行流程自動重啟對FPGA重新配置。寫IPROG指令狀態機如圖7所示。

圖7 寫IPROG指令狀態機Fig.7 Write IPROG instruction state machine
在狀態機發送IPROG指令數據到ICAP核的過程中,需要先將16 bit位寬度數據分為高低各8 bit位寬字,在每8 bit位寬字內進行一次位轉換(Bit Swapping)操作,確保ICAP_SPARTAN6核接收到位轉換后的正確指令。位轉換操作參照如下Verilog語句:
wire [15∶0] I; ∥進行Swap之后的有效數據
reg [15∶0] I_REG; ∥進行Swap前的I寄存數據
assign I = {I_REG[8], I_REG[9], I_REG[10], I_REG[11], I_REG[12], I_REG[13], I_REG[14], I_REG[15], I_REG[0], I_REG[1], I_REG[2], I_REG[3], I_REG[4], I_REG[5], I_REG[6], I_REG[7]}; ∥Flash主SPI模式下,數據需要按照每8 bit進行一次Swap操作(即每個字8個Bit數據進行高低位互換)。
同理,按照上述方法,增加外部觸發信號,參照表2中所有指令數據,增加、修改圖8狀態機流程,則可以在MultiBoot控制模塊中根據內部觸發、外部觸發信號輸出給ICAP核不同數據,實現系統FPGA被動和主動兩種不同的熱啟動重新配置方式。
Xilinx Spartan-6系列的FPGA需要將后綴名為mcs的內存鏡像文件固化到外部配置存儲器中,上電后FPGA自動加載并完成配置。本文的mcs文件包含3個比特流文件和2個HEX文件,在整合到mcs文件的過程中,需要指定每個比特流、HEX文件在Flash中存放的物理地址,且必須與系統程序設計內有關Flash擦除、寫入、讀取等指令設置的起始地址相同,這樣FPGA才能根據地址找到對應的程序和數據。
采用Xilinx ISE平臺完成主備兩個程序的工程項目文件設計后,通過軟件的Generate Programming File生成主程序MultiBoot.bit和備程序Golden.bit。把相關文件放在同一目錄下,使用ISE平臺內的命令行窗口ISE Design Suite 32/64 Bit Command Prompt工具[10],按照以下步驟完成Flash存儲芯片中初始可燒錄的內存鏡像(mcs)文件。
(1)promgen -p bin -r Header_SPIx1.hex -o Header_SPIx1.bin。如圖8所示,把編寫后的Header配置文件進行格式轉換。

圖8 Header配置文件格式轉換Fig.8 Header configuration file format conversion
(2)promgen -w -p mcs -spi -s 2048 -data file up 000000 Header_SPIx1.bin -u 000044 Golden.bit -data file up 080000 Config.hex -u 100000 MultiBoot.bit -data file up 180000 Config.hex -o D:/H_M_G.mcs。
命令中各參數說明:
-spi:生成的mcs文件要固化到SPI Flash中;
-p mcs:生成文件的格式是mcs格式;
-s 2048:定義外部存儲器的容量,2 048 kbytes×8/1 024=16 Mbit;
-data_file up 000000 Header_SPIx1.bin:名字為Header_SPIx1的BIN文件在Flash的起始地址為0x0;
-u 000044Golden.bit:名字為Golden的比特率文件在Flash的起始地址為0x44;
-u 100000MultiBoot.bit:名字為MultiBoot的比特率文件在Flash的起始地址為0x100000;
-data_file up 080000 Config.hex:名字為Config的HEX文件在Flash的起始地址為0x80000;
-data_file up 180000 Config.hex:名字為Config的HEX文件在Flash的起始地址為0x180000;
-o D∶/H_M_G.mcs:合成后的文件名和保存的目錄。
合并完成mcs文件后,通過ISE設計平臺中IMPACT軟件將mcs文件固化到SPI Flash中。
通過ISE平臺中集成的Simulation軟件對設計進行仿真,通過添加Test Bench,模擬激勵信號為升級程序寫完Flash的標識信號Spi_wda,對MultiBoot控制模塊進行仿真。圖9是Flash重新加載時對ICAP核輸入信號的仿真結果,可以看到,狀態機成功生成了IPROG命令,并將位轉換后的數據發送給ICAP模塊。

圖9 ICAP_SPARTAN6 IPROG命令仿真Fig.9 ICAP_SPARTAN6 IPROG command simulation
如圖10所示,本設計通過LED顯示平臺進行主備升級程序的測試。測試過程及結果如下:
升級程序格式轉換為HEX文件,由上位機軟件通過網絡傳輸升級指令和程序數據,分別發送給LED控制系統的發送卡、接收卡。通過修改程序HEX文件內數據和在上位機傳輸數據過程中拔掉網線、掉電,模擬升級過程中出現的突發情況,對發送卡、接收卡進行獨立的測試。通過LED顯示屏能否正常顯示圖像和系統指示燈狀態觀測FPGA是否正確加載配置。

圖10 LED顯示平臺(軟件、控制系統、顯示屏)Fig.10 LED display platform (software, control system, display)
系統主備程序的顯示功能一致,顯示配置文件一致,主程序工作狀態指示燈閃爍頻率是備程序的2倍。在系統主程序正常工作時,模擬主程序升級故障,觀測到板卡自動重啟后系統指示燈從高頻變為低頻閃爍,LED顯示屏顯示正常,確認板卡備程序自動啟用;此時正常進行程序升級,觀測到板卡自動重啟后系統指示燈由低頻變為高頻閃爍,LED顯示屏顯示正常,確認板卡主程序升級成功并自動啟用;當備程序已經啟用,模擬升級故障時,觀測到板卡自動重啟后系統指示燈維持低頻閃爍狀態,LED顯示屏顯示正常,確認板卡主程序升級失敗,自動保持啟用備程序。
本文LED顯示控制系統的發送卡、接收卡程序采用主備程序熱啟動設計,在LED顯示屏使用過程中極大地保障了系統在線升級的安全性和時效性。同時,顯示程序文件與顯示配置文件分區存儲、靈活調用,通過上位機軟件對Flash擦除、寫入顯示配置時,既滿足不同LED顯示屏需要靈活配置,又規避了對顯示程序直接操作的風險。在Xilinx Spartan-6 FPGA系統設計中編寫狀態機調用ICAP核,通過內部、外部觸發信號可以控制FPGA重新配置。該設計方法靈活方便,易于操作,可分時復用提高編程資源的利用率和系統穩定性,在工程應用中有很高的應用價值。