使用 Xilinx 開發板:Pynq-Z2 入門實作教學
這篇文章會以 Pynq-Z2 開發板為例,帶大家從「認識板子」一路走到「實際在板子上操作自己設計的硬體」。
文章會偏向 硬體 / FPGA 開發者視角,使用 Vivado 來設計硬體系統,並透過 AXI Lite 讓 PS (ARM) 與 PL (FPGA) 溝通。Vivado 介面的截圖我會在實際發文時補上。
1. Pynq-Z2 簡單介紹
Pynq-Z2 是一張基於 Xilinx Zynq-7000 SoC (XC7Z020) 的開發板,最大的特色是:
- PS (Processing System):雙核心 ARM Cortex-A9
- PL (Programmable Logic):Artix-7 等級的 FPGA fabric
- PS 與 PL 之間可以透過 AXI bus 高速互連
也就是說,它同時具備「CPU」與「FPGA」的優點,非常適合:
- 軟硬體協同設計(HW/SW Co-design)
- 驗證自訂硬體 IP
- 教學與原型開發
在 Pynq 專案中,官方常搭配 Python(PYNQ framework)來操作硬體;不過本篇文章會更偏 Vivado + AXI + 硬體設計流程,即使不使用 Python 也完全沒問題。
2. 連接 AXI Lite(PS 與自訂 IP 溝通)
在 Zynq 架構中,最常見的一種控制介面就是 AXI Lite。
為什麼選 AXI Lite?
AXI Lite 的特性是:
- 記憶體映射(memory-mapped)
- 不支援 burst(簡單、好用)
- 非常適合用來存取 control / status register
典型用途包含:
- ARM 寫入暫存器來設定硬體參數
- ARM 讀取硬體狀態或計數器
建立 AXI Lite IP(概念)
通常流程會是:
- 使用 Vivado 建立一個 AXI4-Lite Slave IP
- 在 IP 內部定義幾個 register(例如 32-bit)
- 將這些 register 接到你的硬體邏輯
例如:
reg0:控制 LED on/offreg1:寫入資料給硬體reg2:回讀硬體狀態
這樣 PS 端只要透過記憶體位址讀寫,就能控制 PL 裡的邏輯。
3. 連接 Block Diagram(Vivado 設計流程)
接下來進入 Vivado 中最核心的部分:Block Design。
(1) 建立 Zynq Processing System
在 Block Diagram 中:
-
新增 ZYNQ7 Processing System
-
使用 Run Block Automation
-
讓 Vivado 自動完成:
- DDR
- FIXED_IO
- Clock
- Reset
這一步幾乎是標準流程,新手也可以放心交給 Vivado 處理。
(2) 加入 AXI Interconnect
如果你有:
- 一個以上的 AXI Slave IP
那通常會需要 AXI Interconnect,讓 PS 的 AXI Master 可以連到多個 IP。
Vivado 在你把 IP 拉進 Block Diagram、並選擇 Run Connection Automation 時,大多會自動幫你補齊。
(3) 接上自訂 AXI Lite IP
完成後,整個 Block Diagram 通常會包含:
- Zynq PS
- AXI Interconnect
- 自訂 AXI Lite IP
- Clock / Reset 網路
這時候 PS 就已經能透過 AXI Lite 存取你設計的硬體模組了。
(這裡我會放 Vivado Block Diagram 的截圖)
4. 操作板子(從 Bitstream 到實際控制)
硬體設計完成後,接下來就是把它「跑在板子上」。
(1) 產生 Bitstream
在 Vivado 中:
- Synthesis
- Implementation
- Generate Bitstream
完成後會得到 .bit 檔案。
(2) 匯出 Hardware(給軟體使用)
如果你之後要用:
- Vitis
- PYNQ
- Bare-metal 程式
記得要 Export Hardware(通常包含 .xsa)。
(3) 實際操作範例
幾個常見的板子操作例子:
- ARM 寫 AXI register → PL 控制 LED
- 按下 Pynq-Z2 上的 Button → PL 改變狀態 → PS 讀回
- 用簡單的 counter 驗證 clock 與 reset 是否正常
這些小實驗都非常適合用來確認:
「PS ↔ PL ↔ AXI Lite」整條路是通的。
結語
Pynq-Z2 是一張非常適合學習 Zynq 架構與 AXI 互連 的開發板。
即使不使用 Python 或 PYNQ framework,單純透過 Vivado + AXI Lite,也可以:
- 快速驗證硬體想法
- 建立可重複使用的 IP
- 練習完整的 SoC FPGA 設計流程
如果你之後有興趣,可以再往下延伸:
- DMA(AXI Stream)
- 中斷(Interrupt)
- Linux / PYNQ 使用者空間操作硬體
這些都能在同一張 Pynq-Z2 板子上完成 👍