使用 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(概念)

通常流程會是:

  1. 使用 Vivado 建立一個 AXI4-Lite Slave IP
  2. 在 IP 內部定義幾個 register(例如 32-bit)
  3. 將這些 register 接到你的硬體邏輯

例如:

  • reg0:控制 LED on/off
  • reg1:寫入資料給硬體
  • 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 板子上完成 👍