啟動(dòng)過(guò)程
設(shè)備配置包含用于初始化和配置ps和pl的所有方法及過(guò)程。在軟件控制下,ps內(nèi)的DevC提供用于初始化和配置ps和pl的手段和方法,在zynq中提供兩個(gè)模塊用于控制配置過(guò)程:
BootROM,一個(gè)靜態(tài)存儲(chǔ)塊器塊,當(dāng)上電復(fù)位和暖復(fù)位后,有Cortex-A9的CPU執(zhí)行這個(gè)內(nèi)置程序;
設(shè)備配置單元:用于控制JTAG調(diào)試訪(fǎng)問(wèn)和提供連接到AES、HMAC和PCAP模塊的接口,用于實(shí)現(xiàn)對(duì)芯片內(nèi)的pl的配置及數(shù)據(jù)的解密。
在ps的控制下,可以實(shí)現(xiàn)安全或非安全的配置所有ps和pl。通過(guò)zynq提供的JTAG接口,用戶(hù)可以在外部主機(jī)的控制下對(duì)zynq進(jìn)行配置,zynq不支持最開(kāi)始就配置pl的過(guò)程。對(duì)zynq的配置過(guò)程至少包含兩個(gè)階段,但是通常要求3個(gè)階段。
階段0:該階段也稱(chēng)為BootROM,該階段控制初始設(shè)備的啟動(dòng)。BootROM是上電復(fù)位或暖復(fù)位后,處理器所執(zhí)行的用戶(hù)不可修改的代碼,該代碼已經(jīng)固化到zynq的BootROM中;
階段1:在該階段,通常執(zhí)行第一級(jí)啟動(dòng)引導(dǎo)程序。但是,它也可以是任何用戶(hù)控制的代碼;
在該階段,通常執(zhí)行用戶(hù)自己編寫(xiě)的軟件程序,但是,也可以是第二級(jí)的啟動(dòng)引導(dǎo)程序,該階段完全是在用戶(hù)的控制下實(shí)現(xiàn)的。
zynq的BootROM
BootROM特性:
提供3種不同的方法,用于配置PS:兩個(gè)主模式和一個(gè)從模式,即安全、加密的鏡像、主模式;非安全的主模式;通過(guò)JTAG的非安全從模式;
支持4種不同的外部啟動(dòng)源:Quad-SPI Flash、NAND Flash、NOR Flash、SD;
支持使用AES-256和HMAC(SHA-256)的PS安全配置;
支持Soc調(diào)試安全性;
從NOR和QSPI芯片內(nèi)執(zhí)行配置過(guò)程。
當(dāng)上電復(fù)位后,啟動(dòng)PS配置過(guò)程,當(dāng)禁止JTAG模式時(shí),zynq內(nèi)的Cortex-A9處理器從片內(nèi)的BootROM開(kāi)始執(zhí)行代碼,BootROM包含用于驅(qū)動(dòng)NADN、NOR、Quad-SPI、SD和PCAP的基本程序代碼。
在BootROM中并不執(zhí)行對(duì)外設(shè)的初始化操作,在階段1或該階段之后zynq才對(duì)其他外設(shè)進(jìn)行初始化操作,考慮到安全因素,當(dāng)脫離復(fù)位狀態(tài)后,Cortex-A9處理器總是PS內(nèi)所有其他主設(shè)備模塊內(nèi)的第一個(gè)設(shè)備,當(dāng)正在執(zhí)行BootROM時(shí),禁止執(zhí)行JTAG,以保證安全性操作。
BootROM代碼也負(fù)責(zé)加載第一啟動(dòng)鏡像文件,zynq內(nèi)的硬件支持加載多級(jí)用戶(hù)啟動(dòng)鏡像,在第一級(jí)啟動(dòng)之后,用戶(hù)負(fù)責(zé)進(jìn)一步實(shí)現(xiàn)用戶(hù)啟動(dòng)鏡像的加載,當(dāng)BootROM將控制權(quán)移交給fsbl后,用戶(hù)負(fù)責(zé)進(jìn)一步實(shí)現(xiàn)用戶(hù)啟動(dòng)鏡像的加載,當(dāng)復(fù)位操作時(shí),才會(huì)重新執(zhí)行BootROM內(nèi)的代碼。
BootROM支持加密和不加密的鏡像,此外,當(dāng)使用芯片內(nèi)執(zhí)行特性時(shí),當(dāng)從線(xiàn)性flash、NOR或QSP直接復(fù)制鏡像或執(zhí)行后,BootROM支持從OCM開(kāi)始執(zhí)行階段1鏡像。
在安全啟動(dòng)CPU時(shí),從安全BootROM運(yùn)行代碼,并且,對(duì)進(jìn)入的用戶(hù)PS鏡像鏡像解碼和認(rèn)證,將其保存到OCM RAM中,然后,分支進(jìn)入它,在非安全啟動(dòng)CPU時(shí),從BootROM運(yùn)行代碼,如果使用了XIP特性時(shí),在分支跳轉(zhuǎn)到OCM ROM或Flash內(nèi)的用戶(hù)鏡像時(shí),禁止所有的安全啟動(dòng)特性,除非使用帶有XIP的啟動(dòng),一般將PS啟動(dòng)鏡像限制到192KB范圍內(nèi)。
隨后用于PS/PL啟動(dòng)階段的過(guò)程,都是用戶(hù)的責(zé)任,并且處于用戶(hù)的控制下。在zynq中,不允許用戶(hù)訪(fǎng)問(wèn)BootROM中的代碼,在完成階段1安全啟動(dòng)的過(guò)程后,用戶(hù)可以繼續(xù)執(zhí)行后續(xù)的安全/非安全啟動(dòng)階段,如果一開(kāi)始執(zhí)行的就是非安全的第一個(gè)階段,隨后只能執(zhí)行非安全階段的啟動(dòng)。
通過(guò)PL內(nèi)硬接線(xiàn)的AES-256和SHA-256模塊,PS實(shí)現(xiàn)解密和認(rèn)證,由于這個(gè)原因,在安全啟動(dòng)任何階段,即使只對(duì)PS進(jìn)行配置,也必須給PL上電,這樣,用戶(hù)就可以通過(guò)片上的eFUSE單元或片上BRAM,選擇器件的密鑰。
在zynq內(nèi)支持5種可用的啟動(dòng)設(shè)備,包括NAND、NOR、SD、Quad-SPI和JTAG,其中前4種啟動(dòng)源用于主模式啟動(dòng)。
在主模式啟動(dòng)過(guò)程中,Cortex-A9處理器負(fù)責(zé)將鏡像文件從外部非易失性存儲(chǔ)器加載到片內(nèi)的PS中。
JTAG只能用于從模式啟動(dòng)過(guò)程,JTAG只支持非安全啟動(dòng),一個(gè)外部的電腦作為一個(gè)主設(shè)備,通過(guò)JTAG連接,將啟動(dòng)鏡像加載到OCM,當(dāng)加載啟動(dòng)鏡像時(shí),PS CPU保持空閑模式。
BootROM的高層次配置流程如圖所示。
zynq的器件配置接口
設(shè)備配置接口結(jié)構(gòu)DevC模塊由3個(gè)獨(dú)立操作的主模塊構(gòu)成:
用于連接PL配置邏輯的AXI-PACP接口;
設(shè)備安全性管理單元;
一個(gè)XDAC接口;
設(shè)備配置接口包含一個(gè)APB接口,主機(jī)使用APB接口配置這3個(gè)模塊,并且訪(fǎng)問(wèn)整個(gè)狀態(tài)以及實(shí)現(xiàn)與PL XADC通信。
AXI-PCAP橋:
AXI-PCAP橋?qū)?2位AXI格式的數(shù)據(jù)轉(zhuǎn)換成32位的PCAP協(xié)議,反之亦然,這個(gè)橋支持配置數(shù)據(jù),以并發(fā)和非并發(fā)的方式下載和上傳,如圖所示。
在A(yíng)XI和PCAP接口之間存在一個(gè)發(fā)送和接收FIFO緩沖區(qū),圖中的DMA引擎用于在FIFO和存儲(chǔ)器設(shè)備(OCM、DDR存儲(chǔ)器,或者外設(shè)存儲(chǔ)器的一個(gè))之間移動(dòng)數(shù)據(jù)。
當(dāng)通過(guò)PCAP接口移動(dòng)數(shù)據(jù)時(shí),必須給zynq的PL一端供電,通過(guò)DevC控制器寄存器的PCAP MODE和PCAP PR比特位,使能PCAP接口,如果發(fā)送加密數(shù)據(jù),還應(yīng)該設(shè)置QUARTER PCAP RATE EN比特位。
通過(guò)DevC模塊內(nèi)建的DMA引擎,在PCAP接口之間傳輸數(shù)據(jù)。為了啟動(dòng)一個(gè)數(shù)據(jù)傳輸過(guò)程,必須按照下面的順序?qū)?個(gè)DMA寄存器:DMA源地址寄存器;DMA目的地址寄存器;DMA源長(zhǎng)度寄存器;DMA目的長(zhǎng)度寄存器。
為了通過(guò)PCAP將數(shù)據(jù)傳輸?shù)絇L,目的地址應(yīng)該設(shè)置為0xffffffff。類(lèi)似的,通過(guò)PCAP接口從PL讀數(shù)據(jù),源地址應(yīng)該設(shè)置為0xffffffff,必須通過(guò)PCAP接口發(fā)送加密的PS鏡像,這是由于A(yíng)ES和HMAC引擎都駐留在PL一端。在該情況下,DMA源地址應(yīng)該設(shè)置為一個(gè)外部的存儲(chǔ)器接口,而目標(biāo)地址應(yīng)該設(shè)置為OCM。
DevC的DMA引擎能用于加載不安全的PS鏡像,在加載以前,在雜項(xiàng)控制寄存器內(nèi)設(shè)置PCAP LPBK比特位,這個(gè)比特位使能內(nèi)部的環(huán)路,旁路掉PCAP接口,在使用PCAP前,需要再次禁止該比特位,DMA源地址應(yīng)該設(shè)置為一個(gè)外部存儲(chǔ)器,而目的地址應(yīng)該設(shè)置為一個(gè)OCM或一個(gè)有效的外部存儲(chǔ)器接口,如DDR。
PCAP接口也用來(lái)回讀PL配置。為了執(zhí)行回讀操作,PS必須運(yùn)行軟件代碼,使能產(chǎn)生正確的PL回讀指令,使用兩個(gè)DMA訪(fǎng)問(wèn)周期,回讀一個(gè)PL配置。
設(shè)備安全性管理:
DevC包含著一個(gè)安全策略模塊,提供如下功能:
監(jiān)控系統(tǒng)安全性,當(dāng)檢測(cè)到?jīng)_突的狀態(tài)時(shí),能確認(rèn)一個(gè)安全復(fù)位,這個(gè)狀態(tài)能表示不一致的系統(tǒng)配置或篡改;
通過(guò)APB接口控制和監(jiān)視PL配置邏輯;
控制ARM CoreSight的調(diào)試器訪(fǎng)問(wèn)端口DAP和調(diào)試級(jí);
提供片上ROM控制。
XADC接口:
讀和寫(xiě)XADC寄存器;
15個(gè)深度的寫(xiě)命令FIFO和15個(gè)深度的讀FIFO(32位寬度);
可編程的FIFO級(jí)中斷;
報(bào)警中斷;
過(guò)溫度中斷;
PS主設(shè)備非安全啟動(dòng)
在這個(gè)啟動(dòng)模式下,PS作為主設(shè)備。BootROM從選擇的外部存儲(chǔ)器加載一個(gè)純文本PS鏡像,如圖3.2所示,在這種情況下,并不要求PL上電,可以使用PS鏡像立即加載或以后加載PL比特流。
配置流程主要步驟如下:
設(shè)備上電復(fù)位;
BootROM執(zhí)行:1,讀自舉程序,以確定外部存儲(chǔ)器接口類(lèi)型;2,讀啟動(dòng)頭部信息,以確定加密的狀態(tài)和鏡像目標(biāo);
BootROM使用DevC的DMA,將FSBL加載到OCM或其他有效的目的地址;
通過(guò)PCAP,F(xiàn)SBL加載PL比特流。
PS主設(shè)備安全啟動(dòng)
在該啟動(dòng)模式下,PS作為主設(shè)備,BootROM從所選擇的外部存儲(chǔ)器加載一個(gè)加密的PS鏡像,如圖3.3所示,由于A(yíng)ES和HMAC引擎駐留在PL中,因此要求PL上電來(lái)初始化啟動(dòng)序列,在嘗試解密FSBL前,BootROM驗(yàn)證PL已經(jīng)上電,當(dāng)啟動(dòng)PS后,可以使用一個(gè)加密的比特流配置,或者斷電以后再配置PL。
下面給出了配置流程的詳細(xì)步驟:
設(shè)備上電復(fù)位;
BootROM執(zhí)行:1,讀自舉程序,以確定外部存儲(chǔ)器接口;2,讀啟動(dòng)頭部,以確定加密的狀態(tài)(安全);3,確認(rèn)PL上電,開(kāi)始解密FSBL;
BootROM使用DevC DMA引擎,通過(guò)PCAP,將加密的FSBL發(fā)送的PL內(nèi)的AES和HMAC;
PL使用PCAP將解密的FSBL返回到PS,然后,在此將其加載到片內(nèi)OCM;
關(guān)閉BootROM,釋放CPU用于控制FSBL;
FSBL使用一個(gè)加密流配置PL。
-
Zynq
+關(guān)注
關(guān)注
10文章
610瀏覽量
47224
原文標(biāo)題:ZYNQ的啟動(dòng)原理和配置
文章出處:【微信號(hào):gh_873435264fd4,微信公眾號(hào):FPGA技術(shù)聯(lián)盟】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論