一種基于fpga控制的遠(yuǎn)程fpga邏輯代碼的下載方法
【專利摘要】本發(fā)明公開了一種基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,通過FPGA邏輯控制代碼更新,當(dāng)更新失敗時,F(xiàn)PGA加載備份版本,系統(tǒng)可以正常工作,同時可以進(jìn)行下一次代碼更新。所述下載方法包括:邏輯代碼經(jīng)以太網(wǎng)傳輸給CPU,處理后通過IIC接口傳輸給FPGA,在FPGA內(nèi)部由邏輯代碼控制擦除FLASH存儲器內(nèi)的更新代碼比特流,將更新代碼下載到FLASH存儲器中并校驗,從而實現(xiàn)FPGA的遠(yuǎn)程更新。通過對更新代碼比特流的校驗,使得系統(tǒng)具有了更高的自我診斷功能和冗余度。
【專利說明】
一種基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及現(xiàn)場可編程門陣列配置技術(shù)領(lǐng)域,具體涉及一種基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法。
【背景技術(shù)】
[0002]FPGA是一種電路邏輯器件,同時具有靜態(tài)可重復(fù)編程和在線動態(tài)重構(gòu)特性,這種電路功能表現(xiàn)為硬件,但是卻可以像軟件一樣通過編程的方式來修改,大大提高了電子系統(tǒng)的通用性和設(shè)計靈活性。FPGA的特性使得它在電路系統(tǒng)中廣泛使用。
[0003]現(xiàn)有的FPGA邏輯代碼下載方式主要有兩種:一種是使用FPGA廠家提供的燒寫器通過聯(lián)合測試行動組(JTAG,Joint Test Act1n Group),將邏輯代碼下載到存儲器中,每次上電時存儲器將邏輯代碼加載到FPGA中去;另一種方式是PC將邏輯代碼通過以太網(wǎng)傳輸給CPU,CPU模擬JTAG接口將邏輯代碼下載到存儲器中,每次上電時存儲器將邏輯代碼加載到FPGA 中。
[0004]上述下載方式有如下缺點:
[0005]第一種下載方式需要配套的燒寫器,并將其插到板上JTAG接插件上,適合調(diào)試和批量生產(chǎn)前下載代碼,但對于一件組裝完成的產(chǎn)品進(jìn)行測試或者升級代碼版本,拆開產(chǎn)品或者使用調(diào)試用的下載設(shè)備都是廣受工程人員詬病的,因為這樣面臨著時間風(fēng)險和保密風(fēng)險。
[0006]第二種下載方式可以實現(xiàn)FPGA的遠(yuǎn)程更新,但通過CPU模擬JTAG接口方式下載速率太慢,第一種方式15分鐘可以更新完成的代碼用第二種方式需要花費接近10小時,這不僅耗費大量時間并且增加了下載出錯的概率;
[0007]因此,目前業(yè)界迫切需要一種更加方便快捷的FPGA邏輯代碼下載方式,在時間、成本和靈活性上取得優(yōu)勢。
【發(fā)明內(nèi)容】
[0008]本發(fā)明提供了一種基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,用于對組裝完成的系統(tǒng)產(chǎn)品進(jìn)行測試或者升級代碼版本,能夠有效縮短下載時間,提高FPGA調(diào)試效率。
[0009]一種基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,實現(xiàn)所述下載方法的系統(tǒng)包括一個CPU,至少一個和CPU通訊連接的FPGA,每個FPGA對應(yīng)通訊連接有一個基于SPI的FLASH存儲器,所述下載方法包括:
[0010]步驟I,CPU解析更新代碼,并依據(jù)FPGA的讀控制命令,將更新代碼寫入FPGA的寄存器,同時,CPU向FPGA發(fā)送寫控制命令;FPGA的寄存器中的更新代碼通過FIFO緩存重構(gòu)成更新代碼比特流;
[0011 ]步驟2,在更新代碼時,F(xiàn)PGA從前往后依次擦除FLASH存儲器中的初始更新代碼比特流和校驗字,擦除成功后,F(xiàn)LASH存儲器從后往前下載FPGA中的更新代碼比特流,下載成功后,對FLASH存儲器中的更新代碼比特流進(jìn)行校驗,校驗成功后,F(xiàn)LASH存儲器下載FPGA中的校驗字,若擦除、下載和校驗均成功,將FLASH存儲器中的轉(zhuǎn)換命令字設(shè)定為開啟,否則轉(zhuǎn)換命令字設(shè)定為關(guān)閉;
[0012]步驟3,重新上電后,當(dāng)轉(zhuǎn)換命令字為開啟狀態(tài)時,F(xiàn)PGA加載FLASH存儲器中的更新代碼比特流;
[0013]當(dāng)轉(zhuǎn)換命令字為關(guān)閉狀態(tài)時,F(xiàn)PGA加載FLASH存儲器中的備份代碼比特流。
[0014]FLASH存儲器中的存儲區(qū)域包括:快速啟動數(shù)據(jù)頭區(qū)域,備份代碼比特流區(qū)域、以及更新代碼比特流區(qū)域。快速啟動數(shù)據(jù)頭區(qū)域用于存儲轉(zhuǎn)換命令字和啟動跳轉(zhuǎn)命令;備份代碼比特流區(qū)域用于存儲備份代碼比特流;更新代碼比特流區(qū)域用于存儲更新代碼比特流。
[0015]所述的初始更新代碼比特流是指:更新開始前,存儲在更新代碼比特流區(qū)域的代碼。更新代碼比特流區(qū)域是校驗正常狀態(tài)下,上電后FPGA加載的區(qū)域,也是在更新過程中擦除、下載和校驗的區(qū)域。
[0016]當(dāng)代碼更新成功或第一次更新之前,轉(zhuǎn)換命令字設(shè)置為開啟狀態(tài)。
[0017]作為優(yōu)選,F(xiàn)PGA和CPU之間通過11C總線和讀寫控制線進(jìn)行通訊連接。
[0018]作為優(yōu)選,CPU接收到FPGA的讀控制命令后,每次將8比特數(shù)據(jù)通過IIC通訊線寫入FPGA的寄存器中。
[0019]作為優(yōu)選,F(xiàn)PGA和FLASH存儲器之間通過SPI總線通訊連接。
[0020]FPGA調(diào)用SPI FLASH接口模塊(即SpiSerDes)控制FPGA和FLASH存儲器中的MISO信號、MOSI信號、SCLK信號和CS信號通訊,F(xiàn)PGA調(diào)用FLASH更新狀態(tài)機模塊(SpiFlashProgrammer)控制FLASH存儲器的擦除、下載和校驗。
[0021]作為優(yōu)選,更新代碼比特流和備份代碼比特流中均包含校驗信息。每次更新下載完成后都會進(jìn)行循環(huán)冗余碼校驗(Cyclic Redundancy Check),確保代碼更新成功,保證了系統(tǒng)的正確性和穩(wěn)定性。
[0022]備份代碼比特流和更新代碼比特流中都包含F(xiàn)LASH更新狀態(tài)機模塊(SpiFlashProgrammer)和SPI FLASH接口模塊(SpiSerDes),可以繼續(xù)實現(xiàn)遠(yuǎn)程更新。
[0023]作為優(yōu)選,在代碼更新前,F(xiàn)LASH存儲器中對初始更新代碼比特流進(jìn)行備份,作為備份代碼比特流。
[0024]當(dāng)代碼更新出現(xiàn)故障時,由快速啟動數(shù)據(jù)頭(QuickBootHeader)控制FPGA加載備份代碼比特流,以實現(xiàn)初始的邏輯功能。
[0025]FLASH存儲器中的遠(yuǎn)程更新初始代碼文件通過JTAG燒寫器下載,作為FPGA的遠(yuǎn)程更新的基礎(chǔ)代碼。
[0026]本發(fā)明中,通過FPGA邏輯專用模塊控制FLASH存儲器,實現(xiàn)對FLASH存儲器(FlashMemory)的擦除、下載和校驗,從而提高FPGA邏輯代碼遠(yuǎn)程快速的速度。
[0027]本發(fā)明中,在代碼更新前,F(xiàn)LASH存儲器存儲備份代碼比特流,當(dāng)更新失敗時,F(xiàn)PGA加載備份代碼比特流,系統(tǒng)可以正常工作,同時可以進(jìn)行下一次代碼更新,提高了系統(tǒng)的安全性和可靠性。
[0028]相對于現(xiàn)有技術(shù),本發(fā)明具有以下有益的技術(shù)效果:
[0029]本發(fā)明下載方法,通過FPGA邏輯控制代碼的更新,相比于CPU模擬JTAG接口的下載方式具有更快的下載速度;相比于燒寫器直插的下載方式,不用拆開產(chǎn)品可以實現(xiàn)遠(yuǎn)程更新,更加方便靈活。
[0030]采用本發(fā)明提供的下載方法,即使更新異常,F(xiàn)PGA也能夠加載備份代碼比特流,實現(xiàn)初始功能,并且可以實現(xiàn)下一次代碼更新,大大提高了系統(tǒng)的可靠性。
[0031 ]本發(fā)明提供的下載方法,各鏈路間通過千兆以太網(wǎng)、IIC和SPI接口連接,線路簡單,傳輸穩(wěn)定,可以保證良好的信號質(zhì)量,對于復(fù)雜系統(tǒng)無需拆板,代碼更新更加穩(wěn)定靈活。
【附圖說明】
[0032]圖1為本發(fā)明FPGA遠(yuǎn)程更新的硬件鏈路示意圖。
[0033]圖2為實施本發(fā)明FPGA遠(yuǎn)程更新的流程示意圖。
[0034]圖3為本發(fā)明FPGA上電加載邏輯代碼的流程示意圖。
[0035]圖4為本發(fā)明FPGA遠(yuǎn)程更新邏輯代碼控制FLASH擦除、下載和校驗的狀態(tài)機示意圖。
【具體實施方式】
[0036]下面結(jié)合實施例和附圖來詳細(xì)說明本發(fā)明,但本發(fā)明并不限于此。
[0037]以下以含有FPGA的系統(tǒng)為例來詳細(xì)說明本發(fā)明的下載方法,其中,F(xiàn)PGA以XiI inx公司的FPGA芯片為例,硬件鏈路示意圖如圖1所示。
[0038]如圖2所示,一種基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,包括:
[0039](I)通過Xilinx提供的開發(fā)環(huán)境ISE生成遠(yuǎn)程更新初始代碼bit文件initial_quickboot.bit,再通過ISE生成對應(yīng)的mcs文件initial_quickboot.mcs,將該mcs文件通過JTAG燒寫器下載到SPI FLASH(即基于SPI的FLASH存儲器),作為FPGA遠(yuǎn)程更新的基礎(chǔ)代碼。
[0040]initial_quickboot.bit 包括 3 個模塊:
[0041 ] FLASH更新狀態(tài)機模塊(S卩SpiFlashProgrammer模塊),該模塊是FPGA邏輯控制SPIFLASH擦除、下載和校驗的狀態(tài)機模塊;
[0042]SPI FLASH接口模塊(S卩SpiSerDes模塊),該模塊是FPGA專用模擬SPI FLASH接口豐旲塊;
[0043]備份邏輯代碼模塊(S卩BakLoc模塊),該模塊是備份邏輯代碼模塊,可實現(xiàn)基礎(chǔ)功會K。
[0044]如圖3 所不,initial_quickboot.mcs 包括三部分:
[0045]快速啟動頭(即QuickBoot Header),其中包括轉(zhuǎn)換命令字(即critical switchword)和啟動跳轉(zhuǎn)命令(即warm boot jump sequence),當(dāng)轉(zhuǎn)換命令字為on(0xAA995566)時,啟動跳轉(zhuǎn)命令控制FPGA加載更新代碼比特流(S卩update bitstream),當(dāng)否則轉(zhuǎn)換命令字為off時,啟動跳轉(zhuǎn)命令控制FPGA加載備份代碼比特流(即golden bitstream)。
[0046]備份代碼比特流(即goIdenbitstream),是由initial_quickboot.bit加上校驗字和校驗信息后轉(zhuǎn)換為mcs格式的比特流,其作用是在更新出現(xiàn)故障時,由快速啟動頭控制FPGA加載備份代碼比特流,可以實現(xiàn)初始邏輯功能,備份代碼比特流包括FLASH更新狀態(tài)機模塊(即SpiFlashProgrammer ^PISPI FLASH接口模塊(即Spi SerDes模塊)以便進(jìn)行下一次更新;
[0047]更新代碼比特流(即update bitstream),是校驗正常狀態(tài)下FPGA加載的mcs比特流,也是在更新過程中被替代的部分,在initial_quickboot.mcs文件中更新代碼比特流與備份代碼比特流相同。
[0048](2)通過Xi I inx提供的開發(fā)環(huán)境I SE生成遠(yuǎn)程更新代碼bit文件update_quickboot.bit,再通過ISE生成對應(yīng)的mcs文件update_quickboot.mcs,將該mcs文件通過千兆以太網(wǎng)傳輸存儲在power PC0
[0049]update_quickboot.bit 包括 3 個模塊:
[0050]FLASH更新狀態(tài)機模塊(即 SpiFlashProgrammer模塊);
[0051]SPI FLASH接口模塊(SPSpiSerDes模塊);
[0052]更新邏輯代碼模塊(即UpdateLoc模塊)。
[0053]update_quickboot.mcs 是由 update_quickboot.bit 加上校驗字和校驗信息轉(zhuǎn)換為mcs格式的文件。
[0054](3)Power ?(^將卯(^七6_911;^1<:13001:.1110 8文件的比特流解析通過IIC接口傳輸給FPGA,F(xiàn)PGA接收到數(shù)據(jù)后經(jīng)過FIFO緩存,重構(gòu)mcs比特流,經(jīng)過FLASH更新狀態(tài)機模塊和SPIFLASH接口模塊模擬SPI接口,擦除初始更新代碼比特流,下載并校驗新的更新代碼比特流。
[0055]FLASH更新狀態(tài)機模塊控制SPI FLASH的擦除和下載,其流程如圖4所示,當(dāng)接收到更新代碼比特流后,F(xiàn)LASH更新狀態(tài)機開始工作,先進(jìn)入ID校驗狀態(tài)(S卩check ID),如校驗正確則進(jìn)入校驗字擦除狀態(tài)(即Erase SwitchWord ),否則報錯ID校驗錯誤(SPerrorIDCode)。
[0056]在進(jìn)行校驗字擦除時,F(xiàn)LASH更新狀態(tài)機控制SPI FLASH從前往后擦除SPI FLASH內(nèi)的更新代碼比特流的校驗字(switch word),若擦除成功,則進(jìn)入更新區(qū)域擦除狀態(tài)(gpEraseUpdateArea),若擦除錯誤報擦除錯誤(即ErrorErase),若擦除超時報擦除超時(即ErrorEraseTO)。
[0057]在更新區(qū)域擦除狀態(tài)時,F(xiàn)LASH更新狀態(tài)機下從前往后擦除SPI FLASH內(nèi)更新代碼比特流(即update bitstream)的代碼更新部分,若擦除成功進(jìn)入更新區(qū)域加載狀態(tài)(SPProgramUpdateArea),否則報錯。
[0058]在更新區(qū)域加載狀態(tài)時,F(xiàn)LASH更新狀態(tài)機控制FPGA將update_quickboot.mcs的代碼更新部分從后往前下載到SPI FLASH,若下載成功進(jìn)入更新區(qū)域校驗狀態(tài)(SPVerifyUpdateArea),否則報錯。
[°°59] 在更新區(qū)域校驗狀態(tài)時,FLASH更新狀態(tài)機對下載到update bitstream的比特流的校驗信息進(jìn)行校驗,如校驗成功進(jìn)入ProgramSwitchWord (校驗字加載)狀態(tài),否則報CRC校驗錯誤(即ErrorCRC)。
[0060]在校驗字加載狀態(tài)時,F(xiàn)LASH更新狀態(tài)機從后往前下載校驗字(switch word),如下載成功FLASH更新狀態(tài)機接收,否則報錯。
[0061 ] SPI FLASH接口模塊(S卩SpiSerDes模塊)模擬SPI接口,接收FLASH更新狀態(tài)機模塊(SpiFlashProgrammer)的指令,對SPI FLASH進(jìn)行擦除、校驗和下載操作。
[0062](4)下載過程結(jié)束后,若FLASH更新狀態(tài)機模塊(SpiFlashProgrammer模塊)控制的擦除、校驗和下載指令全部操作成功,則遠(yuǎn)程更新成功,重新上電后,轉(zhuǎn)換命令字(criticalswitch word)為on,F(xiàn)PGA加載更新后的更新代碼比特流(update bitstream);若更新過程有錯誤,轉(zhuǎn)換命令字(critical switch word)為off,F(xiàn)PGA加載備份代碼比特流(go I denbitstream)ο
[0063]備份代碼比特流(golden bitstream)和更新代碼比特流(update bitstream)中都包括FLASH更新狀態(tài)機模塊(SpiFlashProgrammer)和SPI FLASH接口模塊(SpiSerDes),可以繼續(xù)實現(xiàn)遠(yuǎn)程更新。
【主權(quán)項】
1.一種基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,其特征在于,實現(xiàn)所述下載方法的系統(tǒng)包括一個CPU,至少一個和CPU通訊連接的FPGA,每個FPGA對應(yīng)通訊連接有一個基于SPI的FLASH存儲器,所述下載方法包括: 步驟I,CPU解析更新代碼,并依據(jù)FPGA的讀控制命令,將更新代碼寫入FPGA的寄存器,同時,CPU向FPGA發(fā)送寫控制命令;FPGA的寄存器中的更新代碼通過FIFO緩存重構(gòu)成更新代碼比特流; 步驟2,在更新代碼時,F(xiàn)PGA從前往后依次擦除FLASH存儲器中的初始更新代碼比特流和校驗字,擦除成功后,F(xiàn)LASH存儲器從后往前下載FPGA中的更新代碼比特流,下載成功后,對FLASH存儲器中的更新代碼比特流進(jìn)行校驗,校驗成功后,F(xiàn)LASH存儲器下載FPGA中的校驗字,若擦除、下載和校驗均成功,將FLASH存儲器中的轉(zhuǎn)換命令字設(shè)定為開啟,否則轉(zhuǎn)換命令字設(shè)定為關(guān)閉; 步驟3,重新上電后,當(dāng)轉(zhuǎn)換命令字為開啟狀態(tài)時,F(xiàn)PGA加載FLASH存儲器中的更新代碼比特流; 當(dāng)轉(zhuǎn)換命令字為關(guān)閉狀態(tài)時,F(xiàn)PGA加載FLASH存儲器中的備份代碼比特流。2.如權(quán)利要求1所述的基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,其特征在于,F(xiàn)PGA和CPU之間通過11C總線和讀寫控制線進(jìn)行通訊連接。3.如權(quán)利要求2所述的基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,其特征在于,CHJ接收到FPGA的讀控制命令后,每次將8比特數(shù)據(jù)通過IIC通訊線寫入FPGA的寄存器中。4.如權(quán)利要求3所述的基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,其特征在于,F(xiàn)PGA和FLASH存儲器之間通過SPI總線通訊連接。5.如權(quán)利要求4所述的基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,其特征在于,更新代碼比特流和備份代碼比特流中均包含校驗信息。6.如權(quán)利要求5所述的基于FPGA控制的遠(yuǎn)程FPGA邏輯代碼的下載方法,其特征在于,在代碼更新前,F(xiàn)LASH存儲器中對初始更新代碼比特流進(jìn)行備份,作為備份代碼比特流。
【文檔編號】G06F9/445GK105955783SQ201610305001
【公開日】2016年9月21日
【申請日】2016年5月9日
【發(fā)明人】陳耀武, 蔣榮欣, 黃余格
【申請人】浙江大學(xué)