FPGA實(shí)現(xiàn)串口升級及MultiBoot(二)FPGA啟動流程
掃描二維碼
隨時隨地手機(jī)看文章
這個系列開篇肯定要先了解FPGA的啟動流程,試想一下:我想實(shí)現(xiàn)MultiBoot,那么我應(yīng)該在什么時候開始升級,升級失敗后FPGA進(jìn)行了哪些操作,以及怎么回到Golden區(qū)?
還有一個問題,就是我硬件打板回來,燒寫進(jìn)FLASH后起不來,這應(yīng)該怎么排查?
縮略詞索引:
- K7:Kintex 7
- V7:Vertex 7
- A7:Artix 7
以上所有這些的前提就是理解FPGA啟動流程。

AMD-Xilinx FPGA啟動階段大概可以分為以上幾個步驟(上圖參考來源:UG470 Figure 5-3),下面分別講解每一個步驟中FPGA做哪些工作。
一、器件上電
器件外圍設(shè)置
對于7系列FPGA主要的關(guān)注點(diǎn)就是BANK0、BANK14和BANK15,BANK0主要關(guān)注電源和配置引腳,下表是一些注意點(diǎn):

關(guān)于Vertex7系列詳見《UG470》表2-7和表2-8。
SPI FLASH配置使用BANK0和BANK14,BPI則是BANK0、BANK14和BANK15,相關(guān)的電源域如圖1所示,對于FPGA人員主要關(guān)注BANK0,下面是一個K7的典型電路:

重點(diǎn)關(guān)注:M0、M1、M2引腳(其他重要引腳我們下一節(jié)重點(diǎn)介紹),這幾個引腳是關(guān)于FPGA的啟動配置引腳:

上電時序
7系列FPGA其實(shí)對于上電時序要求不是那么高,但是對于電源域的要求比較高,下圖就是FPGA的上電時序要求。

相關(guān)時序要求如下:

圖4中Tpor的值和具體器件有關(guān),大概的范圍是10~50ms,若是從模式配置,建議按照60ms設(shè)計(jì),主模式配置,建議按照5ms來考慮。
二、配置初始化
配置初始化操作,也就是上電復(fù)位完成后,相關(guān)配置存儲器按順序清零。配置初始化的觸發(fā)條件主要由以下幾種情況:器件正常上電、Program_B信號拉低、IProg指令、JTAG的JProgram指令、Fallback重配,以及觸發(fā)器通過全局(GSR)的重新初始化。配置初始化期間,除了少量的配置輸出管腳外,其余IO的狀態(tài)通過PUDC_B管腳上下拉確定,詳細(xì)說明見圖5。

配置初始化期間還會將芯片內(nèi)所有模塊的配置RAM清零,包括寄存器的值和Block RAM的存儲值,F(xiàn)F觸發(fā)器重新初始化。在配置存儲器清零過程中,INIT_B信號一直為低電平,當(dāng)完成清零后,INIT_B信號才會變成高電平。因此INIT_B信號拉高表示初始化完成,圖4中也簡單說明了從上電配置到INIT_B信號拉高約多長時間。
三、配置管腳讀取
按照圖0中步驟,經(jīng)歷過上面兩個步驟后,接下來就是進(jìn)行配置模式采集。配置模式采集也很好理解,就是當(dāng)INIT_B信號拉高后讀取M2,M1,M0管腳的電平狀態(tài),這幾個管腳的上下拉是決定FPGA的啟動模式,詳細(xì)設(shè)計(jì)如圖6所示。

因?yàn)镮NIT_B拉高后,才進(jìn)行模式采樣,所以可以通過外部強(qiáng)制把INIT_B拉低后,進(jìn)行延時再配置。如果加載模式為Master模式,F(xiàn)PGA很快就會輸出有效的CCLK。此時,F(xiàn)PGA開始在配置時鐘的上升沿對配置數(shù)據(jù)進(jìn)行采樣,當(dāng)然也可以通過設(shè)置,使用下降沿來采集配置數(shù)據(jù)。
四、檢測同步頭
當(dāng)和外設(shè)進(jìn)行通信的時候,我們一般都會在協(xié)議里增加頭校驗(yàn)、尾校驗(yàn)以及數(shù)據(jù)校驗(yàn)。對于FPGA讀取FLASH中配置數(shù)據(jù)一樣(還沒到讀取用戶數(shù)據(jù)流),這個頭校驗(yàn)就叫“同步頭”,它是一段特殊的同步字?!巴筋^”的作用和協(xié)議頭校驗(yàn)一樣幫助FPGA確定正確的數(shù)據(jù)位置,同步字之前的配置數(shù)據(jù)都會被FPGA忽略,也就是FPGA僅僅在同步化之后才正式開始接收配置數(shù)據(jù)。同步字說明詳見圖7。

