999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

特殊環(huán)境下FPGA 代碼在線升級功能的實現(xiàn)

2021-12-07 07:45:36陳召全
電子設計工程 2021年23期
關鍵詞:程序區(qū)域

陳召全

(中航華東光電有限公司特種顯示技術國家工程實驗室,安徽蕪湖 241002)

目前主流的FPGA 均是基于SRAM 編程的,當系統(tǒng)掉電后,編程信息全部丟失[1-2]。所以,需要在FPGA 的外圍采用非易失性器件Flash、EEPROM 來存儲代碼,在系統(tǒng)上電的時候,將編程信息讀入FPGA 內(nèi)部,形成特定功能的電路。在FPGA 調(diào)試過程中可以采用JTAG 方式下載程序,系統(tǒng)調(diào)試完成,在產(chǎn)品出廠前需要下載配置代碼到非易失性器件中。在產(chǎn)品聯(lián)試或者使用中出現(xiàn)問題,或者用戶功能升級時,都需要重新升級非易失性器件中的代碼[3]。此時就需要打開產(chǎn)品的外殼,如果產(chǎn)品是作為部件安裝在用戶的系統(tǒng)中,就需要將用戶的相關設備先拆除。這種操作還會帶來一系列的問題,尤其是特種設備,其使用環(huán)境特殊,要么人員不能靠近,要么拆卸困難,要么保密的原因不能開箱。在這些情況下,就要通過在線的方式將代碼燒寫進非易失性器件,避免開箱操作。文中為了解決此問題,提出了一種FPGA 在線升級解決方案,同時考慮到加載過程中可能斷電,或者其他原因引起加載中斷。如果不加以保護的話,會導致原始數(shù)據(jù)丟失,F(xiàn)PGA 無法啟動,就不得不開箱重新燒寫,因此提出了雙主程序分區(qū)的方法,能有效地解決這個問題,提升了可靠性。

1 在線升級系統(tǒng)組成及整體要求

文中在一款機載顯示模塊中實現(xiàn)FPGA 在線升級功能,以提升產(chǎn)品的維護性和可靠性。產(chǎn)品中采用Xilinx 的Artix-7 系列FPGA,采用主動SPI 方式對FPGA 進行配置,對應的SPI Flash 型號為N25Q064A。產(chǎn)品對外的通信方式為RS422[4-5],通過此接口接收主機信號,進行亮度調(diào)節(jié)、信號參數(shù)調(diào)整、發(fā)送系統(tǒng)工作狀態(tài)等信息。為了減少產(chǎn)品的對外接口數(shù)量,復用此接口[6-7]。為了保存在線升級過程中的中間狀態(tài),以及控制FPGA 在上電過程中能夠正確讀取配置代碼,需要EEPROM 來存儲相應的參數(shù)。在線升級系統(tǒng)的主要組成框圖如圖1 所示。

圖1 在線升級系統(tǒng)的主要功能框圖

由于RS422 預定義的波特率為115 200,為了實現(xiàn)通用性,仍然應用此波特率,在原有的通信指令基礎上增加一些特殊指令,來實現(xiàn)在線升級功能,以控制FPGA 實現(xiàn)對外圍EEPROM 和Flash 的控制,同時為了避免用戶誤操作對系統(tǒng)配置代碼造成破壞,這些在線升級指令是不對用戶開放的,而且進行了一系列的保護措施,確保系統(tǒng)的安全性。考慮到在線升級操作過程中可能會出現(xiàn)加載過程被中斷的問題,為了避免原始數(shù)據(jù)丟失FPGA 不能正常啟動的問題,采用了雙主程序分區(qū)的方式,進一步提升了系統(tǒng)的可靠性。

2 在線升級功能的實現(xiàn)

2.1 在線升級實現(xiàn)過程

利用Xilinx 系列FPGA 內(nèi)部的ICAPE2 (Internal Configuration Access Port)原語,實現(xiàn)FPGA 程序的動態(tài)加載[8-9]。通過ICAPE2 原語可以觸發(fā)IPROG (The internal PROGRAM_B)命令,實現(xiàn)FPGA 的熱啟動,能夠根據(jù)設置好的啟動地址,從該地址讀取FPGA 的配置數(shù)據(jù)[10-11]。

