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
主站蜘蛛池模板: 亚洲中文制服丝袜欧美精品| 小蝌蚪亚洲精品国产| 国产白浆一区二区三区视频在线| 激情爆乳一区二区| 亚洲一区二区在线无码 | 天天干伊人| 中文字幕亚洲无线码一区女同| 久久特级毛片| 国产va在线观看| 国产成人高清精品免费5388| 国产一级特黄aa级特黄裸毛片| 国产精品专区第1页| 精品伊人久久大香线蕉网站| 黄色一及毛片| 亚瑟天堂久久一区二区影院| 毛片在线看网站| 97超碰精品成人国产| 暴力调教一区二区三区| 少妇精品在线| 亚洲AV免费一区二区三区| 国产h视频免费观看| 性视频一区| 欧美中文字幕一区| 在线看片中文字幕| 亚洲精品第五页| 巨熟乳波霸若妻中文观看免费| 免费激情网站| 狠狠综合久久久久综| 有专无码视频| 最新午夜男女福利片视频| 国产欧美日韩在线一区| 99视频国产精品| 2020国产精品视频| 伊人久久婷婷| 国产成人综合亚洲欧美在| 国产成人91精品免费网址在线| 18禁黄无遮挡网站| 97人人做人人爽香蕉精品| 国产精品不卡片视频免费观看| 国产在线拍偷自揄拍精品| 干中文字幕| 久久精品中文无码资源站| 国产成人免费高清AⅤ| 亚洲午夜福利精品无码不卡| 欧美日韩久久综合| 欧美日韩专区| 999在线免费视频| 天天色天天综合| 亚洲性视频网站| 无码 在线 在线| 喷潮白浆直流在线播放| 五月婷婷丁香综合| 国产青青草视频| 亚洲日韩精品综合在线一区二区| 国产爽歪歪免费视频在线观看 | 国产欧美日韩综合在线第一| 色成人综合| 99精品免费在线| 激情无码字幕综合| 黄色福利在线| 一级毛片免费不卡在线视频| 久久精品免费国产大片| 狠狠v日韩v欧美v| 91在线精品免费免费播放| 999国内精品视频免费| 日韩在线2020专区| 国产精品蜜芽在线观看| 高清色本在线www| 亚洲黄色视频在线观看一区| 夜夜拍夜夜爽| 在线欧美一区| 四虎永久免费地址| 国产无遮挡裸体免费视频| 久久永久视频| 免费毛片a| а∨天堂一区中文字幕| 91国内视频在线观看| 国产97色在线| 欧美区一区| 国产日本欧美在线观看| 2019国产在线| 婷婷激情五月网|