1062 字
5 分钟
使用Vivado进行ZYNQ的PL端开发基础流程

从创建工程到烧录比特流文件到芯片里,最终固化到非易失性存储器里。这里的比特流文件可以理解为最终生成的结果,类似于编译出的二进制文件。

在写好verilog文件,到生成比特流文件,中间还有很多步骤,包括:

  • RTL描述与分析
  • 创建激励与仿真测试
  • 设计综合
  • 添加设计约束
  • 设计实现(布局布线)

完成后才能生成比特流文件。整个流程对应Vivado界面左侧的Flow Navigator。

0

一、示例程序:LED灯闪烁#

module led_flash(
input clk,
input rst_n,
output reg led
);
reg [25:0] cnt;
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
cnt <=26'd0;
else if (cnt < 26'd49_999_999)
cnt <= cnt + 1'b1;
else
cnt <= 26'd0;
end
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
led <= 1'b0;
else if (cnt == 26'd49_999_999)
led <= ~led;
else
led <= led;
end
endmodule

创建了一个LED灯闪烁的模块,包括时钟线(高电平触发 posedge)、复位信号(低电平触发 negedge)、输出的LED信号和一个26位的计数寄存器。

两个always控制块,一个用作计数器,另一个用于控制LED。

二、RTL描述与分析#

对当前HDL工程进行一次检查,检查是否有语法错误,但是无法检查是否有逻辑错误。同时把HDL展开为真正的逻辑结构。

1

RTL Analysis就是指对理解当前的HDL工程到底是在干什么,它可以生成一个概括性的原理图,但不是真正的电路,只是一个示意图(RTL级抽象电路),我们可以通过查看这个示意图来确定自己编写的Verilog是否符合要求。

如下是示例工程中的led_flash对应的原理图:

2

可以看到其中的时钟信号、复位信号、LED信号、逻辑门和触发器等等。

三、激励创建与仿真#

对于大型的HDL工程,在实际综合前需要创建一个激励,对它进行仿真测试,来查看是否符合预期。它虽然是HDL开发的必要流程,但不是强制性的,对于简单的工程也可以不进行仿真测试,本文暂时略过。

四、设计综合#

设计综合 Synthesis 就是将我们的HDL工程转化为门级网表

3

可以得到工程对应的利用FPGA器件所具有的基本元件LUT搭建的电路图

4

可以查看不同的LUT对应的逻辑表达式和真值表映射

5

通过Report Utilization,可以查看逻辑资源的使用情况 6

五、添加设计约束#

在之前的操作里,完成了HDL电路设计、RTL分析和综合,最终生成了FPGA里真实的电路结构,但是它们还只是在FPGA内部,无法与外部交互,不知道时钟信号和复位信号从哪儿来,不知道LED信号对应哪个真实引脚。因此需要进行约束,其中引脚约束就是给信号绑定真实的IO,让它操作真实的引脚的电平,进行输入输出。

在综合后的界面里,点击layout里的IO Planning,打开引脚分配界面,给信号分配真实的引脚

7

保存后就可以生成约束文件XDC

六、设计实现(布局布线)#

在综合得到真实电路图和添加约束后,就可以通过电路图和约束文件在FPGA里实现这个设计,即把之前的设计实现在FPGA器件里。

8

完成设计后,可以在Device中看到FPGA中生成的电路,也可以看到连接关系

9

七、生成比特流文件#

实现设计后就可以生成比特流文件

10

Generate Bitstream即可

八、烧录与固化#

通过Flow打开Hardware Manager,连接设备,烧录比特流即可

11

对于程序固化来说,如果是纯FPGA芯片,可以通过Vivado之间把bin烧录到开发板的Flash中,但是对于ZYNQ,PL端没有引出非易失性存储器的控制引脚,需要使用SDK通过PS端来完成程序固化,暂时不做展开。

使用Vivado进行ZYNQ的PL端开发基础流程
https://haoyn231.github.io/posts/fpga-vivado-zynq-pl-vivado-zynq-pl/
作者
好软,好温暖
发布于
2026-05-18
许可协议
CC BY-NC-SA 4.0
评论