62_ZYNQ7020开发板_SD/QSPI实现Vivado的PL端程序和SDK程序同时运行

1)双击用vivado打开黑金7020自带的linux_base工程
在这里插入图片描述
2)查看vivado顶层文件design_1_wrapper.v文件

//Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.
//--------------------------------------------------------------------------------
//Tool Version: Vivado v.2017.4 (win64) Build 2086221 Fri Dec 15 20:55:39 MST 2017
//Date        : Wed Sep 19 11:47:29 2018
//Host        : Mei-PC running 64-bit Service Pack 1  (build 7601)
//Command     : generate_target design_1_wrapper.bd
//Design      : design_1_wrapper
//Purpose     : IP block netlist
//--------------------------------------------------------------------------------
`timescale 1 ps / 1 ps

module design_1_wrapper
   (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,
    TMDS_clk_n,
    TMDS_clk_p,
    TMDS_data_n,
    TMDS_data_p,
    btns_tri_i,
    hdmi_ddc_scl_io,
    hdmi_ddc_sda_io,
    hdmi_oen,
    leds_tri_o);
  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 TMDS_clk_n;
  output TMDS_clk_p;
  output [2:0]TMDS_data_n;
  output [2:0]TMDS_data_p;
  input [3:0]btns_tri_i;
  inout hdmi_ddc_scl_io;
  inout hdmi_ddc_sda_io;
  output hdmi_oen;
  output reg [3:0]leds_tri_o;

  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 TMDS_clk_n;
  wire TMDS_clk_p;
  wire [2:0]TMDS_data_n;
  wire [2:0]TMDS_data_p;
  wire [3:0]btns_tri_i;
  wire hdmi_ddc_scl_i;
  wire hdmi_ddc_scl_io;
  wire hdmi_ddc_scl_o;
  wire hdmi_ddc_scl_t;
  wire hdmi_ddc_sda_i;
  wire hdmi_ddc_sda_io;
  wire hdmi_ddc_sda_o;
  wire hdmi_ddc_sda_t;
  wire hdmi_oen;
 // wire [3:0]leds_tri_o;
  always@(*)begin
              leds_tri_o = 4'b0101;
         end
  design_1 design_1_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),
        .TMDS_clk_n(TMDS_clk_n),
        .TMDS_clk_p(TMDS_clk_p),
        .TMDS_data_n(TMDS_data_n),
        .TMDS_data_p(TMDS_data_p),
        .btns_tri_i(btns_tri_i),
        .hdmi_ddc_scl_i(hdmi_ddc_scl_i),
        .hdmi_ddc_scl_o(hdmi_ddc_scl_o),
        .hdmi_ddc_scl_t(hdmi_ddc_scl_t),
        .hdmi_ddc_sda_i(hdmi_ddc_sda_i),
        .hdmi_ddc_sda_o(hdmi_ddc_sda_o),
        .hdmi_ddc_sda_t(hdmi_ddc_sda_t),
        .hdmi_oen(hdmi_oen)
       // .leds_tri_o(leds_tri_o)
       );
  IOBUF hdmi_ddc_scl_iobuf
       (.I(hdmi_ddc_scl_o),
        .IO(hdmi_ddc_scl_io),
        .O(hdmi_ddc_scl_i),
        .T(hdmi_ddc_scl_t));
  IOBUF hdmi_ddc_sda_iobuf
       (.I(hdmi_ddc_sda_o),
        .IO(hdmi_ddc_sda_io),
        .O(hdmi_ddc_sda_i),
        .T(hdmi_ddc_sda_t));
endmodule

2)查看design_1_i
在这里插入图片描述
4)修改design_1_wrapper.v添加点灯程序
修改leds_tri_o为输出点灯
在这里插入图片描述
注释掉//wire[3:0]leds_tri_o
添加:
always@(*)begin
leds_tri_o = 4’b0101;
end
在这里插入图片描述
注释leds_tri_o
在这里插入图片描述
5)分别点击如下
在这里插入图片描述

6)烧写测试PL端verilog程序,烧写.bit

在这里插入图片描述
7)烧写后的效果
在这里插入图片描述
8)打开SDK软件

在这里插入图片描述
9)在SDK中新建hello应用程序
在这里插入图片描述

在这里插入图片描述
10)修改helloworld.c代码

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"


int main()
{
    init_platform();

    print("Hello World\n\r");
    print("YanHaoYu 9527 9527\n\r");
    cleanup_platform();
    return 0;
}

在这里插入图片描述
11)新建fsbl应用程序,用来烧写QFLASH
在这里插入图片描述
12)模板选择Zynq FSBL
在这里插入图片描述
13)添加调试宏定义FSBL_DEBUG_INFO,可以在启动输出FSBL的一些状态信息,有利于调试,但是会导致启动时间变长
在这里插入图片描述
14)修改后保存,SDK默认会自动编译,生成fsbl.elf,可以看一下dsbl里包含了很多外设的文件,包括ps7_init.c,nand,nor,qspi,sd等,在fsbl的main.c中,第一个运行的函数就是ps7_init,至于后面的工作,大家可以再仔细读代码。当然这个fsbl模板也是可以修改的,至于怎么修改根据自己的需求来做。
15)创建BOOT文件,选择hello的APP工程,右键选择Boot Image
在这里插入图片描述
16)弹出的窗口中可以看到生成的.bif文件路径,BIF文件是生成BOOT文件的配置文件,还有生成的BOOT.bin文件路径。BOOT.bin文件使我们需要的启动文具,可以放到SD卡启动,也可以烧写到QSPI Flash。
在这里插入图片描述
17)在Boot image partitions列表中有要合成的文件,第一个文件一定是bootloader文件,就是上面生成的fsbl.elf文件,第二个文件是FPGA配置文件bitstream,第三个是应用程序,在本实验中为hello.elf,本实验添加bootloader文件fsbl.elf,FPGA程序bitsream,hello.elf,点击C热阿特Image生成。
18)在生的目录下可以找到BOOT.bin文件
在这里插入图片描述
19)将BOOT.bin文件放到SD卡的FAT分区,将板子打到SD卡启动,连接板子串口,115200,打开串口软件查看

在这里插入图片描述
在这里插入图片描述
20)QSPI启动测试
在SDK菜单Xilinx->Program Flash
在这里插入图片描述
21)Hardware Platform选择最新的,Image File文件选择要烧写的BOOT.bin,FSBL file选择黑金给的特别版本,fsbl.elf,名字为zynq_fsbl_flash.elf,只有这个fsbl才能烧写,选择Verify after flash,在烧写完后效验 flash。
在这里插入图片描述
22)烧写完成后,把班组的打开到QFLASH启动,连接板子串口到电脑,115200,查看打印信息有APP端的YanHaoYu 9527 9527打印信息。烧写过程板子状态如下。
在这里插入图片描述
23)烧写完成启动开发板状态
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值