編者注:這是Adam Taylor規劃的Zynq-7000 All Programmable SoC實際操作教程系列的第二部分。Adam經常為Xcell雜志撰稿,他撰寫了第82期介紹Zynq SoC設計的封面報道,以及本期中介紹XPE和XPA的文章(見第46頁)。同時他還為All Programmable Planet撰寫博客。
Zynq™-7000 All Programmable SoC在單個器件上實現了ARM處理功能與FPGA邏輯獨特的組合,因此需要雙重的配置過程,同時需要考慮處理器系統和可編程邏輯。工程師會發現,其配置順序與傳統的賽靈思FPGA稍有差別。盡管如此,方法仍是相似的,生成引導鏡像和完成配置存儲器編程的難度不大。
雖然標準的FPGA配置實踐一般只需要FPGA bit文件,但是如果您想最大限度地利用Zynq SoC的優勢,還需要添加另一種配置文件,即軟件可執行與可鏈接格式(ELF)文件。FPGAbit文件用于定義設計中可編程邏輯部分的行為,而ELF文件則是處理系統將要執行的軟件程序。
下面讓我們來看看如何在Zynq SoC上實現裸機(無操作系統)軟件應用。
配置概覽
在Zynq SoC中,處理系統(PS)處于主控地位,因此負責配置器件的可編程邏輯(PL)側。(唯一例外的情況是在使用JTAG接口進行配置時。)這就是說,如果需要,您可以在可編程邏輯側不加電的情況下給處理系統加電并使之運行,從而降低系統的總功耗。當然如果需要使用Zynq SoC的PL側,您也需要給它加電。
軟件應用程序和FPGA bit文件都存儲在連接到處理系統的同一配置存儲器器件中。處理系統可以通過多種非易失性存儲器類型為配置提供支持,包括quad SPI flash、NANDflash、NOR flash和SD卡等。此外,您還可以和其它任何器件一樣,通過JTAG配置系統。
因此,Zynq SoC按照典型的處理器啟動順序配置器件兩側。首先從不可修改的內部的boot ROM運行。該boot ROM包含用于支持非易失性存儲器的驅動程序。您可通過非易失性存儲器中的報頭(header)對boot ROM加以配置。報頭標記著配置鏡像的起始點,是引導ROM首先要查找的。報頭定義了boot ROM可以實現的一些啟動選項,直接在flash上運行程序(execute in place)(但是并不適用于所有類型的存儲器)、第一階段引導載入程序(FSBL)偏移和加密配置等。這個報頭解析和處理的目的,是確保引導ROM的工作模式與配置存儲器的格式相兼容。
對于具體設計而言,用戶可以選擇加密或非加密的配置方法。引導ROM報頭能夠支持和定義這兩種模式。在加密配置下,必須給器件的可編程邏輯部分加電,將其作為硬件宏AES和SHA。您需要這兩個宏進行加密,而且必須把它們放置在器件的可編程邏輯側。
在配置的下一階段,您需要提供FSBL,用于在加載軟件應用和配置可編程邏輯之前,根據Xilinx Platform Studio(XPS)的定義,配置處理器上的DDR存儲器和其它外設。總體而言,FSBL負責完成四項主要任務:
l 使用XPS提供的信息,初始化處理系統
l 如果有提供bit文件,對Zynq SoC的可編程邏輯側進行編程
l 在使用操作系統的情況下,加載第二階段引導載入程序(SSBL)到DDR,或加載裸機應用到DDR
l 開始執行SSBL或裸機應用。
您可通過處理器配置訪問端口(PCAP)為Zynq SoC的可編程邏輯(PL)側進行配置,能夠支持部分或者完全的可編程邏輯配置。這就意味著,只要處理系統啟動并進入運行狀態,就可以在任何時候對FPGA進行編程。此外,如果您在可能產生單事件功能中斷(SEFI)的工作環境中使用器件時,PCAP還可以讓您回讀并檢查錯誤。
為了給Zynq SoC創建可引導鏡像,還需要至少下列功能:
1. 用于控制引導BOM設置的引導ROM報頭(例如,現場執行、加密、四通道SPI配置、FSBL偏移和鏡像長度)
2. 第一階段引導載入程序(FSBL)
3. 可編程邏輯bit文件
4. 用于處理系統側的軟件應用(ELF文件)
和其它所有的賽靈思FPGA一樣,Zynq SoC器件使用多個模式引腳判斷存儲程序的存儲器類型以及其它重要的系統設置。這些模式引腳共享器件處理系統側的多用途I/O引腳(MIO)。總體而言,映射到MIO的有7個模式引腳[8:2]。頭四個用于定義引導模式。第五個用于定義PLL是否在使用,第六個和第七個用于定義加電過程中MIO bank 0和bank 1的分組電壓。第一階段引導載入程序(FSBL)可以把MIO bank 0和bank 1定義的電壓標準更改為應用的正確電壓標準。但是如果您是從頭開始設計系統,應確保加電過程中使用的電壓不會損壞連接到這些引腳的器件。