通過ICAPE2 實現(xiàn)IPROG 命令的過程為:首先,通過ICAPE2 發(fā)送同步字;其次,配置熱啟動開始地址;最后,發(fā)送IPROG 指令。當配置邏輯接收到IPROG 指令后,F(xiàn)PGA 將開始熱啟動,將INIT_B 和DONE 管腳拉低,直到FPGA 內(nèi)部所有邏輯被擦除,拉高INIT_B,并從WBSTAR 地址處讀取配置數(shù)據(jù),實現(xiàn)配置數(shù)據(jù)的重加載,動態(tài)地改變了FPGA 內(nèi)部電路功能。

該文的在線升級涉及到主程序和引導程序,其中的主程序為正常工作狀態(tài)對應的程序,引導程序為專門實現(xiàn)在線升級功能的程序。主程序和引導程序分別被放置到SPI Flash 的不同區(qū)域。引導程序所在的區(qū)域是固定的,且不能被改寫,只有通過JTAG編程時才能被重新設置。主程序區(qū)域是可以被改寫,當產(chǎn)品功能改變或者性能升級時,新的配置數(shù)據(jù)會被重新寫入主程序區(qū)域。考慮到在線升級過程中可能會出現(xiàn)數(shù)據(jù)被破壞的情況,主程序區(qū)域被分為兩個區(qū),一個是當前工作的區(qū)域,另一個是新配置數(shù)據(jù)寫入?yún)^(qū)。為了保證FPGA 加載到正確的配置程序,F(xiàn)lash 中僅留存一個主程序,一旦新的主程序被寫入,并且驗證正確,即將老的主程序擦除,并且改寫進入主程序地址的寄存器數(shù)值,確保重新上電后,F(xiàn)PGA 加載新升級的配置數(shù)據(jù)。SPI Flash 內(nèi)部的空間分布如圖2 所示。

圖2 SPI Flash內(nèi)部空間分布圖

2.2 主程序實現(xiàn)

主程序為實現(xiàn)產(chǎn)品各項功能所對應的程序,也是在線升級所更新的部分。在主程序的RS422 接收模塊中增加在線升級對應的命令。主要有是否進入主程序判斷寄存器(boot_main_select),因為在引導程序和主程序中都要對此寄存器進行控制,所以不能將其存在FPGA 內(nèi)部,因為一旦重新加載程序,此寄存器就會被復位,所以只有存放到外部的非易失性存儲器EEPROM 中;另一條命令為IPROG 啟動命令(start_ICAP),實現(xiàn)從主程序回到引導程序,將引導程序配置數(shù)據(jù)加載到FPGA。主程序中與在線升級有關的部分的控制流程如圖3 所示。

圖3 主程序在線升級部分工作流程

當RS422 接收模塊接收到在線升級命令后,首先改寫boot_main_select 寄存器的數(shù)值,以便在跳轉到引導程序后,程序不會接著跳轉到主程序[12-13]。這樣就可以在引導程序控制下進行在線升級操作。同時等待start_ICAP 指令,進行引導程序的加載[14]。通過ICAPE2發(fā)送的數(shù)據(jù)和命令如表1所示。

表1 ICAPE2發(fā)送的數(shù)據(jù)和命令表

2.3 引導程序實現(xiàn)

2.3.1 引導程序執(zhí)行過程

引導程序放置在Flash 的00000000h 地址,當FPGA 上電后首先從此地址加載數(shù)據(jù)。引導程序加載完成后,首先要讀取boot_main_select 寄存器的數(shù)值,以及主程序選擇main _select 寄存器。如boot_main_select 寄存器對應的是主程序區(qū),則進入main_select 指向的主程序;否則,停留在引導程序,等待相關的指令。在引導程序中,通過RS422 接收相關的控制命令和數(shù)據(jù)。主要的操作命令有:設置boot_main_select 寄存器;設置main_select 寄存器;控制SPI Flash 實現(xiàn)主程序區(qū)1 和主程序區(qū)2 中數(shù)據(jù)的讀寫和數(shù)據(jù)擦除;執(zhí)行ICAPE2 跳轉程序等。引導程序的具體執(zhí)行過程如圖4 所示。

圖4 引導程序執(zhí)行過程

2.3.2 Flash控制器的實現(xiàn)

在引導程序中,關鍵的操作是對外部的SPI Flash的控制,以實現(xiàn)新程序的寫入和舊程序的擦除[15]。所以,F(xiàn)lash 控制器的有效性對在線升級功能的實現(xiàn)起到了關鍵的作用[16]。Flash 控制器主要有Flash控制模塊,寫入數(shù)據(jù)緩存FIFO,讀出數(shù)據(jù)緩存FIFO組成。其中Flash 控制模塊根據(jù)輸入的控制命令和數(shù)據(jù),控制Flash 的cs、sdi、sdo、sclk 信號完成相應的控制功能[17-19]。SPI Flash 控制器的總體架構如圖5所示。

