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