徐晶晶 陳帥
摘 要: 為了解決多級(jí)FPGA在線自動(dòng)升級(jí)與加載的技術(shù)難題,本文提出了利用其中一片F(xiàn)PGA實(shí)現(xiàn)自動(dòng)更新的方案,設(shè)計(jì)了存儲(chǔ)系統(tǒng)的邏輯方案,主要功能有:PCI-E接口的橋、多級(jí)FPGA在線系統(tǒng)升級(jí)、NANDFLASH的讀寫等操作控制、DDR2的讀寫等操作控制及校驗(yàn)與智能磨損平衡技術(shù)算法等,降低了硬件成本。
關(guān)鍵詞: SSD FPGA 在線 升級(jí)電路
1.引言
目前,傳統(tǒng)的FPGA升級(jí)與加載方式主要有兩種[1]-[5]:一種是通過JTAG口直接加載配置文件到FPGA內(nèi)部的SRAM中,但是由于SRAM掉電后數(shù)據(jù)將丟失,因此在下次重新上電時(shí),需要重新通過JTAG加載線進(jìn)行手動(dòng)加載;另外一種是通過外置FLASH存儲(chǔ)器件,首先將加載文件燒錄到FLASH中,然后在每次上電時(shí),利用FPGA的專用接口直接自動(dòng)加載FLASH中的配置文件,克服第一種方法存在的每次上電都要手動(dòng)加載的缺點(diǎn)[6]-[7]。對(duì)于單FPGA硬件系統(tǒng)來說,利用上述的第二種方法與網(wǎng)絡(luò)接口的聯(lián)合可以實(shí)現(xiàn)對(duì)單個(gè)FPGA的在線自動(dòng)升級(jí)與加載,但是如果對(duì)于多級(jí)FPGA系統(tǒng)來說,為了保證下電后配置文件不丟失,采用上述第二種辦法則需要在每個(gè)FPGA的外圍都掛上一個(gè)NANDFLASH存儲(chǔ)器,才能保證重新上電后能夠自動(dòng)加載,硬件成本較高。同時(shí)對(duì)FLASH中的配置文件的更新需要更多的外圍器件支持。
本文利用一片F(xiàn)PGA并通過SPI接口與加載接口實(shí)施更新NORFLASH與其他四片F(xiàn)PGA加載的方案。設(shè)計(jì)了存儲(chǔ)系統(tǒng)的邏輯方案,采用MLC結(jié)構(gòu)的NANDFLASH顆粒作為存儲(chǔ)單元,使用多片F(xiàn)PGA器件作為整個(gè)系統(tǒng)的邏輯控制核心。邏輯部分主要功能有:PCI-E接口的橋、多級(jí)FPGA在線系統(tǒng)升級(jí)、NANDFLASH的讀寫等操作控制、DDR2的讀寫等操作控制,以及校驗(yàn)與智能磨損平衡技術(shù)算法等,降低了硬件成本和系統(tǒng)復(fù)雜性。
2.多級(jí)FPGA在線自動(dòng)升級(jí)與加載方案的電路結(jié)構(gòu)
設(shè)計(jì)如圖1所示的硬件系統(tǒng)的核心結(jié)構(gòu),由5片F(xiàn)PGA組成;其中的FPGA1采用xilinx公司的Virtex5系列的30T器件,內(nèi)部包含PCI-EXPRESS endpoint IP核,利用IP核構(gòu)成的總線節(jié)點(diǎn)實(shí)現(xiàn)FPGA1與內(nèi)存和CPU之間的通信。其他四片F(xiàn)PGA2采用xilinx公司的SPARTAN6系列的150T器件。首先通過PCIE的IP核接口實(shí)現(xiàn)從內(nèi)存中讀取到新的加載文件,然后再進(jìn)行并串的轉(zhuǎn)換,通過SPI接口控制模塊實(shí)現(xiàn)從SPI_NORFLASH中讀取數(shù)據(jù)與下發(fā)擦除、讀寫狀態(tài)寄存器等指令,更新了SPI_NORFLASH中的存儲(chǔ)的文件,存儲(chǔ)的文件內(nèi)容包括FPGA1與FPGA2的配置文件存放地址不同。為了保證在升級(jí)或者加載失敗時(shí)避免FPGA癱瘓,因此還需在FLASH空間里把上述兩個(gè)文件內(nèi)容實(shí)現(xiàn)備份,供發(fā)生意外所需。其次在SPI_NORFLASH文件更新成功后,F(xiàn)PGA1內(nèi)部通過一些控制模塊將SPI_NORFLASH中的數(shù)據(jù)讀出,然后進(jìn)行數(shù)據(jù)串并轉(zhuǎn)換與并串轉(zhuǎn)換,并將轉(zhuǎn)換后的數(shù)據(jù)按照SPARTAN6 150T的串行SLAVE加載模式,加載到其他4片F(xiàn)PGA中,從而實(shí)現(xiàn)整個(gè)5片F(xiàn)PGA的在線自動(dòng)升級(jí)與加載。
圖1 多級(jí)FPGA在線升級(jí)與加載方案
3.多級(jí)FPGA在線自動(dòng)升級(jí)與加載方案的模塊化實(shí)現(xiàn)
在FPGA1內(nèi)部為了實(shí)現(xiàn)在線自動(dòng)升級(jí)與加載的功能,特設(shè)計(jì)了以下幾個(gè)模塊,包括PCI-E IP核的包裝模塊,SPI接口控制器模塊SPI_CONTROLLER,以及對(duì)其他4片F(xiàn)PGA的加載控制模塊UPDATA_CONTROLLER,這3個(gè)部分共同組成了整個(gè)在線自動(dòng)升級(jí)與加載的控制模塊如圖2所示。其中PCI-E ENDPIONT模塊主要是實(shí)現(xiàn)PCI-E IP所需要的各種接收與發(fā)送數(shù)據(jù)的時(shí)序與數(shù)據(jù)的封裝,包括TLP幀的封裝與解析并將數(shù)據(jù)傳送給SPI_CONTROLLER模塊。
圖2 FPGA1內(nèi)部部分結(jié)構(gòu)框圖
SPI_CONTROLLER模塊需要將接收到的數(shù)據(jù)處理后才能通過SPI接口燒錄到NORFLASH中。從總線上傳送下來的數(shù)據(jù)為32位比特,其中包括8比特命令碼和24比特的地址碼或者32比特全為數(shù)據(jù)或者32比特中前8位為指令碼,剩余24比特?zé)o效,等格式數(shù)據(jù)。由于外置的SPI_NORFLASH根據(jù)M25P128 FLASH器件的特點(diǎn),特設(shè)計(jì)了SPI_CONTROLLER模塊中的一些狀態(tài)機(jī),如圖3所示,根據(jù)接收到指令狀態(tài)機(jī)由空閑狀態(tài)轉(zhuǎn)移到解碼狀態(tài),分析出32位比特?cái)?shù)據(jù)中前8位是具體指令。根據(jù)解碼后的分析并進(jìn)行相關(guān)狀態(tài),模塊內(nèi)的其他部分小模塊根據(jù)這些狀態(tài)產(chǎn)生相關(guān)的時(shí)序與數(shù)據(jù),待操作完成后,狀態(tài)機(jī)跳轉(zhuǎn)到操作完成等待狀態(tài),并隨后跳轉(zhuǎn)到空閑狀態(tài),從而完成整個(gè)操作流程,實(shí)現(xiàn)對(duì)外置NORFLASH的數(shù)據(jù)更新等其他操作。具體模塊內(nèi)部的狀態(tài)機(jī)轉(zhuǎn)換如下圖3所示:
圖3 SPI控制模塊內(nèi)部狀態(tài)機(jī)
其中操作完成中最主要的兩個(gè)操作是讀FLASH與寫FLASH,根據(jù)M25P128器件的特點(diǎn)及SPI接口的時(shí)序要求,因此所設(shè)計(jì)模塊中clk,spi_di,spi_do及片選信號(hào)滿足下面的時(shí)序要求,具體如圖4、圖5所示:
圖4 SPI讀操作時(shí)序
圖5 SPI寫操作時(shí)序
本模塊加載過程中的狀態(tài)機(jī)為:首先進(jìn)入復(fù)位狀態(tài),然后判斷復(fù)位是否成功;通過啟動(dòng)加載狀態(tài)直接進(jìn)入初始化狀態(tài);從發(fā)完讀加載數(shù)據(jù)指令后直接進(jìn)入等待讀取數(shù)據(jù)完成狀態(tài);開始加載后計(jì)入加載計(jì)時(shí)狀態(tài)如果加載成功則進(jìn)入空閑狀態(tài);最終無論加載成功與否都需要釋放SPI端口。在加載過程中,可以利用在加載部分文件期間同時(shí)讀取下一部分需加載的內(nèi)容,從而提高加載效率。
4.仿真與調(diào)試
上述的電路設(shè)計(jì)方案利用VERILOG語言編寫實(shí)現(xiàn),并通過NC-VERILOG仿真工具。首先進(jìn)行仿真驗(yàn)證,在仿真結(jié)果正確的條件下,再進(jìn)行板級(jí)調(diào)試。仿真波形如下圖6所示:
圖6 FPGA在線升級(jí)系統(tǒng)仿真波形
5.結(jié)語
通過上述設(shè)計(jì)的方案和模塊與最后的調(diào)試與完善,該方案已經(jīng)在SSD存儲(chǔ)卡產(chǎn)品中穩(wěn)定可靠地應(yīng)用于整個(gè)硬件核心FPGA系統(tǒng)中,實(shí)現(xiàn)在線自動(dòng)升級(jí)與加載,很大程度上降低了維護(hù)的人力與物力成本,從而提高了產(chǎn)品的市場(chǎng)競(jìng)爭(zhēng)力。
參考文獻(xiàn):
[1]魏書軍,劉振安,趙棣新,過雅南.VME總線在線“從串模式”配置FPGA的設(shè)計(jì)與實(shí)現(xiàn)[J].核電子學(xué)與探測(cè)技術(shù),2007,(05).
[2]張煒,楊虎,張爾揚(yáng).一種靈活的實(shí)時(shí)FPGA數(shù)據(jù)配置方法[J].通信技術(shù),2003,(02).
[3]李鵬,蘭巨龍.用CPLD和Flash實(shí)現(xiàn)FPGA配置[J].電子技術(shù)應(yīng)用,2006,(06).
[4]彭冰,劉舒,黃振.基于共用總線的多片F(xiàn)PGA配置電路的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)新通信,2009,(05).
[5]毛劍慧,黑勇,吳斌,喬樹山.一種新穎的多模式FPGA配置方案[J].微計(jì)算機(jī)信息,2008,(29).
[6]蘇嵐,陳銘,鐘銳.FPGA被動(dòng)串行配置方法在稅控機(jī)中的應(yīng)用[J].電子器件,2007,(02).
[7]孫云峰,段哲民.基于微處理器系統(tǒng)的FPGA在線配置方法[J].微處理機(jī),2008,(05).