ZYNQ仅有PL端逻辑的程序固化

本文详细介绍了如何将仅包含PL端Verilog逻辑的程序固化到ZYNQ中,包括创建块设计、例化、生成bit文件、转入SDK、写入flash等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ZYNQ中PL端led灯的逻辑固化

之前看程序固化,教程大多是PS端中有要实现的代码的固化,我没怎么看明白,如果我程序只有 PL 端的写的Verilog逻辑,没写PS端的相关程序该怎么固化程序,昨天试了半天,实现了一个简单的led的逻辑固化。

须知

  1. 不带ARM的FPGA固化是没问题的,但是对于 ZYNQ 来说,必须要有 PS 端的配合才能固化程序
  2. 安装 Vivado 软件的时候一定要安装 SDK,在启动 SDK 软件前就有 sdk 目录,可能会导致无法启动 SDK,删除这个目录再试。在这里插入图片描述
  3. 准备好PL端LED的程序,这里用的开发板的实验教程:
    在这里插入图片描述
    *新建工程以及创建 Verilog HDL 文件
    module led1(
    input sys_clk,
    input rst_n,
    output reg [3:0] led
    );
    reg[31:0] timer_cnt;
    always@(posedge sys_clk or negedge rst_n)
    begin
    if (!rst_n)
    begin
    led <= 4’d0 ;
    timer_cnt <= 32’d0 ;
    end
    else if(timer_cnt >= 32’d49_999_999)
    begin
    led <= ~led;
    timer_cnt <= 32’d0;
    end
    else
    begin
    led <= led;
    timer_cnt <= timer_cnt + 32’d1;
    end
    end
    endmodule

    *添加管脚约束
    这里管教的约束必须与你的开发板原理图相对应这里管教的约束必须与你的开发板原理图相对应
    保存IO Ports之后会生成xdc文件

*添加时序约束在这里插入图片描述
完成时序约束后的xdc文件会更新在这里插入图片描述

生成vivado端的bit文件

注意这里不能直接用led1.v来直接生成bit文件,还需要做其他的准备!

1.创建块设计(Create Block Design)

在这里插入图片描述
在这里插入图片描述
点加号输入zynq搜索ip,然后双击或回车确认
在这里插入图片描述
双击该模块,开始设置在这里插入图片描述
点击 Peripheral I/O Pins ,会出现以下的 IO 配置界面。
点亮下面Quad SPI Flash,SD0,还有UART1
请添加图片描述
展开SD0不要遗漏点亮card detect中的47
在这里插入图片描述
MIO Configuration选项中
修改 Quad SPI Flash 和SD0 speed为fast,
以及bank1 IO Voltage为LVCOMS1.8V
在这里插入图片描述
在这里插入图片描述
确认CLOCK和DDR在这里插入图片描述

memory part需要修改为你的开发板采用或推荐的型号
在这里插入图片描述
完成后 Run Block Automation
在这里插入图片描述

这两个脚可能需要连线,有的教程没有这一步,开发板入门教程连起来了,但是如果不连起来,可能会报错,可能与版本有关
在这里插入图片描述
在 Source 窗口中选中 ledBD.bd,右键并先后选择Generate Output Projects 和 Create HDL Wrapper 选项操作。生成后如下图所示:
在这里插入图片描述

2.例化

就是把led1.v写进ledDB_wrapper.v
双击ledDB_wrapper.v,修改
修改后的代码(粗体处是新加的led.v部分,其他地方默认不用改):
module ledBD_wrapper
(rst_n,
sys_clk,

DDR_addr,
DDR_ba,
DDR_cas_n,
DDR_ck_n,
DDR_ck_p,
DDR_cke,
DDR_cs_n,
DDR_dm,
DDR_dq,
DDR_dqs_n,
DDR_dqs_p,
DDR_odt,
DDR_ras_n,
DDR_reset_n,
DDR_we_n,
FIXED_IO_ddr_vrn,
FIXED_IO_ddr_vrp,
FIXED_IO_mio,
FIXED_IO_ps_clk,
FIXED_IO_ps_porb,
FIXED_IO_ps_srstb,
led);
input rst_n;
input sys_clk;

inout [14:0]DDR_addr;
inout [2:0]DDR_ba;
inout DDR_cas_n;
inout DDR_ck_n;
inout DDR_ck_p;
inout DDR_cke;
inout DDR_cs_n;
inout [3:0]DDR_dm;
inout [31:0]DDR_dq;
inout [3:0]DDR_dqs_n;
inout [3:0]DDR_dqs_p;
inout DDR_odt;
inout DDR_ras_n;
inout DDR_reset_n;
inout DDR_we_n;
inout FIXED_IO_ddr_vrn;
inout FIXED_IO_ddr_vrp;
inout [53:0]FIXED_IO_mio;
inout FIXED_IO_ps_clk;
inout FIXED_IO_ps_porb;
inout FIXED_IO_ps_srstb;
output [3:0]led;

