zynq[1] 礦板helloworld

最近礦難,某寶某魚上都出現了大量礦機控制板。。。ASIC負責挖礦,控制板負責聯網、監視、控制之類。控制板不乏有各種水果派,像香橙派、樹莓派、狗骨頭之類的所謂“極客玩具”在其之列,想必國內水果派廠家活的是相當滋潤。。。光靠極客教育哪有什麼賺頭,極客大都很窮的,像我這樣看到這麼便宜的“zynq開發板”,便忍不住要跟風收一波垃圾了。。。

某魚上EBAZ4205控制板氾濫,它出自翼比特E9+礦機。它的老版控制卡EBAZ4203配置與其基本一樣。

 
ebaz4205
ebaz4205

下面一大坨都是計算卡,上面一小塊纔是控制板

板子概況

 
ebaz4205
ebaz4205
   
主控 XC7Z010CLG400-1
內存 256MB DDR3,EM6GD16EWKG或者MT41K128M16
nand 128MB SLC
以太網 百兆網卡,IP101GA
供電 5V也行
其他 TF卡,UART1,2個風扇口,14針jtag,3個20pin IO口

開發工程

SOC啓動配置

ZYNQ系列的SOC集成了雙核ARM Cortex-A9和FPGA。整個SOC分爲PS(processing system)和PL(programmable logic)兩部分。PS包括處理器、片上AMBA總線、存儲控制器、部分外設以及固定的IO口;PL就是FPGA。ZYNQ 7010處理器主頻可以到約600MHz,FPGA有約28K個LE。

 
zynq
zynq

 

ZYNQ的PS部分可以拋開PL部分而獨立運行,因爲PS的外設都默認綁定了一些IO口(MIO),內存控制器之類的IO口還是不可更改的,這時候就可以像開發其他ARM SOC那樣去玩ZYNQ。MIO是有限的,一些外設端口衝突的話可以通過EMIO繞道PL將其引出,這時候就需要管PL部分了。

ZYNQ的啓動分爲三步:

  • BOOT ROM,根據引腳配置選擇從哪裏啓動,如QSPI、nand/nor flash、SD卡等。將FSBL(first stage bootloader)加載到片上內存裏。7010的片上內存有256k。
  • FSBL,初始化更多的MIO口,初始化DDR,還可以初始化PL部分,然後將應用程序搬到DDR中。初始化部分由vivado直接生成,即那個上萬行的ps7_init.c。FSBL可以直接用Xilinx SDK的例子工程,相當於這些工作都可以點點鼠標就完成了。
  • 應用程序。可以直接是用戶的應用程序,也可以是又一個loader,比如uboot之類的,剩下的事情就由程序員自己做決定了。

應當指出,FSBL相當於是uboot SPL的地位。在Xilinx uboot工程中,那個上萬行的初始化c程序就編譯進SPL中去了,所以如果用SDK的FSBL就不需要uboot的SPL了。

這塊板子的R2577R2584電阻用於配置啓動設備。把R2584焊到R2577上,將原來nand啓動改爲SD卡啓動。

 
vivado
vivado

Vivado操作流程

利用Xilinx那套笨重的開發環境,helloworld工程完全可以用鼠標操作出來,一行代碼都不用寫。。

首先新建個工程

一直next到選擇芯片。選xc7z010clg400-1

 
vivado
vivado

接下來就順着左邊欄Flow Navigator進行操作。

 
vivado
vivado

Create Board Design

點加號添加ZYNQ7 Processing System:

 
vivado
vivado

雙擊出來的zynq7 processing system藍框框,配置PS系統:

  • 添加nand控制器,默認就行了:

     
    vivado
    vivado
  • 添加MIO設置。勾上ENET0、SD0、UART1。注意引腳配置:

     
    vivado
    vivado
  • 設置外設時鐘。把網口改成百兆的:

     
    vivado
    vivado
  • 設置DDR。幸好我們的MT41K128M16有默認參數配置:

     
    vivado
    vivado

因爲板子的網口通過EMIO引出,所以我們需要一個個手動分配引腳。但是這個IP是GMII千兆網口,TX RX有8位,而百兆網卡用的MII接口TX RX只有4位,必須顯式地加兩個concat模塊來將8位轉爲4位,否則多餘的引腳引出了但是不分配IO口,最後生成bitstream時候會報錯。

 
vivado
vivado

將GMII的TX、RX引到各自的concat模塊處,將GMII其他引腳以及MDIO引出:右鍵點擊Make External

 
vivado
vivado

FCLK_CLK0M_AXI_GP0_ACLK連起來,最後點擊上方欄的Run Block Automation完成剩下的工作。

 
vivado
vivado

完成後的效果:

 
vivado
vivado

左邊欄Generate Block Design

Generate Block Design,然後右鍵Source框下面的bd文件,Create HDL Wrapper

 
vivado
vivado

左邊欄Run Synthesis

先綜合一次,然後打開Open Synthesized Design->Constraint Wizard,分配引腳。這時需要新建一個constraint文件。

將網口的引腳都設置爲LVCMOS33電平,然後逐個分配引腳。。。

 
vivado
vivado

設置完成後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

要跑一段時間。。。

輸出設計

File->Export->Export Hardware

記得勾上Include Bitstream

進入SDK

File->Launch SDK

SDK操作流程

首先需要新建FSBL。

File->New->Application Project,Next到Templates,選Zynq FSBL

 
sdk
sdk

然後它會自動開始編譯。。。

然後才新建helloworld。。

File->New->Application Project,Next到Templates,選Hello World。它也會自動開始編譯,不出意外的話就完事了。

最後生成啓動文件BOOT.bin

左邊欄右鍵helloworld工程,Create Boot Image。可以看到這個啓動文件包括了三部分:

  • fsbl
  • bitstream
  • 應用程序
 
sdk
sdk

點亮板子

將一張SD卡格式化爲fat文件系統,將bootimage/BOOT.bin丟進去,插上電就能啓動了。

 
sdk
sdk

測試網口

SDK裏面新建lwIP Echo Server工程,等它編譯完,生成BOOT.bin,拷到SD卡里。插好網線,在終端中telnet它的7號端口,輸入一行,回車,然後它就將你輸入的東西返回來了。。。

 
sdk
sdk
 
debugging
debugging
 
debugging
debugging
最後更新時間:2019-04-28 15:26:10
歡迎留言,大佬輕拍。。

hhuysqthhuysqt

  •  
  •  
  •  
  •  
  •  
  •  
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章