Zynq的JTAG配置過程
初學(xué) Zynq 的時(shí)候,我相信大家應(yīng)該和我一樣或杠,都是按照慣例打開 Vivado 軟件哪怔,然后實(shí)現(xiàn) Zynq 可編程邏輯硬件部分PL的設(shè)置后,把硬件部署導(dǎo)出向抢,再打開 SDK 進(jìn)行 ARM 核的軟件部分 PS 編程設(shè)計(jì)认境,最后再將硬件比特流文件(.bit)和軟件的可執(zhí)行鏈接文件(.elf)下載到 Zynq 開發(fā)板中,這樣就可以對自己的軟硬件設(shè)計(jì)進(jìn)行調(diào)試和驗(yàn)證挟鸠。這種設(shè)計(jì)方式可以用下面的圖很好的描述:
如上圖所示元暴,這其實(shí)是剛接觸 Zynq 軟硬件設(shè)計(jì)時(shí)需要了解的最基本開發(fā)流程,也是PL和PS設(shè)計(jì)結(jié)合的完美體現(xiàn)兄猩。但是茉盏,上述開發(fā)的過程都有一個(gè)基本的前提,就是 Zynq 開發(fā)板是通過 JTAG 直接與電腦相連枢冤,然后實(shí)現(xiàn)程序的下載鸠姨。從另一個(gè)角度來說,PL和PS的配置都可以認(rèn)為是電腦主機(jī)通過 JTAG 完成的淹真。但是讶迁,在實(shí)際中,Zynq 開發(fā)板不可能實(shí)時(shí)與電腦連接核蘸,當(dāng) JTAG 不起作用時(shí)巍糯,Zynq 芯片是怎樣實(shí)現(xiàn)對自己的配置?這也是本文將要和大家共同討論的問題客扎。
Zynq的啟動(dòng)流程
在無 JTAG 的模式下祟峦,Zynq 是通過片上CPU完成對芯片的配置,也就是PS和PL的配置是通過 PS 處理器 ARM 核來實(shí)現(xiàn)的徙鱼。需要注意的是宅楞,與傳統(tǒng)的 Xilinx 7 系列 FPGA 芯片不同针姿,Zynq 是不支持從 PL 端進(jìn)行直接啟動(dòng)配置的,一定要通過 PS 部分來完成厌衙。
Zynq 的具體啟動(dòng)配置是分級進(jìn)行的距淫,一共可以分為3個(gè)階段,可以用0~2來表示:
- Stage 0: BootROM 階段
- Stage 1: FSBL (First Stage Boot loader)階段
- Stage 2: SSBL (Second Stage Boot loader)階段
熟悉 ARM 開發(fā)的小伙伴應(yīng)該對上面的啟動(dòng)過程感到很熟悉婶希,但又有陌生的地方榕暇。不用急,下面對這三個(gè)階段進(jìn)行詳細(xì)的分析喻杈。
Zynq啟動(dòng)階段0——BootROM
階段0彤枢,又稱為 BootROM 階段。ROM 相信大家都知道奕塑,Read-Only Memory堂污,只讀存儲(chǔ)器的意思家肯;而 Boot 是引導(dǎo)的含義龄砰,所以 BootROM 從字面的意思來看,就是只能去讀取的引導(dǎo)存儲(chǔ)器讨衣。實(shí)際上换棚,BootROM 的作用和它的字面意思完全一樣,就是指 ARM 核在上電之后反镇,需要第一時(shí)間去讀取 BootROM 中固化的程序固蚤,完成對芯片的最初始化的配置。因?yàn)槭侵蛔x的歹茶,所以根據(jù) ROM 的性質(zhì)夕玩,BootROM 中的程序是無法修改的。有的朋友會(huì)問BootROM 這一部分代碼主要完成了對 Zynq 的哪些配置惊豺?
在具體說明 BootROM 進(jìn)行哪些配置之前燎孟,先要描述一下關(guān)于 Zynq 的啟動(dòng)引腳配置。Zynq 擁有5個(gè)可以進(jìn)行配置的 MIO 引腳尸昧,是 MIO[6:2]揩页,在硬件形式上就表現(xiàn)為5個(gè)跳線帽,可以分別接 GND 或 3V3 的高電平烹俗。它們的作用如下:
- MIO[2] :選擇 JTAG 模式
- MIO[5:3] :選擇啟動(dòng)方式爆侣,包括 SD 卡,QSPI Flash 等
- MIO[6] : PLL 使能控制
通過不同的引腳作用說明可以發(fā)現(xiàn)幢妄,當(dāng) JTAG 不起作用是兔仰,就需要通過改變 MIO[5:3] 的連接來實(shí)現(xiàn)從 SD 卡等不同的存儲(chǔ)介質(zhì)啟動(dòng)。
而 BootROM 最重要的作用就是通過讀取 MIO[6:2] 的引腳配置情況蕉鸳,決定從何種介質(zhì)中加載階段1需要使用的啟動(dòng)鏡像斋陪。當(dāng)然在加載之前,BootROM 會(huì)先完成對 SD 卡,NAND无虚,NOR缔赠,QSPI Flash 等的初始化,從而使得ARM 核能夠成功訪問并使用這些外設(shè)友题。BootROM 在完成以上任務(wù)的同時(shí)嗤堰,也會(huì)對安全模式等運(yùn)行模式進(jìn)行配置,這部分博主暫時(shí)不太了解度宦,所以不做過多敘述踢匣。
BootROM 在從外部存儲(chǔ)設(shè)備讀取了啟動(dòng)鏡像后,通常會(huì)把進(jìn)行加載到 OCM 中戈抄。OCM离唬,On Chip Memory,是Zynq 中 ARM 內(nèi)核的片上存儲(chǔ)器划鸽,也叫片上內(nèi)存输莺。自此之后,BootROM 階段的啟動(dòng)任務(wù)就算是圓滿結(jié)束了裸诽,接下來 BootROM 階段就把控制權(quán)轉(zhuǎn)移到了階段1手中嫂用。
注:BootROM 階段不對 PL 進(jìn)行配置
Zynq啟動(dòng)階段1——FSBL
FSBL,(First Stage Boot Loader)丈冬,就是 BootROM 加載到 OCM 中的啟動(dòng)鏡像嘱函。FSBL 完成的任務(wù)是 Zynq 啟動(dòng)過程中的關(guān)鍵一環(huán),可以分為以下4項(xiàng):
- 完成 PS 的初始化
- 加載 PL 的bit流文件埂蕊,完成 PL 配置
- 加載 SSBL 引導(dǎo)程序或是ARM的裸跑程序到 DDR
- 跳轉(zhuǎn)執(zhí)行 SSBL 或裸跑程序
FSBL 的任務(wù)如上所示往弓,整個(gè)思路還是非常清晰的。第1步就是對 PS 端初始化蓄氧,包括 DDR函似,MIO 等。第2步就是PL的配置匀们,也就輸傳統(tǒng)的 FPGA 下載 bit 流的過程缴淋,但要注意的是,在 Zynq 的非 JTAG 模式下泄朴,PL 是無法直接自行配置的重抖。第3步是加載 SSBL 或裸跑程序到 DDR 內(nèi)存中,其中 SSBL祖灰,Second Stage Boot Loader钟沛,是在 Zynq 需要運(yùn)行操作系統(tǒng)時(shí)才進(jìn)行加載。而像我們?nèi)腴T學(xué)習(xí)時(shí)做的點(diǎn)亮 LED 燈實(shí)驗(yàn)局扶,就只是屬于裸跑程序恨统。最后第4步叁扫,ARM 會(huì)跳轉(zhuǎn)到 DDR 中執(zhí)行所加載的程序。所以 FSBL 階段的運(yùn)行思路是很好理解的畜埋。
Zynq啟動(dòng)階段2——SSBL
SSBL 在 Zynq 的啟動(dòng)過程中是可選的一個(gè)階段莫绣,就像所提到的點(diǎn)亮 LED 實(shí)驗(yàn),包括一些其他的比較小型的程序悠鞍,如果不需要用到操作系統(tǒng)的話对室,那么 Zynq 的啟動(dòng)流程到 FSBL 階段就足夠了。因此咖祭,SSBL 是面向于需要運(yùn)行操作系統(tǒng)的應(yīng)用場合掩宜。相信熟悉操作系統(tǒng)啟動(dòng)知識的朋友到這里應(yīng)該很清楚了,SSBL 就是操作系統(tǒng)在啟動(dòng)過程中的引導(dǎo)程序 boot loader么翰。對于 Linux 而言牺汤,Zynq 的 SSBL 階段和 u-boot 的作用是相同的。具體來說浩嫌,SSBL 的作用就是將 Zynq 所需要的操作系統(tǒng)加載到 DDR 內(nèi)存之中檐迟。
到此,Zynq 的啟動(dòng)與配置就算完成了固该。Zynq 啟動(dòng)過程其實(shí)與傳統(tǒng)的 ARM 開發(fā)過程類似锅减,區(qū)別就在于它是PS + PL 的架構(gòu)糖儡,所以在啟動(dòng)過程中伐坏,額外需要加載二進(jìn)制 bit 流文件。Xilinx 將 Zynq 的啟動(dòng)劃分為3個(gè)階段握联,從結(jié)構(gòu)上看也是科學(xué)合理的桦沉。
總結(jié)
本文主要與大家分享了 Zynq 在非 JTAG 模式下的啟動(dòng)配置流程,旨在讓大家對 Zynq 的三階段啟動(dòng)模式有一個(gè)具體的認(rèn)識金闽,希望大家多多交流纯露。
感謝大家支持!