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

ZYNQ中PL端led灯的逻辑固化

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

须知

  1. 不带ARM的FPGA固化是没问题的,但是对于 ZYNQ 来说,必须要有 PS 端的配合才能固化程序
  2. 安装 Vivado 软件的时候一定要安装 SDK,在启动 SDK 软件前就有 sdk 目录,可能会导致无法启动 SDK,删除这个目录再试。ZYNQ仅有PL端逻辑的程序固化
  3. 准备好PL端LED的程序,这里用的开发板的实验教程:
    ZYNQ仅有PL端逻辑的程序固化
    *新建工程以及创建 Verilog HDL 文件
    module led1(
    input sys_clk,
    input rst_n,
    output reg [3:0] led
    );
    reg[31:0] timer_cnt;
    [email protected](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

    *添加管脚约束
    ZYNQ仅有PL端逻辑的程序固化这里管教的约束必须与你的开发板原理图相对应
    保存IO Ports之后会生成xdc文件

*添加时序约束ZYNQ仅有PL端逻辑的程序固化
完成时序约束后的xdc文件会更新ZYNQ仅有PL端逻辑的程序固化

生成vivado端的bit文件

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

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

ZYNQ仅有PL端逻辑的程序固化
ZYNQ仅有PL端逻辑的程序固化
点加号输入zynq搜索ip,然后双击或回车确认
ZYNQ仅有PL端逻辑的程序固化
双击该模块,开始设置ZYNQ仅有PL端逻辑的程序固化
点击 Peripheral I/O Pins ,会出现以下的 IO 配置界面。
点亮下面Quad SPI Flash,SD0,还有UART1
ZYNQ仅有PL端逻辑的程序固化
展开SD0不要遗漏点亮card detect中的47
ZYNQ仅有PL端逻辑的程序固化
MIO Configuration选项中
修改 Quad SPI Flash 和SD0 speed为fast,
以及bank1 IO Voltage为LVCOMS1.8V
ZYNQ仅有PL端逻辑的程序固化
ZYNQ仅有PL端逻辑的程序固化
确认CLOCK和DDRZYNQ仅有PL端逻辑的程序固化

memory part需要修改为你的开发板采用或推荐的型号
ZYNQ仅有PL端逻辑的程序固化
完成后 Run Block Automation
ZYNQ仅有PL端逻辑的程序固化

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

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仅有PL端逻辑的程序固化
选择zynq fsbl
ZYNQ仅有PL端逻辑的程序固化

右键fsbl,然后选择creat boot image

ZYNQ仅有PL端逻辑的程序固化
下方方框出现两个文件即正常,bootloader在上,bit文件在下,可能有延迟 稍等或请重试
ZYNQ仅有PL端逻辑的程序固化
点击creat image

2.写入flash

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

等待烧写完成后,设置启动模式为 QSPI(不同厂商可能不同,我这里的是调整插销位置来实现的),再次启动,观测到灯正常运行。
ZYNQ仅有PL端逻辑的程序固化

参考

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