緣起
在海上跑船一段時間後,我發現還是窩在電腦前搞開發比較開心。
所以回歸陸地重新學習,重新出發。
最近從淘寶弄了一塊 Z7-Nano (XC7Z020),看著這塊有點酷炫的板子,我就決定了——
Blog 的復活,就從這系列筆記開始。
第一章:晶片裡的兩個靈魂
這 Zynq-7000 到底是什麼怪物?
簡單說,它就是把 ARM (PS) 跟 FPGA (PL) 兩兄弟強行塞進同一個身體裡。
買的時候就在評論區看到很多人在問它是「帶 FPGA 的 ARM」還是「帶 ARM 的 FPGA」。
我看了一下啟動流程,ARM 才是領頭的大哥,所以我個人給它的定義就是:「一個嵌入了 FPGA 邏輯的 ARM」。
誰主誰從?能跑代碼、能實現功能的就是好東西,仁者見仁啦。
![[Z7-Nano] 重生之我是電子工程師:從 0 開始手操 ZYNQ (1) [Z7-Nano] 重生之我是電子工程師:從 0 開始手操 ZYNQ (1)](https://blog.shi6a.com/wp-content/uploads/2026/03/zynq-7000-arch-300x236.webp)
以後我這爛記憶力得記住這幾個詞:
- 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,我也懶得去研究舊版本。
這路還有三種跑法:
- AXI4:走高性能映射,支援 256 輪突發傳輸。想飆速、傳大數據?選這條路就對了。
- AXI4-Lite:輕量級的小路,跑單次傳輸。拿來改個暫存器或簡單控制一下,不佔空間。
- 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。
我的記憶小抄(順序亂了就等著報錯):
- Vivado 創項目 $\rightarrow$ 搭建 PS + PL $\rightarrow$ 生
.bit檔 $\rightarrow$ 導出硬體。 - SDK 生出第一階段的 FSBL。
- 虛擬機 熬出
uboot.elf。 - 合成:把 FSBL + .bit + uboot 合體變成
BOOT.BIN。 - 啟動:準備好內核
Zimage、設備樹、ramdisk。
最後通通丟進 SD 卡,能不能開機全看人品。
其實如果不玩 Linux,純搞 PL 的話,有些步驟就能省了。
TODO 筆記
- 認真重寫隱私權條款(怕被告 na,雖然現在這版也沒多壞)。
- 弄個自動合成
BOOT.BIN的腳本,手動打包簡直是在浪費生命。 - 實作點亮 LED 的第一個 Hello World,希望板子沒被我玩壞。
- 之後計畫把全部網站改放到 VPS 上,加點轉檔功能,廢物再利用。
正文完