Xilinx Zynq系列是帶有ARM Cortex-A系列CPU核的FPGA,前幾年流落到二手市場(chǎng)上的“礦板”就以Zynq 7010為核心,可以說(shuō)是最廉價(jià)的Zynq實(shí)驗(yàn)平臺(tái)了。淘個(gè)這樣的板子,再另外找個(gè)Xilinx的JTAG就可以玩FPGA和ARM Linux. 因?yàn)橥娴娜硕?,網(wǎng)上有資料,還有別人做過(guò)的擴(kuò)展板可以參考。本壇大佬們?cè)缇屯孢^(guò)了。我三年前就買了一塊,但一直是閑置狀態(tài),直到現(xiàn)在才想來(lái)搞搞。
這塊EBAZ4025板子接上12V電源就可以工作了,有RJ45網(wǎng)口,板子上有焊盤可以自己焊上TF卡座、UART接口、JTAG口,就相當(dāng)于一個(gè)完整的ARM Linux板子(板載DDR3 SDRAM 256MB,NAND Flash 128MB),還有若干FPGA I/O引出來(lái)到雙列排針座,方便自己分配用途。
EBAZ4025通電以后上面的Linux就啟動(dòng)了,通過(guò)UART連接可以看到uboot和Linux輸出的信息。我是要把它作為FPGA開發(fā)來(lái)用的,所以先直接焊上JTAG排針連接調(diào)試器,電腦軟件可以識(shí)別到JTAG 掃描鏈上有兩個(gè)設(shè)備,一個(gè)是FPGA,一個(gè)是ARM CPU。
Zynq的內(nèi)部分為兩個(gè)系統(tǒng),一個(gè)叫PS,就是ARM CPU以及外設(shè),包括DDR內(nèi)存控制器、DMA等等這些ARM運(yùn)行依賴的部件;另一個(gè)系統(tǒng)叫PL,就相當(dāng)于傳統(tǒng)的FPGA. 這兩部分之間有很多種方式可以通信,就可以比結(jié)合FPGA和ARM的各自優(yōu)點(diǎn)來(lái)處理復(fù)雜的任務(wù)了。
Zynq 7000系列的IO引腳也分為PS和PL各自管理的的,PS部分引腳有固定的用途,和開發(fā)FPGA時(shí)寫引腳約束不同。根據(jù)礦板的電路圖了解到,兩個(gè)LED是連接到PL部分的,而UART直接接的是PS的MIO。
學(xué)習(xí)Zynq的開發(fā)可以參考網(wǎng)上的教程。這玩意門檻稍微高一點(diǎn),先得下載Vivado安裝,為了開發(fā)ARM的程序還要安裝SDK,都是很龐大的軟件。如果熟悉了的話Vivado操作起來(lái)也很快,但頭幾次么……
先創(chuàng)建一個(gè)工程,選擇器件型號(hào),這和其它FPGA開發(fā)思路是一樣的。
按照教程,然后是Create Block Design
添加IP——ZYNQ7 Processing System. 這種圖形化的block design方式我最初學(xué)FPGA的時(shí)候就用,直觀容易理解。
加上這個(gè)IP之后框圖上就出現(xiàn)了一個(gè)模塊,代表PS部分。
在圖上雙擊這個(gè)ZYNQ Processing System模塊,就打開配置窗口,進(jìn)行時(shí)鐘、IO、內(nèi)存等設(shè)置了。這些需要根據(jù)礦板上的資源和連接關(guān)系來(lái)定。
首先這里有個(gè)PS部分的結(jié)構(gòu)圖,可以了解有那些片上外設(shè)可以供CPU用的。第一個(gè)實(shí)驗(yàn)為了讓程序能打印輸出,需要用UART。
看看時(shí)鐘配置,默認(rèn)的輸入時(shí)鐘33.333MHz 和礦板一致,就不用調(diào)整了。CPU和DDR的時(shí)鐘頻率用默認(rèn)的不會(huì)有問(wèn)題。PS部分給PL部分提供的時(shí)鐘是實(shí)驗(yàn)需要的,默認(rèn)輸出一個(gè)50MHz。
DDR的配置,需要根據(jù)實(shí)際板子上的芯片調(diào)整一下,128M x16-bit. 我不確定SDK編寫的程序是要在DDR內(nèi)存中運(yùn)行還是PS的片上RAM中運(yùn)行,所以DDR還是要配置的。
MIO的配置,是為了要給UART分配引腳。根據(jù)電路圖,UART是連接在A16和F15這兩個(gè)腳的,查Xilinx手冊(cè)得知是PS_MIO24和PS_MIO25,就在MIO Configuration中配置使用UART1(因?yàn)閁ART0沒(méi)有MIO 24,25的映射)。
配置好之后Run Block Automation,自動(dòng)生成必要的接口。
教程上說(shuō)配置好之后要連一根線,把FCLK_CLK0和M_AXI_GP0_ACLK連起來(lái)。前者是Zynq PS輸出的時(shí)鐘(內(nèi)部PLL從晶振給的時(shí)鐘生成,可以給PL用),后者我理解是AXI總線的時(shí)鐘。這里并不使用總線,我覺(jué)得不連也沒(méi)關(guān)系。
接下來(lái),按照教程說(shuō)的是要Create HDL Wrapper,注意對(duì)話框中選擇允許用戶修改,不然自己編輯的會(huì)被覆蓋掉。
做這一步的目的是把PS外面再包上一層,這樣就方便加入自己編寫的邏輯了。下面我要編寫一點(diǎn)邏輯來(lái)點(diǎn)LED,就直接加到 system_wrapper.v 里面去。
注意Create HDL Wrapper之后,系統(tǒng)的層次結(jié)構(gòu)變化了,頂層名稱從design_1變成了design_1_wrapper。
由于礦板的PL是沒(méi)有帶晶振的(有空焊盤沒(méi)裝),要看FPGA跑起來(lái)的效果需要外接時(shí)鐘信號(hào)到排針上面。實(shí)際在已經(jīng)創(chuàng)建的PS模塊上,F(xiàn)CLK_CLK0就是一個(gè)時(shí)鐘信號(hào),現(xiàn)在我要把它給PL用,還需要?jiǎng)?chuàng)建一個(gè)port把它引出來(lái),不然頂層看不到。
在圖上創(chuàng)建輸出port, 命名叫PS_CLK0, 連接到時(shí)鐘信號(hào)上。保存之后,design_1.v文件(自動(dòng)生成的)并沒(méi)有體現(xiàn)新的輸出端口。于是我嘗試一下“Generate Block Design”操作,看看是否更新。
結(jié)果這樣是能重新產(chǎn)生design_1.v的:
然后我就在頂層的design_1_wrapper.v里面加自己的東西了:先加上兩個(gè)輸出口給礦板上的紅綠LED。
再寫一個(gè)計(jì)數(shù)器,利用PS引出的時(shí)鐘計(jì)數(shù),讓LED能閃起來(lái)。
這樣第一個(gè)實(shí)驗(yàn)工程的邏輯就設(shè)計(jì)完了,可以進(jìn)行FPGA綜合、實(shí)現(xiàn)和生成二進(jìn)制碼的流程了。
這里還缺少一件事情:礦板上的 LED6 (W13, W14引腳)是連接在FPGA IO上的,不是PS MIO,因此是像普通FPGA那樣分配引腳的方式。而DDR、MIO則是固定引腳,不需要自己選。假如LED是接在MIO上,那么我們就要用軟件去選擇GPIO訪問(wèn)來(lái)點(diǎn)亮了,不屬于FPGA邏輯部分。
在綜合之后,可以查看design,然后手工分配LED使用的引腳。也可以直接寫一個(gè)約束文件(.xdc)把引腳約束用Tcl命令寫上去。
在最后Generate bitstream 生成bit文件之前看一下報(bào)告,確認(rèn)引腳的分配是生效了的。
最后得到了.bit文件,就可以連接好JTAG之后,打開Hardware Manager, 將生成的design_1_wrapper.bit下載到FPGA中了。這個(gè)操作和Xilinx Spartan/Artix系列是相似的。
若此時(shí)看到了LED閃爍,說(shuō)明PL部分的邏輯是工作的了。
此外,下載bit文件之后,從UART終端看到的Linux打印信息還在活動(dòng),說(shuō)明PL部分的重配置沒(méi)有影響PS的運(yùn)行。關(guān)于PL和PS的關(guān)系我的了解還不夠多。
如果單純把Zynq當(dāng)成FPGA來(lái)用,不使用PS部分,也是可以的。注意,這樣也就不能用PS提供的時(shí)鐘了,需要從PL的引腳輸入時(shí)鐘信號(hào)。開發(fā)工具用Vivado和ISE都可以,我另外進(jìn)行過(guò)嘗試。
審核編輯:劉清
-
ARM技術(shù)
+關(guān)注
關(guān)注
0文章
22瀏覽量
7476 -
UART接口
+關(guān)注
關(guān)注
0文章
124瀏覽量
15650 -
FPGA開發(fā)板
+關(guān)注
關(guān)注
10文章
124瀏覽量
31824 -
JTAG口
+關(guān)注
關(guān)注
0文章
6瀏覽量
1868
原文標(biāo)題:多少“礦板”吃灰中:Zynq學(xué)習(xí)筆記——“礦板”小試FPGA開發(fā)流程
文章出處:【微信號(hào):電子工程世界,微信公眾號(hào):電子工程世界】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
AnDAPT為Xilinx Zynq平臺(tái)FPGA和SoC設(shè)備推出完整電源解決方案

用于 Xilinx FPGA Zynq 7 的電源解決方案
面向Xilinx Zynq FPGA應(yīng)用的PMP9335參考設(shè)計(jì)
基于Xilinx Zynq SoC的“小傻瓜(Snickerdoodle)”開發(fā)套件
用于 Xilinx FPGA Zynq 7 的電源解決方案

FPGA開發(fā)流程詳細(xì)解析
從賽靈思FPGA設(shè)計(jì)流程看懂FPGA設(shè)計(jì)

使用Xilinx SDK進(jìn)行Zynq裸金屬應(yīng)用程序開發(fā)
基于Xilinx Zynq SoC的“小傻瓜(Snickerdoodle)”開發(fā)套件
ZYNQ7020的PS端的基本開發(fā)流程
用于Xilinx FPGA Zynq7的電源解決方案

面向Xilinx Zynq FPGA應(yīng)用的多路降壓20W電源參考設(shè)計(jì)

xilinx ZYNQ7000系列基本開發(fā)流程之PS端

評(píng)論