FPGA實(shí)現(xiàn)串口升級(jí)及MultiBoot(二)FPGA啟動(dòng)流程
掃描二維碼
隨時(shí)隨地手機(jī)看文章
這個(gè)系列開(kāi)篇肯定要先了解FPGA的啟動(dòng)流程,試想一下:我想實(shí)現(xiàn)MultiBoot,那么我應(yīng)該在什么時(shí)候開(kāi)始升級(jí),升級(jí)失敗后FPGA進(jìn)行了哪些操作,以及怎么回到Golden區(qū)?
還有一個(gè)問(wèn)題,就是我硬件打板回來(lái),燒寫(xiě)進(jìn)FLASH后起不來(lái),這應(yīng)該怎么排查?
縮略詞索引:
- K7:Kintex 7
- V7:Vertex 7
- A7:Artix 7
以上所有這些的前提就是理解FPGA啟動(dòng)流程。
圖0:7系列FPGA啟動(dòng)步驟-參考:UG470AMD-Xilinx FPGA啟動(dòng)階段大概可以分為以上幾個(gè)步驟(上圖參考來(lái)源:UG470 Figure 5-3),下面分別講解每一個(gè)步驟中FPGA做哪些工作。
一、器件上電
器件外圍設(shè)置
對(duì)于7系列FPGA主要的關(guān)注點(diǎn)就是BANK0、BANK14和BANK15,BANK0主要關(guān)注電源和配置引腳,下表是一些注意點(diǎn):
圖1:電源域相關(guān)配置-來(lái)源:UG470關(guān)于Vertex7系列詳見(jiàn)《UG470》表2-7和表2-8。
SPI FLASH配置使用BANK0和BANK14,BPI則是BANK0、BANK14和BANK15,相關(guān)的電源域如圖1所示,對(duì)于FPGA人員主要關(guān)注BANK0,下面是一個(gè)K7的典型電路:
重點(diǎn)關(guān)注:M0、M1、M2引腳(其他重要引腳我們下一節(jié)重點(diǎn)介紹),這幾個(gè)引腳是關(guān)于FPGA的啟動(dòng)配置引腳:
圖2:?jiǎn)?dòng)配置引腳-來(lái)源:UG470上電時(shí)序
7系列FPGA其實(shí)對(duì)于上電時(shí)序要求不是那么高,但是對(duì)于電源域的要求比較高,下圖就是FPGA的上電時(shí)序要求。
圖3:SPI x1 啟動(dòng)時(shí)序-來(lái)源:UG470相關(guān)時(shí)序要求如下:
圖4:幾個(gè)重要時(shí)序參數(shù)-來(lái)源:UG470圖4中Tpor的值和具體器件有關(guān),大概的范圍是10~50ms,若是從模式配置,建議按照60ms設(shè)計(jì),主模式配置,建議按照5ms來(lái)考慮。
二、配置初始化
配置初始化操作,也就是上電復(fù)位完成后,相關(guān)配置存儲(chǔ)器按順序清零。配置初始化的觸發(fā)條件主要由以下幾種情況:器件正常上電、Program_B信號(hào)拉低、IProg指令、JTAG的JProgram指令、Fallback重配,以及觸發(fā)器通過(guò)全局(GSR)的重新初始化。配置初始化期間,除了少量的配置輸出管腳外,其余IO的狀態(tài)通過(guò)PUDC_B管腳上下拉確定,詳細(xì)說(shuō)明見(jiàn)圖5。
圖5:PUDC_B管腳上下拉和IO管腳配置關(guān)系-來(lái)源:UG470配置初始化期間還會(huì)將芯片內(nèi)所有模塊的配置RAM清零,包括寄存器的值和Block RAM的存儲(chǔ)值,F(xiàn)F觸發(fā)器重新初始化。在配置存儲(chǔ)器清零過(guò)程中,INIT_B信號(hào)一直為低電平,當(dāng)完成清零后,INIT_B信號(hào)才會(huì)變成高電平。因此INIT_B信號(hào)拉高表示初始化完成,圖4中也簡(jiǎn)單說(shuō)明了從上電配置到INIT_B信號(hào)拉高約多長(zhǎng)時(shí)間。
三、配置管腳讀取
按照?qǐng)D0中步驟,經(jīng)歷過(guò)上面兩個(gè)步驟后,接下來(lái)就是進(jìn)行配置模式采集。配置模式采集也很好理解,就是當(dāng)INIT_B信號(hào)拉高后讀取M2,M1,M0管腳的電平狀態(tài),這幾個(gè)管腳的上下拉是決定FPGA的啟動(dòng)模式,詳細(xì)設(shè)計(jì)如圖6所示。
圖6:FPGA配置管腳和啟動(dòng)模式-來(lái)源:UG470因?yàn)镮NIT_B拉高后,才進(jìn)行模式采樣,所以可以通過(guò)外部強(qiáng)制把INIT_B拉低后,進(jìn)行延時(shí)再配置。如果加載模式為Master模式,F(xiàn)PGA很快就會(huì)輸出有效的CCLK。此時(shí),F(xiàn)PGA開(kāi)始在配置時(shí)鐘的上升沿對(duì)配置數(shù)據(jù)進(jìn)行采樣,當(dāng)然也可以通過(guò)設(shè)置,使用下降沿來(lái)采集配置數(shù)據(jù)。
四、檢測(cè)同步頭
當(dāng)和外設(shè)進(jìn)行通信的時(shí)候,我們一般都會(huì)在協(xié)議里增加頭校驗(yàn)、尾校驗(yàn)以及數(shù)據(jù)校驗(yàn)。對(duì)于FPGA讀取FLASH中配置數(shù)據(jù)一樣(還沒(méi)到讀取用戶數(shù)據(jù)流),這個(gè)頭校驗(yàn)就叫“同步頭”,它是一段特殊的同步字?!巴筋^”的作用和協(xié)議頭校驗(yàn)一樣幫助FPGA確定正確的數(shù)據(jù)位置,同步字之前的配置數(shù)據(jù)都會(huì)被FPGA忽略,也就是FPGA僅僅在同步化之后才正式開(kāi)始接收配置數(shù)據(jù)。同步字說(shuō)明詳見(jiàn)圖7。
圖7:FPGA 同步字-來(lái)源:UG470五、器件ID檢測(cè)
為了確保位流和FPGA芯片匹配,在讀取到同步字后還會(huì)檢測(cè)配置位流中的器件ID和目標(biāo)ID是否一致。ID是一個(gè)固定的32位的數(shù)據(jù),基于IEEE Std 1149.1標(biāo)準(zhǔn)。7系列FPGA的ID已經(jīng)在UG470 的 Table 1-1中列出,下圖是截取的一部分,其他詳見(jiàn)UG470。
圖8:器件ID - 截取:UG47032位的ID中包含了28位的特征值和4位掩碼。特征值包括廠商信息,器件族,器件規(guī)模等。如果器件ID和位流配置中不匹配,F(xiàn)PGA 會(huì)將內(nèi)部寄存器的第一位ID_Err置高,軟件也會(huì)顯示錯(cuò)誤信息,同時(shí)停止后續(xù)位流加載。
六、配置文件載入
在第四步和第五步順利通過(guò)后,F(xiàn)PGA開(kāi)始加載配置數(shù)據(jù)。
配置文件框架
7 系列 FPGA 配置文件以幀的形式排列。幀是 7 系列 FPGA 配置內(nèi)存空間中最小的可尋址段,因此所有操作都必須作用于整個(gè)配置幀。每幀由 101 個(gè) 32 位組成。
因?yàn)楹罄m(xù)我們操作基本都是通過(guò)腳本或者GUI進(jìn)行配置的,這部分內(nèi)容實(shí)際我們目前也用不上,所以有興趣的可以去看看UG470中第五章關(guān)于這部分詳細(xì)介紹。
七、CRC校驗(yàn)
配置文件載入完成后,為了驗(yàn)證數(shù)據(jù)的正確性,F(xiàn)PGA還自動(dòng)設(shè)置了CRC校驗(yàn)(CRC是同步進(jìn)行),導(dǎo)入完成后會(huì)將計(jì)算的CRC值與期望CRC值進(jìn)行比較。如果CRC校驗(yàn)不正確,F(xiàn)PGA會(huì)自動(dòng)把INIT-B拉低,放棄這次配置。用戶必須把PROG-B引腳拉低,才能進(jìn)行重新配置。默認(rèn)情況下,生成的配置位流會(huì)自動(dòng)添加CRC校驗(yàn),但這個(gè)不是必須的,可以通過(guò)位流設(shè)置功能取消CRC檢驗(yàn),但是取消CRC校驗(yàn)會(huì)存在因?qū)氲腻e(cuò)誤位流而引起功能異常甚至損壞器件。
圖9:通過(guò)上圖順序進(jìn)行CRC設(shè)置八、啟動(dòng)序列
最后一個(gè)步驟就是啟動(dòng)序列,也是我們需要重點(diǎn)關(guān)注的一步。
前面幾步順利完成后就到最后一步了,F(xiàn)PGA進(jìn)入啟動(dòng)序列流程。啟動(dòng)序列包含8個(gè)順序啟動(dòng)狀態(tài)(0-7)操作,其中啟動(dòng)狀態(tài)0對(duì)用戶是不透明的,Phase1-Phase7如圖10所示。
圖10:?jiǎn)?dòng)序列1~7 - 來(lái)源:UG470啟動(dòng)序列事件的默認(rèn)順序?yàn)橄柔尫臘ONE引腳,然后激活I(lǐng)/O,最后啟動(dòng)寫(xiě)使能(詳見(jiàn)UG470中Table 5-11 默認(rèn)啟動(dòng)順序,下面圖12中)。實(shí)際使用中,可以通過(guò)BitGen參數(shù)對(duì)啟動(dòng)順序進(jìn)行設(shè)置來(lái)滿足不同的需求。也就是上圖中除了步驟7以外,其余幾個(gè)步驟啟動(dòng)順序是用戶可編程的,并且啟動(dòng)順序中的內(nèi)容也是可編輯的,如是否等待MMCM鎖定或者是否等待DCI阻抗匹配這些都是可配置的,以上兩個(gè)可選配置。
但是,對(duì)于1-全局使能GWE(使能RAM和Flip-Flops所有同步單元工作)置位、2-取消全局三態(tài)GTS,激活輸出管腳這兩步時(shí)強(qiáng)制執(zhí)行的,否則對(duì)于1不執(zhí)行的話,F(xiàn)PGA無(wú)法正常工作;對(duì)于2不執(zhí)行則FPGA所有引腳將功能失效。
釋放DONE管腳,F(xiàn)PGA將取消之前按照PUDC_B引腳設(shè)置的引腳默認(rèn)狀態(tài)。DONE引腳是開(kāi)漏輸出信號(hào),因此芯片外部需要使用一個(gè)330Ω上拉,當(dāng)器件釋放DONE管腳,DONE管腳的電平變?yōu)楦唠娖?。上面的詳?xì)說(shuō)明如圖11所示:
圖11:?jiǎn)?dòng)序列說(shuō)明 - 來(lái)源:UG470默認(rèn)啟動(dòng)序列時(shí)序圖:
圖12:默認(rèn)啟動(dòng)序列時(shí)序圖 - 來(lái)源:UG470修改上面默認(rèn)的啟動(dòng)序列的Vivado設(shè)置如下圖所示。
圖13:修改默認(rèn)啟動(dòng)序列的Vivado設(shè)置總結(jié)
雖然還沒(méi)開(kāi)始進(jìn)入正題,但是“前戲”也很重要,這決定了你能深入多少。本文主要需要了解的就是FPGA啟動(dòng)的幾個(gè)步驟,其內(nèi)容更適合排查和設(shè)計(jì)FPGA相關(guān)硬件。