[Z7-Nano] 重生之我是電子工程師:從 0 開始手操 ZYNQ (1)

12次閱讀
尚無留言

緣起

在海上跑船一段時間後,我發現還是窩在電腦前搞開發比較開心。
所以回歸陸地重新學習,重新出發。

最近從淘寶弄了一塊 Z7-Nano (XC7Z020),看著這塊有點酷炫的板子,我就決定了——
Blog 的復活,就從這系列筆記開始。


第一章:晶片裡的兩個靈魂

這 Zynq-7000 到底是什麼怪物?
簡單說,它就是把 ARM (PS)FPGA (PL) 兩兄弟強行塞進同一個身體裡。

買的時候就在評論區看到很多人在問它是「帶 FPGA 的 ARM」還是「帶 ARM 的 FPGA」。
我看了一下啟動流程,ARM 才是領頭的大哥,所以我個人給它的定義就是:「一個嵌入了 FPGA 邏輯的 ARM」
誰主誰從?能跑代碼、能實現功能的就是好東西,仁者見仁啦。

[Z7-Nano] 重生之我是電子工程師:從 0 開始手操 ZYNQ (1)

以後我這爛記憶力得記住這幾個詞:

  • PS (Processing System):ARM 大腦,管 USB、乙太網、UART 那些雜事。
  • PL (Programmable Logic):FPGA 肌肉,負責出力的邏輯資源。
  • MIO / EMIO:IO 管腳。MIO 是固定死的;EMIO 就像是把 PL 的腳借給 PS 用的「外掛」,這招以後絕對常用。
  • AXI:這就是兩兄弟溝通的高速公路,沒這條路,兩邊就是死路一條。

第二章:溝通的藝術——AXI 總線

在 Zynq 的世界裡,PL 就像是一個掛在 AXI 總線上的 IP Core,等著被 PS 調包。
現在大家都在用 AXI4,我也懶得去研究舊版本。

這路還有三種跑法:

  1. AXI4:走高性能映射,支援 256 輪突發傳輸。想飆速、傳大數據?選這條路就對了。
  2. AXI4-Lite:輕量級的小路,跑單次傳輸。拿來改個暫存器或簡單控制一下,不佔空間。
  3. AXI4-Stream:這更絕,連地址都不要了。數據就像水流一樣一直灌,做訊號處理的靈魂就在這。

接口也有分:

  • AXI-GP:通用型,32 位,PS 沒事找外設聊天都走這。
  • AXI-HP:高性能,專門讓 PL 去偷看(存取)PS 端的 DDR 或 OCM 存儲器。
  • AXI-ACP:加速器一致性接口,處理那些沒快取的傳輸比較順手。

第三章:別亂!這流程得先硬後軟

這行真的不好混,又要懂 Linux 驅動,又要懂 FPGA 畫圖。
工具也多到煩死人:

  • Vivado:搞硬體邏輯的。
  • SDK / Vitis:導出硬體後寫 C/C++ 的。
  • 交叉編譯:得在 Ubuntu 裡用 gcc 搞 ARM 用的程序。
  • 調試:FPGA 用 ChipScope(在線偷看訊號),軟體用 GDB

我的記憶小抄(順序亂了就等著報錯):

  1. Vivado 創項目 $\rightarrow$ 搭建 PS + PL $\rightarrow$ 生 .bit 檔 $\rightarrow$ 導出硬體。
  2. SDK 生出第一階段的 FSBL
  3. 虛擬機 熬出 uboot.elf
  4. 合成:把 FSBL + .bit + uboot 合體變成 BOOT.BIN
  5. 啟動:準備好內核 Zimage、設備樹、ramdisk

最後通通丟進 SD 卡,能不能開機全看人品。
其實如果不玩 Linux,純搞 PL 的話,有些步驟就能省了。


TODO 筆記

  • 認真重寫隱私權條款(怕被告 na,雖然現在這版也沒多壞)。
  • 弄個自動合成 BOOT.BIN 的腳本,手動打包簡直是在浪費生命。
  • 實作點亮 LED 的第一個 Hello World,希望板子沒被我玩壞。
  • 之後計畫把全部網站改放到 VPS 上,加點轉檔功能,廢物再利用。
正文完
 0
評論(尚無留言)