最近礦難,某寶某魚上都出現(xiàn)了大量礦機(jī)控制板。。。ASIC負(fù)責(zé)挖礦,控制板負(fù)責(zé)聯(lián)網(wǎng)、監(jiān)視、控制之類。控制板不乏有各種水果派,像香橙派、樹莓派、狗骨頭之類的所謂“極客玩具”在其之列,想必國內(nèi)水果派廠家活的是相當(dāng)滋潤。。。光靠極客教育哪有什么賺頭,極客大都很窮的,像我這樣看到這么便宜的“zynq開發(fā)板”,便忍不住要跟風(fēng)收一波垃圾了。。。
某魚上EBAZ4205 控制板泛濫,它出自翼比特E9+ 礦機(jī)。它的老版控制卡EBAZ4203 配置與其基本一樣。
下面一大坨都是計(jì)算卡,上面一小塊才是控制板
板子概況
|
|
主控 |
XC7Z010CLG400-1 |
內(nèi)存 |
256MB DDR3,EM6GD16EWKG或者M(jìn)T41K128M16 |
nand |
128MB SLC |
以太網(wǎng) |
百兆網(wǎng)卡,IP101GA |
供電 |
5V也行 |
其他 |
TF卡,UART1,2個(gè)風(fēng)扇口,14針jtag,3個(gè)20pin IO口 |
開發(fā)工程SOC啟動(dòng)配置ZYNQ系列的SOC集成了雙核ARM Cortex-A9和FPGA。整個(gè)SOC分為PS (processing system)和PL (programmable logic)兩部分。PS包括處理器、片上AMBA總線、存儲(chǔ)控制器、部分外設(shè)以及固定的IO口;PL就是FPGA。ZYNQ 7010處理器主頻可以到約600MHz,F(xiàn)PGA有約28K個(gè)LE。
ZYNQ的PS部分可以拋開PL部分而獨(dú)立運(yùn)行,因?yàn)镻S的外設(shè)都默認(rèn)綁定了一些IO口(MIO ),內(nèi)存控制器之類的IO口還是不可更改的,這時(shí)候就可以像開發(fā)其他ARM SOC那樣去玩ZYNQ。MIO是有限的,一些外設(shè)端口沖突的話可以通過EMIO 繞道PL將其引出,這時(shí)候就需要管PL部分了。
ZYNQ的啟動(dòng)分為三步:
BOOT ROM ,根據(jù)引腳配置選擇從哪里啟動(dòng),如QSPI、nand/nor flash、SD卡等。將FSBL (first stage bootloader)加載到片上內(nèi)存里。7010的片上內(nèi)存有256k。
FSBL ,初始化更多的MIO口,初始化DDR,還可以初始化PL部分,然后將應(yīng)用程序搬到DDR中。初始化部分由vivado直接生成,即那個(gè)上萬行的ps7_init.c 。FSBL可以直接用Xilinx SDK的例子工程,相當(dāng)于這些工作都可以點(diǎn)點(diǎn)鼠標(biāo)就完成了。
應(yīng)用程序 。可以直接是用戶的應(yīng)用程序,也可以是又一個(gè)loader,比如uboot之類的,剩下的事情就由程序員自己做決定了。
應(yīng)當(dāng)指出,F(xiàn)SBL相當(dāng)于是uboot SPL的地位。在Xilinx uboot工程中,那個(gè)上萬行的初始化c程序就編譯進(jìn)SPL中去了,所以如果用SDK的FSBL就不需要uboot的SPL了。
這塊板子的R2577 和R2584 電阻用于配置啟動(dòng)設(shè)備。把R2584 焊到R2577 上,將原來nand啟動(dòng)改為SD卡啟動(dòng)。
Vivado操作流程利用Xilinx那套笨重的開發(fā)環(huán)境,helloworld工程完全可以用鼠標(biāo)操作出來,一行代碼都不用寫。。
首先新建個(gè)工程一直next到選擇芯片。選xc7z010clg400-1
接下來就順著左邊欄Flow Navigator 進(jìn)行操作。
Create Board Design點(diǎn)加號(hào)添加ZYNQ7 Processing System :
雙擊出來的zynq7 processing system藍(lán)框框,配置PS系統(tǒng):
添加nand控制器,默認(rèn)就行了:
添加MIO設(shè)置。勾上ENET0、SD0、UART1。注意引腳配置:
設(shè)置外設(shè)時(shí)鐘。把網(wǎng)口改成百兆的:
設(shè)置DDR。幸好我們的MT41K128M16 有默認(rèn)參數(shù)配置:
因?yàn)榘遄拥木W(wǎng)口通過EMIO引出,所以我們需要一個(gè)個(gè)手動(dòng)分配引腳。但是這個(gè)IP是GMII千兆網(wǎng)口,TX RX有8位,而百兆網(wǎng)卡用的MII接口TX RX只有4位,必須顯式地加兩個(gè)concat模塊來將8位轉(zhuǎn)為4位,否則多余的引腳引出了但是不分配IO口,最后生成bitstream時(shí)候會(huì)報(bào)錯(cuò)。
將GMII的TX、RX引到各自的concat模塊處,將GMII其他引腳以及MDIO引出:右鍵點(diǎn)擊Make External
將FCLK_CLK0 跟M_AXI_GP0_ACLK 連起來,最后點(diǎn)擊上方欄的Run Block Automation 完成剩下的工作。
完成后的效果:
左邊欄Generate Block Design先Generate Block Design ,然后右鍵Source 框下面的bd文件,Create HDL Wrapper :
左邊欄Run Synthesis先綜合一次,然后打開Open Synthesized Design ->Constraint Wizard ,分配引腳。這時(shí)需要新建一個(gè)constraint文件。
將網(wǎng)口的引腳都設(shè)置為LVCMOS33 電平,然后逐個(gè)分配引腳。。。
設(shè)置完成后Ctrl-S 保存,約束文件生成如下:
set_property IOSTANDARD LVCMOS33 [get_ports ENET0_GMII_RX_CLK_0]
...
set_property PACKAGE_PIN U14 [get_ports ENET0_GMII_RX_CLK_0]
set_property PACKAGE_PIN U15 [get_ports ENET0_GMII_TX_CLK_0]
set_property PACKAGE_PIN W19 [get_ports {ENET0_GMII_TX_EN_0[0]}]
set_property PACKAGE_PIN W18 [get_ports {enet0_gmii_txd[0]}]
set_property PACKAGE_PIN Y18 [get_ports {enet0_gmii_txd[1]}]
set_property PACKAGE_PIN V18 [get_ports {enet0_gmii_txd[2]}]
set_property PACKAGE_PIN Y19 [get_ports {enet0_gmii_txd[3]}]
set_property PACKAGE_PIN W16 [get_ports ENET0_GMII_RX_DV_0]
set_property PACKAGE_PIN W15 [get_ports MDIO_ETHERNET_0_0_mdc]
set_property PACKAGE_PIN Y14 [get_ports MDIO_ETHERNET_0_0_mdio_io]
set_property PACKAGE_PIN Y16 [get_ports {enet0_gmii_rxd[0]}]
set_property PACKAGE_PIN V16 [get_ports {enet0_gmii_rxd[1]}]
set_property PACKAGE_PIN V17 [get_ports {enet0_gmii_rxd[2]}]
set_property PACKAGE_PIN Y17 [get_ports {enet0_gmii_rxd[3]}]
然后再綜合一次。。。
左邊欄Run Implementation 和 Generate Bitstream要跑一段時(shí)間。。。
輸出設(shè)計(jì)File ->Export ->Export Hardware
記得勾上Include Bitstream 。
進(jìn)入SDKFile ->Launch SDK
SDK操作流程首先需要新建FSBL。File ->New ->Application Project ,Next到Templates ,選Zynq FSBL :
然后它會(huì)自動(dòng)開始編譯。。。
然后才新建helloworld。。File ->New ->Application Project ,Next到Templates ,選Hello World 。它也會(huì)自動(dòng)開始編譯,不出意外的話就完事了。
最后生成啟動(dòng)文件BOOT.bin左邊欄右鍵helloworld工程,Create Boot Image 。可以看到這個(gè)啟動(dòng)文件包括了三部分:
- fsbl
- bitstream
- 應(yīng)用程序
點(diǎn)亮板子將一張SD卡格式化為fat文件系統(tǒng),將bootimage/BOOT.bin 丟進(jìn)去,插上電就能啟動(dòng)了。
測(cè)試網(wǎng)口SDK里面新建lwIP Echo Server 工程,等它編譯完,生成BOOT.bin,拷到SD卡里。插好網(wǎng)線,在終端中telnet 它的7號(hào)端口,輸入一行,回車,然后它就將你輸入的東西返回來了。。。
|