圖5 SPI Flash控制器總體架構圖

在圖5 中,flash_se_en 表示的是flash 擦除使能信號,對flash_addr 對應的地址塊的數(shù)據(jù)進行擦除操作。flash_pp_en 表示flash 編程使能信號,將data_in_fifo 中的數(shù)據(jù)寫入到flash_addr 對應位置。flash_rd_en 表示flash 讀使能信號,將flash_addr 對應位置的數(shù)據(jù)讀出,并寫入到data_out_fifo 中,以便后續(xù)串口通信模塊將數(shù)據(jù)統(tǒng)一輸出到上位機。各個功能模塊的實現(xiàn)如下:

1)Flash 擦除控制

在執(zhí)行Flash 擦除操作之前,先要執(zhí)行WRITE ENABLE 命令,將Flash 內(nèi)部寫使能寄存器置“1”,負責Flash 忽略擦除操作。WRITE ENABLE 設置之后,發(fā)送Flash 擦除指令D8,以及24 位Flash 擦除地址。

在發(fā)生完擦除命令后Flash 內(nèi)部開始對應的擦除操作,會存在一定的延時才能執(zhí)行相應新的操作命令,所以要周期性地發(fā)送讀狀態(tài)寄存器命令來了解Flash 的狀態(tài),當狀態(tài)寄存器的最低位為“1”時,說明Flash 在執(zhí)行寫狀態(tài)寄存器、Flash 編程、Flash 擦除這幾個命令之一;當狀態(tài)寄存器的最低位為“0”時,F(xiàn)lash 進入空閑狀態(tài),可以進行其他操作。

2)Flash 讀控制

Flash 讀操作的效率非常高,一次能夠將Flash中的數(shù)據(jù)全部讀出,但是產(chǎn)品和上位機之間的通信方式為RS422,傳輸速率低,所以為了保證所有的數(shù)據(jù)均能夠正確地輸出,需要data_out_fifo 的配合。文中采用的操作方式為,一次讀操作的長度為256 byte,完成一次讀操作之后判斷FIFO 中的數(shù)據(jù)狀態(tài),如果滿足下一次讀取的要求,則重新讀256 byte 的數(shù)據(jù),對應的flash 地址也要加256,直到地址達到flash 中某個區(qū)域的上限。對應的狀態(tài)圖如圖6 所示。

圖6 讀flash邏輯狀態(tài)圖

在空閑狀態(tài)下接收到flash_rd_en 使能命令,狀態(tài)機開始跳轉,進入Rd_StReg 狀態(tài),讀狀態(tài)寄存器判斷flash 是否空閑,空閑進入下一狀態(tài),負責回到空閑狀態(tài),忽略本次操作。緊接著判斷地址是否超出范圍,在正常范圍則進入發(fā)送讀命令狀態(tài),接著發(fā)送地址狀態(tài),因為采用的是快速讀模式,需要等待8 個時鐘周期,然后進入接收數(shù)據(jù)狀態(tài),接收完256 個數(shù)據(jù)后,進入地址增加,載回到flash_addr_check 進行判斷是否開始下一次讀取操作。

3)Flash 寫控制

Flash 寫操作也需要通過data_in_fifo 來進行數(shù)據(jù)緩存,來平衡串口和Flash 寫操作之間的速度,以免寫入錯誤。由于不清楚外部寫入數(shù)據(jù)的整長度,所以Flash 寫入采用一次寫入一個byte 的方式。操作方式與讀操作類似,這里不在贅述,其對應的狀態(tài)圖如圖7 所示。注意在操作之前需要單獨執(zhí)行對應區(qū)域的擦除操作。

圖7 寫flash邏輯狀態(tài)圖

3 系統(tǒng)功能測試

在產(chǎn)品正常工作下顯示圖像如圖8 所示,通過串口發(fā)送指令,將boot_main_select 設置為00h,然后發(fā)送start_ICAP 命令進入引導程序。在引導程序下將main 程序區(qū)域2 擦除,并寫入對應的數(shù)據(jù),為了驗證寫入數(shù)據(jù)的有效性,在寫入完成后,將main 區(qū)域2 中的數(shù)據(jù)讀出和原始的數(shù)據(jù)進行比較,采用工具Beyond Compare 4 進行比較,左側邊沒有標紅顯示,說明寫入和讀出的數(shù)據(jù)是一樣的,則寫入正常。將main 程序區(qū)域1 對應的數(shù)據(jù)擦除,并將main_select指向程序區(qū)域2。發(fā)送start_ICAP 命令,F(xiàn)PGA 加載main 程序區(qū)域2 對應的程序,此時顯示的是灰階畫面,如圖9 所示。通過以上操作驗證了在線升級程序的有效性。

