ZYNQ的vitis固化程序(含只有PL端代码)慢慢更新吧

1、创建镜像文件

2、依顺序放入fsbl的elf文件,bit流文件,cpu0的elf文件,cpu1的elf文件(顺序不能变)

SD卡

将生成的boot.bin放入SD卡,名字一定不能改

生成boot.bin的同时还会生成一个.bif文件,这是路径文件,可以通过

Flash

只有PL端代码

Vivado操作

1、创建block design工程

2、加入zynqIP核

  1. DDR类型和板子统一
  2. 点上QSPI使能,SD0使能,UART0使能(为了打印BootLoader的信息),将QSPI和SD0改成fast
  3. 去掉多余的接口
  4. Bank1电压设置成 LVCMOS1.8V, 根据实际硬件bank电压,我手里是正点原子的板子
  5. Run Block Automation,生成引脚

 

 

 3、CTRL+s保存后对黄色的bd(block design)文件Generate Output Products,实际上是先综合ZYNQ这个IP核。再Create HDL Wrapper,我这里是已经生成了顶层的。

 4、在.bd文件的顶层中例化你的PL代码顶层模块,如下图

module ultbd_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,
    //自己加的引脚
    sys_clk   ,
    sys_rst_n ,
    eth_rxc   ,
    eth_rx_ctl,
    eth_rxd   ,
    eth_txc   ,
    eth_tx_ctl,
    eth_txd   ,
    eth_rst_n ,
    data_in   ,
    overflow  ,
    clk_ad    ,
    gain,      
    pulse,
    uart_tx_out   
    );

  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;
  //自己的信号
  input sys_clk   ;
  input sys_rst_n ;
  input eth_rxc   ;
  input eth_rx_ctl;
  input [3:0]eth_rxd;
  output eth_txc   ;
  output eth_tx_ctl;
  output [3:0]eth_txd;
  output eth_rst_n ;
  input  [11:0]data_in;
  input overflow  ;
  output clk_ad   ;
  output [6:0]gain;
  output pulse    ;
  output uart_tx_out;

  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;

  ultbd ultbd_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));
  //自行例化的顶层模块
  eth_udp_loop u_eth_udp_loop(
      .sys_clk    (sys_clk    ),
      .sys_rst_n  (sys_rst_n  ),
      .eth_rxc    (eth_rxc    ),
      .eth_rx_ctl (eth_rx_ctl ),
      .eth_rxd    (eth_rxd    ),
      .eth_txc    (eth_txc    ),
      .eth_tx_ctl (eth_tx_ctl ),
      .eth_txd    (eth_txd    ),
      .eth_rst_n  (eth_rst_n  ),
      .data_in    (data_in    ),
      .overflow   (overflow   ),
      .clk_ad     (clk_ad     ),
      .gain       (gain       ),
      .pulse      (pulse      ),
      .uart_tx_out(uart_tx_out)
  );
endmodule

5、以bd文件的wrapper为顶层,最后生成的等级关系应如下

 6、重新生成bitstream后,导出Hardware文件,要勾选include bitstream。这个就是.xsa文件,就是vitis需要的硬件平台

 7、启动Vitis(从vivado启动可以选择workspace,建议自己在工程文件夹下创一个vitis的文件夹)

 

 vitis操作

1、建一个新的Application Project,最后选择Zynq FSBL模板

 2、此时应该有wrapper.xsa硬件平台和fsbl工程,右键编译如下FSBL工程

 3、为了串口能够打印出 bootloader 的信息,在 fsbl_debug.h 文件里添加一条语句,定义一下“FSBL_DEBUG_INFO”常量。修改后保存,重新编译一下 fsbl 项目

4、先板子上电,JTAG模式,Run as一下fsbl工程,看是否有问题,此时程序掉电丢失。

5、程序没问题时Create Boot Image,vitis会自动生成bif文件(得断电再点Create Boot Image才会自动生成),只需要Create Image就行。

 此处建议单独建一个bootbin文件夹存放bif和Boot.bin文件,当然默认也行

Boot image partitions放文件的顺序是(顺序不能错):

  1. fsbl.elf文件
  2. 硬件平台的bit流文件
  3. 自己生成的fbsl工程的elf文件

参考:详细教程:vivado2019.2 & vitis2019.2下,zynq7000系列FPGA固化PL程序到外挂flash和SD卡_大功率灯泡的博客-CSDN博客_blockdesign例化到顶层

谢谢这个大哥,让我把这个搞出来了

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值