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)烧写完成启动开发板状态