圖8 正常顯示圖像

圖9 在線加載后顯示圖像

4 結論

該文提出了一種通過RS422 在線對FPGA 進行加載的方法,通過將程序存儲Flash 分為3 個區(qū)域,分別存放引導程序和主程序1、主程序2,在線升級完成后,主程序1 區(qū)域和主程序2 區(qū)域只有一個區(qū)域存放加載數(shù)據(jù),另一區(qū)域被擦除。在正常工作模式下,通過設置boot_main_select 寄存器,和發(fā)送start_ICAP命令,使FPGA 加載引導程序,并停留在引導程序。在引導程序下將新的代碼數(shù)據(jù)寫入相應的flash 區(qū)域,并將main_select 寄存器指向此區(qū)域,確保在上電時,能準確加載對應的數(shù)據(jù)。由于采用了兩個主程序區(qū)域,確保了在下載過程被中斷的情況下,F(xiàn)PGA能夠回到原始狀態(tài),提升了工作可靠性。該文方法在實際項目中得到了應用,驗證了其有效性。

猜你喜歡
程序區(qū)域
永久基本農(nóng)田集中區(qū)域“禁廢”
分割區(qū)域
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
關于四色猜想
分區(qū)域
創(chuàng)衛(wèi)暗訪程序有待改進
基于嚴重區(qū)域的多PCC點暫降頻次估計
電測與儀表(2015年5期)2015-04-09 11:30:52
主站蜘蛛池模板: 日本妇乱子伦视频| 一级毛片网| 国产成人免费视频精品一区二区| 日韩AV无码一区| 欧美午夜视频在线| 亚洲黄色片免费看| 国产午夜无码片在线观看网站| 亚洲成人网在线观看| 精品国产网站| 国产精品无码一二三视频| 精品伊人久久久久7777人| a级毛片视频免费观看| 青青青视频91在线 | 亚洲精品无码成人片在线观看| 国产精品久久久久久久久kt| 久久综合色播五月男人的天堂| 亚洲成AV人手机在线观看网站| 一级看片免费视频| 国产精品亚洲精品爽爽| 五月激激激综合网色播免费| 在线观看免费人成视频色快速| 欧美日韩精品一区二区视频| 欧美专区日韩专区| 一级毛片中文字幕| 婷婷综合在线观看丁香| 久久99精品久久久久久不卡| 亚洲色大成网站www国产| 麻豆国产在线观看一区二区 | 亚洲日本中文字幕天堂网| 一级成人欧美一区在线观看| 色噜噜久久| 日韩在线影院| 亚洲无码精彩视频在线观看| 国产无码精品在线播放| 亚洲一区二区成人| 精品夜恋影院亚洲欧洲| 久久青青草原亚洲av无码| 久久公开视频| 91青青草视频在线观看的| 全免费a级毛片免费看不卡| 国产精品成人不卡在线观看| 日韩大片免费观看视频播放| 91小视频在线| 国产福利一区在线| 国产精品亚洲一区二区三区z| 亚洲人精品亚洲人成在线| 小说 亚洲 无码 精品| 911亚洲精品| 欧美亚洲激情| 国产流白浆视频| h网站在线播放| 国产亚洲精品自在久久不卡| 香蕉伊思人视频| 亚洲成A人V欧美综合天堂| 久久国产乱子伦视频无卡顿| 91精品视频播放| 全午夜免费一级毛片| 伊人久久青草青青综合| 精品人妻一区无码视频| 国产精品3p视频| 国产成人夜色91| 在线观看av永久| 丁香六月综合网| 亚洲精品中文字幕无乱码| 国产精品99一区不卡| 日韩午夜伦| 无遮挡一级毛片呦女视频| 久久香蕉国产线看观看式| 欧美.成人.综合在线| 国产精品丝袜视频| 亚洲专区一区二区在线观看| 中文字幕啪啪| 欧美日一级片| 性欧美精品xxxx| 亚洲美女久久| 国产高清不卡视频| 99ri精品视频在线观看播放| www.精品国产| 九色视频线上播放| 2021国产在线视频| 青草娱乐极品免费视频| 欧美一区日韩一区中文字幕页|