在電子系統設計中,無任是用CPU作為系統的主要器件,還是用FPGA作為系統的主要器件,系統設計中首先要考慮到的問題就是處理器的啟動加載問題。 XILINX推出的ZYNQ可擴展處理平臺,片內包括兩個高性能的ARM Cortex A9硬核(稱為處理系統processing system (PS))和FPGA(稱為可編程邏輯programmable logic (PL)),在基于該平臺的系統設計時具有極大的靈活性,本文就ZYNQ系統設計時都會遇到啟動加載問題作一個拋磚引玉的描述,如有不當之處還請高手斧正。
一、器件配置單元
ZYNQ器件都帶有一個器件配置單元(device configuration unit (DEVCFG) ),該模塊由PS控制,提供軟件控制下的PS和PL的初始化和配置功能。以前單個FPGA器件提供的下載方法已經不在適用,PL的配置下載必須在PS的參與下進行。
Zynq-7000的器件配置單元包括下面的PS單元:
① CPU
② OCM(引導ROM和共享RAM)
③ 部分頂層總線和外設
④ PS器件配置模塊
在PL側,下面的單元也將參與:
① PLS器件配置邏輯和接口
② 解密/鑒權硬件
③存儲在eFUSE單元或者電池備份RAM(BBRAM)內的解密密鑰
下圖為PS器件配置子系統框圖:
提供的關鍵特性如下:
A.提供3種不同的PS配置方法,包括2種主模式和1種從模式。
① 加密主模式
② 非加密主模式
③ 非加密從模式
B.3種不同的主模式啟動源
① NOR FLASH
② NAND FLASH
③ QSPI FLASH
C:JTAG非加密從模式
D:用AES-256和HMAC (SHA-256)進行PS/PL的加密下載
E:高速配置用的主DMA接口
F:100 MHz 32-bit PCAP流接口
H:SoC加密調試功能
在系統上電復位時,PS采樣專用bootstrapping signals引腳電平來決定從什么方式引導器件。這個引導過程是由一個Cortex A9核執行片內的ROM code實現的,ROM code的功能是初始化L1 cache和基本的總線系統,加載相應的NAND, NOR, Quad-SPI, and PCAP驅動,從指定接口加載第一級BOOTLOADER(the first stage boot loader (FSBL))到片內執行。由于OCM RAM大小有限制,第一級BOOTLOADER大小最大為256KB。用戶只需要按要求提供啟動映像和設置正確的bootstrapping signals引腳電平,系統上電復位時由ROM code自動加載到片內并且程序調轉到啟動映像,此時系統的全部控制功能交由用戶的啟動映像控制,用戶如要實現的第二級BOOTLOADER功能由啟動映像的程序實現。
對于加密配置方法,需要用到AES-256解密代碼和SHA-256簽定(簽名)算法, PS需要用PL內硬連線的AES-256 和SHA-256模塊,這時就要求在加密配置情況下PL就必須上著電,既使系統并不配置PL部分也需上電。器件的加密密鑰可以由用戶選擇是存儲在片內的eFUSE單元(具有掉電非易失性)或者內部電池供電的BBRAM內(具有掉電易失性,適用于安全級別要求更高的場合), 下表總結了配置模式和相關信息:
二、PS非加密主模式配置過程
這種模式下PS啟動映像是直接從外部非易失存儲器(NAND, NOR, Quad-SPI)內加載到片內OCM內,隨后PL映像可以直接配置到PL內,整個過程如下圖示:
PL映像的配置可由配置接口模塊用DMA來高速實現,在非加密情況下速度可以達到400MB/s, 加密情況下速度可以達到100MB/s, 這在FPGA需要部分重配置時十分有用。
三、PS加密主模式配置過程
PS加密主模式用到了位與片內PL部分的硬件AES-256解密模塊和SHA-256模塊來對PS啟動映像進行解密和完整性鑒定,器件密鑰存儲在片內的eFUSE單元或者內部BBRAM內,當PS加載成功后,用戶可以選擇用下面缺省的PL引導過程來配置PL部分,如下圖示:
其中配置PL時的比特流既可以是已經經過AES-256加密的比特流,也可以是先經過PS先進行解密后成為明文比特流送到PL內,這個過程的保密性由用戶選擇使用。
在保密ROM引導階段如果PS完整性鑒定失敗,CPU就立即斷言PROG_B信號而清除PL內容,同時發出一個加密復位信號,這使PS內部的RAM和寄存器進行復位,然后CPU進入睡眠模式,系統只有重復上電才能復位。PL配置發生在BOOT的第二階段,這個過程完成可以由用戶選擇自己的方法在任何時間內來配置一次或多次,并不需要一定按缺省的PL引導過程來配置PL部分。
四、啟動模式引腳
ZYNQ器件有5個啟動模式信號mode[4:0],用來指出從哪里啟動,是否是JTAG模式,PLL是否旁路等。另外有兩個電壓模式信號vmode[1:0]用來指明MIO BANK的電壓模式,vmode[1:0] 信號和mode[4:0] 信號通過上拉和下拉來確定電平值,上拉和下拉電阻建議為20k歐姆,上拉是連接到VCCO_MIO0電壓,下拉是連接到地。系統在釋放PS_POR_B復位腳后這些啟動模式引腳信號會被采樣3個PS_CLK時鐘用來確定啟動方式。vmode[1:0] 信號和mode[4:0] 信號對應的I/O管腳為MIO[8:2],各信號具體含義如下:
① Mode[0] 用來指明是否是JTAG 模正。
② Mode[3:1]用來選擇啟動源,是從NOR Flash還是從NAND Flash還是從QSPI啟動。
③ Mode[4]用來使能PLL。
④ Vmode[1:0] 用來配置I/O BANK電壓。
這些信號和MIO管腳的對應關系如下表表示:
注:上表中X表示不關心。
實際設計中,由于MIO管腳數量有限(只有54個),且只分為兩個BANK(MIO Bank 0對應管腳為PS_MIO[15:0],PS_CLK,PS_POR_B;MIO Bank 1對應管腳為PS_MIO[53:16],PS_VREF_MIO和PS_SRST_B),并不建議系統設計為從并行的NOR Flash啟動,因為這種方式NOR Flash占用的MIO管腳數量大多(大于40個管腳),系統設計為從NAND Flash或QSPI啟動都可以,這兩種方式占用的MIO管腳數量要少些,NAND Flash的優點是容量比較大,缺點是讀寫速度要慢些(典型速度 10MB/s), QSPI也是一種NOR Flash,不過接口是四線串行接口,可以獲得比較高的讀寫速度(典型速度 50MB/s),如果系統希望從其它方式如USB, Ethernet, SD/SDIO等方式啟動,這都需要用戶在第一級啟動映像內自行設計啟動引導代碼。
-
PS
+關注
關注
0文章
73瀏覽量
36480 -
Zynq
+關注
關注
10文章
610瀏覽量
47296
發布評論請先 登錄
相關推薦
詳解Zynq的兩種啟動模式
![<b class='flag-5'>詳解</b><b class='flag-5'>Zynq</b>的兩種<b class='flag-5'>啟動</b>模式](https://file1.elecfans.com/web2/M00/8E/B7/wKgZomTJsm6AEcNUAAA6cEa4Fzk402.jpg)
通過JTAG啟動Linux的方法和腳本
![通過JTAG<b class='flag-5'>啟動</b>Linux的<b class='flag-5'>方法</b>和腳本](https://file1.elecfans.com/web2/M00/B7/D2/wKgaomWE9FuAGlt3AAAJTVenxrE453.png)
Zynq在非JTAG模式下的啟動配置流程
ZYNQ器件的啟動配置方法
ZYNQ 7系列FSBL的啟動過程與配置方法
![<b class='flag-5'>ZYNQ</b> 7系列FSBL的<b class='flag-5'>啟動</b>過程與<b class='flag-5'>配置</b><b class='flag-5'>方法</b>](https://file1.elecfans.com//web2/M00/A6/E9/wKgZomUMQTeAKpdmAABMJ1jePXM089.png)
Xilinx FSBL如何操作啟動Zynq器件
Zynq的啟動與配置過程詳解
![<b class='flag-5'>Zynq</b>的<b class='flag-5'>啟動</b>與<b class='flag-5'>配置</b>過程<b class='flag-5'>詳解</b>](https://file.elecfans.com/web1/M00/DC/25/pIYBAGAJ99-AMtCoAAN5ZXS9VgY700.png)
如何在 Vitis 中調試 Zynq UltraScale 器件啟動鏡像
![如何在 Vitis 中調試 <b class='flag-5'>Zynq</b> UltraScale <b class='flag-5'>器件</b><b class='flag-5'>啟動</b>鏡像](https://file.elecfans.com/web1/M00/F2/3A/pIYBAGC15CeAS5OmAABAG35VisM853.png)
評論