3. 硬件平台设计:Block Design基础、AXI总线简介、添加Zynq/MPSoC处理器系统

好,咱们进入第三章。这一章是整个平台工程的基石——硬件平台设计。说白了,就是你要在Vivado里把芯片的“骨架”搭起来。

我个人习惯把这一步叫做“画板子”。不是画PCB,而是画FPGA内部的逻辑连接图。你想想看,一个嵌入式系统,CPU、内存、外设,它们之间怎么通信?靠的就是总线。而在Xilinx的世界里,这个总线叫AXI。

3.1 Block Design 是什么?

Block Design,简称BD。它是Vivado里一个图形化的设计工具。你不需要写一行Verilog,就能把处理器、DMA、GPIO这些IP核拖出来,连上线,配置好参数。

我第一次用BD的时候,心里还犯嘀咕:“这玩意儿靠谱吗?”后来发现,它生成的代码质量,比我手写的强多了。尤其是对于Zynq这种异构芯片,手动例化PS(处理系统)和PL(可编程逻辑)的接口,那叫一个痛苦。BD把这些全封装了。

核心思想:BD是“搭积木”式的设计。你只需要关心IP核之间的连接关系,剩下的时序、地址映射、复位同步,工具帮你搞定。

BD的设计流程大致分三步:

  1. 创建Block Design:在Vivado里新建一个BD文件。
  2. 添加IP核:把Zynq PS、AXI GPIO、AXI BRAM Controller等拖进来。
  3. 自动连线:用“Run Block Automation”和“Run Connection Automation”让工具自动帮你连好。

嗯,这里要注意:自动连线不是万能的。有些特殊接口,比如自定义的AXI Full Master,还是得手动连。但大部分标准外设,自动连线足够了。

3.2 AXI总线简介

AXI,全称Advanced eXtensible Interface。它是ARM公司提出的AMBA总线协议的一部分。Xilinx从7系列开始,全面拥抱AXI。现在你看到的几乎所有IP核,接口都是AXI。

AXI有几种变体,我列个表给你看:

类型 特点 典型用途
AXI4 (Full) 支持突发传输,地址/数据通道分离 DMA、DDR控制器、高带宽外设
AXI4-Lite 简化版,不支持突发,单次传输 寄存器配置、GPIO、中断控制器
AXI4-Stream 无地址,纯数据流 视频流、FIFO、高速数据采集

我在项目中遇到过一个问题:用AXI-Lite去读一个高速ADC的数据,结果发现带宽根本不够。后来换成AXI-Stream,配合DMA,才把数据搬走。所以,选对总线类型很重要。

我的建议:配置寄存器用AXI-Lite,搬数据用AXI-Stream,需要随机访问大容量内存用AXI-Full。别混着用,也别大材小用。

AXI总线的握手信号很简单:VALID和READY。发送方拉高VALID表示数据有效,接收方拉高READY表示可以接收。两者同时为高,一个数据传输完成。这就是所谓的“双向握手机制”。

为什么会这样设计?说白了,就是为了解耦。发送方和接收方可以工作在完全不同的时钟域,只要握手信号满足时序要求就行。

3.3 添加Zynq/MPSoC处理器系统

这是BD设计的核心。Zynq-7000系列和Zynq UltraScale+ MPSoC,它们的PS部分是一个完整的ARM处理器系统。你需要把它“拖”进BD里,然后配置它。

双击Zynq PS IP核,会弹出一个配置界面。这里我重点说几个关键配置:

  • PS-PL Configuration:这里决定PS和PL之间有多少个AXI接口、时钟、复位。我一般至少开一个AXI HP(高性能)口和一个AXI GP(通用)口。
  • Clock Configuration:PS可以输出多个时钟给PL。比如CPU主频、DDR时钟、外设时钟。记得把PL Fabric Clock勾上,默认是100MHz。
  • DDR Configuration:选你的DDR颗粒型号。选错了,板子起不来。我曾经因为DDR型号选错,折腾了两天才发现。
  • MIO Configuration:MIO是PS的专用引脚。UART、I2C、SPI、SD卡这些外设,可以分配到MIO上,不占用PL资源。

避坑指南:我曾经在MPSoC上犯过一个低级错误——忘了使能PS的FPD(全功耗域)时钟。结果PL侧的AXI接口死活不工作。后来查手册才发现,FPD时钟是AXI接口的参考时钟。所以,配置完PS后,一定要检查时钟输出是否都使能了。

配置完成后,点击“Run Block Automation”。工具会自动帮你把PS的固定接口(比如DDR、MIO)连到顶层端口上。然后,你再添加一个AXI GPIO或者AXI UART,点击“Run Connection Automation”,工具会自动帮你连到PS的AXI总线上。

最后一步,右键点击BD文件,选择“Create HDL Wrapper”。这会生成一个顶层Verilog文件,把整个BD例化进去。然后你就可以综合、实现、生成比特流了。

3.4 本章知识体系

为了让你更直观地理解本章的逻辑,我画了一张图:

硬件平台设计知识体系 Block Design AXI总线协议 Zynq/MPSoC PS 图形化搭积木 自动连线/手动调整 生成HDL Wrapper AXI4-Full / Lite / Stream VALID/READY握手 地址映射与带宽 PS-PL接口配置 时钟/DDR/MIO Run Automation 硬件平台 = BD + AXI + 处理器系统配置

这张图把本章的三个核心模块串起来了。Block Design是工具,AXI是通信协议,Zynq/MPSoC是核心处理器。三者缺一不可。

好了,这一章的内容就到这里。硬件平台搭好了,下一章我们就要开始写软件了。到时候,Vitis会登场,咱们在PS上跑个“Hello World”试试。

课后练习:打开Vivado,创建一个Zynq-7020的BD工程。添加一个AXI GPIO IP核,配置成输出模式。然后生成比特流。看看能不能在板上点亮一个LED。

可可精品资料库