wire [14:0]DDR_addr;
wire [2:0]DDR_ba;
wire DDR_cas_n;
wire DDR_ck_n;
wire DDR_ck_p;
wire DDR_cke;
wire DDR_cs_n;
wire [3:0]DDR_dm;
wire [31:0]DDR_dq;
wire [3:0]DDR_dqs_n;
wire [3:0]DDR_dqs_p;
wire DDR_odt;
wire DDR_ras_n;
wire DDR_reset_n;
wire DDR_we_n;
wire FIXED_IO_ddr_vrn;
wire FIXED_IO_ddr_vrp;
wire [53:0]FIXED_IO_mio;
wire FIXED_IO_ps_clk;
wire FIXED_IO_ps_porb;
wire FIXED_IO_ps_srstb;
wire rst_n,sys_clk;
wire [3:0] led;
led1 led1
(
.sys_clk(sys_clk),
.rst_n(rst_n),
.led(led)
);

ledBD ledBD_i
(.DDR_addr(DDR_addr),
.DDR_ba(DDR_ba),
.DDR_cas_n(DDR_cas_n),
.DDR_ck_n(DDR_ck_n),
.DDR_ck_p(DDR_ck_p),
.DDR_cke(DDR_cke),
.DDR_cs_n(DDR_cs_n),
.DDR_dm(DDR_dm),
.DDR_dq(DDR_dq),
.DDR_dqs_n(DDR_dqs_n),
.DDR_dqs_p(DDR_dqs_p),
.DDR_odt(DDR_odt),
.DDR_ras_n(DDR_ras_n),
.DDR_reset_n(DDR_reset_n),
.DDR_we_n(DDR_we_n),
.FIXED_IO_ddr_vrn(FIXED_IO_ddr_vrn),
.FIXED_IO_ddr_vrp(FIXED_IO_ddr_vrp),
.FIXED_IO_mio(FIXED_IO_mio),
.FIXED_IO_ps_clk(FIXED_IO_ps_clk),
.FIXED_IO_ps_porb(FIXED_IO_ps_porb),
.FIXED_IO_ps_srstb(FIXED_IO_ps_srstb));
endmodule

重新编译一下工程,生成 bit 文件。

转入SDK

1. Launch SDK

1.再导出硬件,选择菜单 File->Export->Export Hardware…导出,包含bitstram 文件。

2.硬件导出后,选择菜单 File->Launch SDK,启动 SDK 开发环境

3.点击菜单 File -> New -> Application Project,新建一个名为 fsbl 的 APP, 会出现1 个 hardware platform:ledBD_wrapper_hw_platform_0,大概选最新最上面那个就好(图上的platform可能不一致)。
在这里插入图片描述
选择zynq fsbl
在这里插入图片描述

右键fsbl,然后选择creat boot image

在这里插入图片描述
下方方框出现两个文件即正常,bootloader在上,bit文件在下,可能有延迟 稍等或请重试
在这里插入图片描述
点击creat image

2.写入flash

点击xlinx-program flash
在这里插入图片描述
image file选择上一步生成的bin文件!
fsbl file 使用开发板赠送资料中的厂商定制的fsbl
关于定制版本 fsbl 的来源,可以参考 xilinx 官网链接:
https://www.xilinx.com/support/answers/70148.html
(如果链接失效,可以在 xilinx 官网搜索 AR# 70148)
如果使用 Vivado 2019.1 及以后版本就不需要这个定制的 fsbl,用自己生成的 fsbl 即可。
在这里插入图片描述

等待烧写完成后,设置启动模式为 QSPI(不同厂商可能不同,我这里的是调整插销位置来实现的),再次启动,观测到灯正常运行。
在这里插入图片描述

参考

1.https://blog.csdn.net/taowei1314520/article/details/78595482
2.https://www.cnblogs.com/ylsm-kb/p/9456534.html
3.https://blog.csdn.net/fengyuwuzu0519/article/details/80411894
4.AX7015教程(开发板厂商赠的)

### 如何在Xilinx Vivado Block Design中添加和配置以太网IP核 #### 添加以太网IP核到Block Design 为了向Block Design中引入特定的以太网IP核,需通过Vivado中的IP Catalog完成此操作。点击工具栏上的“Add IP”按钮,在弹出窗口内搜索所需的以太网IP名称并双击选中项将其加入设计环境[^1]。 对于万兆以太网应用实例而言,可选用由Xilinx官方提供的`10G Ethernet Subsystem`作为核心组件来构建高速网络接口解决方案[^4]。 #### 配置AXI Interconnect连接 当涉及到多个外设间的数据交换时,利用AXI协议标准下的Interconnect模块能够简化地址映射过程,并且该类元件通常具备自适应特性——即能自动检测所连设备而不需要额外的手动设定工作[^2]。 这意味着一旦将以太网子系统接入至AXI互联结构之后,大部分情况下不再需要对路径参数细致调整;不过仍建议开发者仔细查阅具体型号文档说明,确认是否存在特殊场景下必要的初始化选项设置需求。 #### 完成链路建立后的状态监测 成功部署上述硬件资源后,还需关注实际运行期间的状态反馈情况。例如,在某些设计方案里会定义诸如`block_lock`, `stat_rx_status`这样的内部标志位用于指示物理层是否已经稳定建立起有效的通信通道[^3]。这些信号的变化趋势往往反映了底层PHY层的工作状况以及MAC层之间的握手进展程度,因此编程人员应当编写相应的逻辑去捕捉这类事件的发生时刻以便后续处理流程的设计考量。 ```verilog // Verilog伪代码片段展示如何监控link up状态 always @(posedge clk or negedge rst_n) begin if (!rst_n) link_up <= 0; else if (block_lock && stat_rx_status) link_up <= 1; // 当两个条件都满足时表示链接已准备好 end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值