五、器件ID檢測
為了確保位流和FPGA芯片匹配,在讀取到同步字后還會檢測配置位流中的器件ID和目標(biāo)ID是否一致。ID是一個固定的32位的數(shù)據(jù),基于IEEE Std 1149.1標(biāo)準(zhǔn)。7系列FPGA的ID已經(jīng)在UG470 的 Table 1-1中列出,下圖是截取的一部分,其他詳見UG470。

32位的ID中包含了28位的特征值和4位掩碼。特征值包括廠商信息,器件族,器件規(guī)模等。如果器件ID和位流配置中不匹配,F(xiàn)PGA 會將內(nèi)部寄存器的第一位ID_Err置高,軟件也會顯示錯誤信息,同時停止后續(xù)位流加載。
六、配置文件載入
在第四步和第五步順利通過后,F(xiàn)PGA開始加載配置數(shù)據(jù)。
配置文件框架
7 系列 FPGA 配置文件以幀的形式排列。幀是 7 系列 FPGA 配置內(nèi)存空間中最小的可尋址段,因此所有操作都必須作用于整個配置幀。每幀由 101 個 32 位組成。
因?yàn)楹罄m(xù)我們操作基本都是通過腳本或者GUI進(jìn)行配置的,這部分內(nèi)容實(shí)際我們目前也用不上,所以有興趣的可以去看看UG470中第五章關(guān)于這部分詳細(xì)介紹。
七、CRC校驗(yàn)
配置文件載入完成后,為了驗(yàn)證數(shù)據(jù)的正確性,F(xiàn)PGA還自動設(shè)置了CRC校驗(yàn)(CRC是同步進(jìn)行),導(dǎo)入完成后會將計(jì)算的CRC值與期望CRC值進(jìn)行比較。如果CRC校驗(yàn)不正確,F(xiàn)PGA會自動把INIT-B拉低,放棄這次配置。用戶必須把PROG-B引腳拉低,才能進(jìn)行重新配置。默認(rèn)情況下,生成的配置位流會自動添加CRC校驗(yàn),但這個不是必須的,可以通過位流設(shè)置功能取消CRC檢驗(yàn),但是取消CRC校驗(yàn)會存在因?qū)氲腻e誤位流而引起功能異常甚至損壞器件。

八、啟動序列
最后一個步驟就是啟動序列,也是我們需要重點(diǎn)關(guān)注的一步。
前面幾步順利完成后就到最后一步了,F(xiàn)PGA進(jìn)入啟動序列流程。啟動序列包含8個順序啟動狀態(tài)(0-7)操作,其中啟動狀態(tài)0對用戶是不透明的,Phase1-Phase7如圖10所示。

啟動序列事件的默認(rèn)順序?yàn)橄柔尫臘ONE引腳,然后激活I(lǐng)/O,最后啟動寫使能(詳見UG470中Table 5-11 默認(rèn)啟動順序,下面圖12中)。實(shí)際使用中,可以通過BitGen參數(shù)對啟動順序進(jìn)行設(shè)置來滿足不同的需求。也就是上圖中除了步驟7以外,其余幾個步驟啟動順序是用戶可編程的,并且啟動順序中的內(nèi)容也是可編輯的,如是否等待MMCM鎖定或者是否等待DCI阻抗匹配這些都是可配置的,以上兩個可選配置。
但是,對于1-全局使能GWE(使能RAM和Flip-Flops所有同步單元工作)置位、2-取消全局三態(tài)GTS,激活輸出管腳這兩步時強(qiáng)制執(zhí)行的,否則對于1不執(zhí)行的話,F(xiàn)PGA無法正常工作;對于2不執(zhí)行則FPGA所有引腳將功能失效。
釋放DONE管腳,F(xiàn)PGA將取消之前按照PUDC_B引腳設(shè)置的引腳默認(rèn)狀態(tài)。DONE引腳是開漏輸出信號,因此芯片外部需要使用一個330Ω上拉,當(dāng)器件釋放DONE管腳,DONE管腳的電平變?yōu)楦唠娖健I厦娴脑敿?xì)說明如圖11所示:

默認(rèn)啟動序列時序圖:


修改上面默認(rèn)的啟動序列的Vivado設(shè)置如下圖所示。

總結(jié)
雖然還沒開始進(jìn)入正題,但是“前戲”也很重要,這決定了你能深入多少。本文主要需要了解的就是FPGA啟動的幾個步驟,其內(nèi)容更適合排查和設(shè)計(jì)FPGA相關(guān)硬件。