恭喜黑金云课堂的小伙伴完成第三期内容的学习
上周我们掌握了 Verilog 基础与逻辑设计、Vitis 搭建工程及 Zynq 配置流,并初步了解了 Linux 系统
大家在交流群里反馈非常积极,对 FPGA 免费直播课的热情也感染到了黑金云课堂的老师们。接下来我们会再接再厉,把每一期直播都做得更扎实
更多精彩课程欢迎关注我们黑金云课堂全年免费直播课,现在让我们先来回顾一下上周的知识点精华——
数据类型
常量
进制表示:二进制(b/B)、八进制(o/O)、十进制(d/D)、十六进制(h/H)
格式:位宽 +’+ 进制 + 数值例:8’b0000_1111、4’ha
特殊值:X(不定值)、Z(高阻值)
下划线(_):仅提升可读性,无实际意义
定义关键字
parameter:可模块间传递/修改,用于通用常量
localparam:仅本模块有效,多用于状态机
变量
wire
特性:无存储,物理连接
赋值:assign 连续赋值
应用:组合逻辑、连线
示例:wire [7:0] a;
reg
特性:可存储值
赋值:always 块内赋值
应用:时序 / 组合逻辑
示例:reg [7:0] b;
memory
特性:多个 reg 组成
赋值:寻址赋值
应用:RAM / ROM
示例:reg [7:0] ram [255:0];
*关键点:wire 不能存值,reg 不代表真实硬件寄存
运算符:
常用运算符
算术:+、-、*、/、%(注意位宽与取整)
赋值:=(阻塞)、<=(非阻塞)
关系:>、<、>=、<=、==、!=
结果为 1(真)/0(假)
逻辑:&&、||、!
条件:?:(等效简单 if-else)
位运算:~、&、|、^、^~
移位:<<、>>
逻辑移位,高位 / 低位补 0;例a<<1(左移 1 位,低位补 0)
拼接:{}、{n{}}
拼接多个信号:{a[3:0],b[1:0]};重复拼接:{n{信号}},例{8{1’b0}}(8 位 0)
赋值运算符(高频易错)
阻塞赋值 =
组合逻辑必须用
立即生效,顺序执行
非阻塞赋值 <=
时序逻辑必须用
并行更新,无竞争冒险
组合逻辑
核心特征:输出仅由当前输入决定,无时钟、无记忆,输入变输出立即变
实现方式:assign 或无时钟的 always 块
典型电路
基础门电路:
与:assign c = a & b;
或:assign c = a | b;
非:assign b = ~a;
异或:assign c = a ^ b;
运算与比较:
比较器:assign c = (a> b);
半加器:sum=a^b,cout=a&b
全加器:{cout,sum}=a+b+cin;
乘法器:直接用 *,注意输出位宽
选择器 / 译码器
四选一 MUX:case 语句实现
3-8 译码器:地址映射输出
三态门(双向 IO):
assign bio = en ? din : 1'bz;
en=1:输出
en=0:高阻输入
时序逻辑
核心特征: 依赖时钟沿触发,有记忆功能
实现方式:带时钟的 always 块 + 非阻塞赋值 <=
典型电路
D 触发器
基本:always @(posedge clk) q <= d;
异步复位:always @(posedge clk or negedge rst)
同步清零:依附时钟沿
移位寄存器
左移:q <= {q[6:0], d};
右移:q <= {d, q[7:1]};
存储器
单口 RAM:共用地址
伪双口 RAM:读写地址独立
真双口 RAM:双端口独立读写
单口 ROM:只读,初始化用 case 或 IP + .mif/.coe
有限状态机(FSM)
Mealy 型
输出由当前状态 + 输入决定
一段式写法
优点:代码简洁
缺点:输出易受输入干扰
Moore 型
输出仅由当前状态决定
三段式写法
优点:输出稳定,结构清晰
缺点:代码稍多,多一个状态周期
Verilog 开发核心规则(必记)
组合逻辑:wire + assign 或 always 无时钟,用 =
时序逻辑:always 时钟沿,用 <=
敏感列表:组合逻辑包含所有输入,异步复位必须加入
参数化:用 parameter 提高复用性
存储器:大容量优先使用 FPGA IP 核
状态机:复杂逻辑用三段式 Moore 型
位宽匹配:避免数据截断

ZYNQ7000 基础工程创建
创建工程 → 选定芯片 → 创建块设计(Block Design)
添加 ZYNQ7 Processing System IP
配置 PS 外设及 MIO
配置 PS 时钟输入频率
配置 PS DDR3
ZYNQ7000 概述
系列特点:全可编程 SoC,ARM Cortex-A9 双核 + 28nm FPGA
硬件结构
PS:双核 ARM Cortex-A9,最高 667MHz
PL:Artix-7 / Kintex-7 FPGA 逻辑资源
调试与验证
ILA 逻辑分析
SDK / Vitis 软硬件协同验证
Vivado 工程创建与配置
选择目标器件:New Project → 选择ZYNQ7000系列器件(如xc7z020clg400-2)
配置 PS:添加ZYNQ7 Processing System → 配置时钟、DDR、外设(UART、ETH、USB等)
配置 PL:添加自定义RTL模块或IP核 → 配置PL资源(LUT、FF、BRAM、DSP)
连接与验证:Run Connection Automation → Validate Design 检查设计完整性
生成比特流 → Generate Bitstream → 导出硬件(Export Hardware)生成XSA文件)
MPSoC 工程创建
架构特性
四核 Cortex-A53 + 双核 Cortex-R5 + Mali-400 GPU
可编程逻辑部分:基于16nm FinFET工艺的UltraScale+ FPGA架构,提供更高性能与更低功耗
相比 ZYNQ7000 升级点:16nm 工艺、更多核心、更强逻辑资源、更高带宽存储器
Vivado 工程流程
选择 MPSoC 器件:New Project → 选择Zynq UltraScale+ MPSoC器件(如xczu3eg-sfvc784-2-i)
配置 PS:添加Zynq UltraScale+ MPSoC IP → 配置A53/R5核心、时钟、DDR4、外设接口
Block Design 连接 PS 与 PL,配置 AXI 互联
生成比特流(Generate Bitstream)→ 导出 XSA → 硬件验证
关键配置要点
硬件外设与 MIO 正确匹配
DDR4 控制器参数匹配实际硬件
PCIe 配置(如需)
芯片介绍
Zynq 平台架构
PS 端:ARM 处理器 + 外设
PL 端:FPGA 可编程逻辑
Zynq 系列对比
Zynq 7000 SoC:Cortex-A9 双核 / 单核
Zynq UltraScale+ MPSoC:Cortex-A53 + Cortex-R5
两者在性能、外设、功耗上存在差异
开发板使用
开发板硬件组成
电源连接与上电准备
串口调试配置
启动模式选择:JTAG、SD 卡、eMMC 等
U-Boot
U-Boot 作用与意义
环境变量管理
MMC 命令操作
常用调试命令
引导内核与设备树
启动流程
BootROM → FSBL → ATF → U-Boot → Linux
各阶段职责与功能
启动配置方法
设备树的作用
系统启动配置示例
更多细节欢迎关注我们黑金云课堂全年免费直播课,我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发 三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!
审核编辑 黄宇


