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