Vivado(2018.3)软件版本过旧,仅供参考!!!新版本操作正在更新
前言
EBAZ4205是矿机的控制板,价格便宜;现在咸鱼上大约50左右就可以收到一块成色不错的。
EBAZ4205硬件资源丰富,其使用XILINX XC7Z010-1CLG400I 作为主控芯片,芯片的SOC包含两个硬核ARM A9,以及ARTIX-7逻辑。板子还有一颗128M x 16 bit DDR3 CLK800MHz,一块128M字节 NAND FLASH,PS端 33.333Mhz晶振;板子预留有一个JTAG调试接口,一个4Pin串口,一个网口,数量众多的PL端引出的引脚(PH2.0插座)…具体可以查看原理图1
一、硬件改造
由于EBAZ4205毕竟还是一块矿板,不能直接用作开发板进行调试,需要先对其硬件进行一些改造。
-
供电改造:买回来的矿板在主电源输入接口后面会缺少一个防反接的二极管(SS810),可以选择从网上购买一个新的,也可以旁边拆下来一个焊上。或者和我一样,直接把线焊在排针的输入二极管上面。输入电压:12-5V
-
调试接口改造:将串口和JTAG的排针全部焊接上;其中JTAG的线序是标准JTAG14针的接口,而串口的在板子上有写。
-
更改启动顺序:ZYNQ SOC启动过程以ARM为主,上电后硬件读取PS端IO口确定从NAND、QSPI-FLASH、SD Card还是JTAG启动。板子默认从NAND启动,为了软件调试和下载NAND,须从JTAG启动。看原理图可以确定电阻R2578(上拉)和R2583(下拉)控制BOOT_MODE[2]引脚,也就是控制矿板从JTAG还是从NAND启动。我们只需将电阻向右移一个位即可改成从JTAG启动。
如果身边工具受限,该项可不强制做。
-
有能力的可以补齐PL端的晶振,和microSD卡槽
二、配置样板工程
-
下载并安装Vivado软件。该软件是FPGA厂商赛灵思公司2012年发布的集成设计环境。包括高度集成的设计环境和新一代从系统到IC级的工具。我使用的版本是Vivado 2018.3,不同版本间操作会有一定差异。
-
新建工程:点击新建工程 →Next→设置项目名称和项目根目录→选择RTL Project→选择芯片型号→Finish
-
创建原理图:点击"Create Block Design"创建原理图,并将其命名为"System";目录和源选项保持默认即可。
-
添加ZYNQ7 Processing System
-
配置外设IO,设置使用NAND UART1如图
-
时钟配置:使用FCLK_CLK0用于PS端给PL端时钟信号,按照下图(由于原矿板上PL端的晶振并未焊接,只能使用PS端提供的时钟信号;PL端会在后面点灯时候用到)
-
设置内存参数:选择内存为DDR3,数据位宽为16Bit,由于板子上用的不是镁光的内存,我们只能使用镁光128M的内存代替,数据线PCB延迟设置为0.106,按照下图:
-
修改NAND的时序,如下图;到此步完成ZYNQ PS的配置,点击OK
-
为ZYNQ创建端口,不创建端口的话,PL端无法调用其时钟信号。右键时钟端口,选择"Creat Port"(或者快捷键Ctrl+K),保持默认设置点击OK
这里多为AXI时钟创建了一个输入,不然验证时会报错;但是AXI总线我们并没有用到,所以可以在PS配置中取消掉,如图
-
先验证设计,再右键Source中的设计创建封装和输出顶层文件
-
添加点灯程序:新建verilog文件"led_top.v",设置为顶层模块,添加以下代码:
module led_top(
output reg led_r=1'b1,
output reg led_g
);
wire clk,rst_n;
System_wrapper System_wrapper_0// ARM
(
.FCLK_CLK0(clk),
.FCLK_RESET0_N(rst_n)
);
reg [31:0]cnt0;
always@(posedge clk)begin
if(cnt0 == 32'd50_000_000 - 1 )begin
cnt0 <= 'd0;
led_r <= ~led_r;
led_g <= ~led_g;
end else begin
cnt0<=cnt0+1'd1;
end
end
endmodule
- 添加约束文件,文件内容如下。并保存
set_property PACKAGE_PIN W13 [get_ports {led_r}]
set_property PACKAGE_PIN W14 [get_ports {led_g}]
set_property IOSTANDARD LVCMOS33 [get_ports {led_r}]
set_property IOSTANDARD LVCMOS33 [get_ports {led_g}]
-
Generate Bitstream 生成.bit文件
-
导出硬件文件File->export hardware,记得勾上.bit文件,不然PL部分是缺失的
-
启动SDK
-
在SDK中新建App,取名为FSBL,并选择赛灵思官方提供的FSBL模板。FSBL(First Stage Bootloader)听名字就知道是一个优先级更高的BL,他的作用就是配置PL和加载用户的应用程序。在上电复位之后,最先执行,负责检测启动模式、配置时钟和内存接口,并将bootloader复制到内存中,然后将处理器交给bootloader。这个app在后面会用到。
-
同样的方法再新建一个HelloWorld模板,这是为了验证我们的ARM内核是否正常运行,稍微修改一下代码让他能一直输出字符(保存文件SDK就会自动编译)
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "sleep.h"
int main()
{
init_platform();
while(1)
{
print("Hello World\n\r");
sleep(1);
}
cleanup_platform();
return 0;
}
- 制作镜像文件BOOT.bin用于固化到NAND。BOOT.bin由FSBL.elf led_top.bit app.elf三个文件组成;Xilinx->Create Boot Image 然后按照顺序添加前面提到的文件。
添加led_top.bin和helloworld.elf要记住"Partition type"选择的是数据文件
请务必按顺序添加文件!!!
- 烧录镜像文件:如果在之前硬件已经更改了启动顺序电阻,现在可以直接点击创建镜像上面的Program Flash进行烧写,烧写完记得把电阻改回来,不然是无法正常运行的。
- 如果没办法改动启动电阻也没关系。SDK完成Nand Flash的烧写实际上时通过FSBL完成,因为在烧写Nand Flash的时候需要添加Image File和Flash Type以外,还需要指定一个FSBL。这个FSBL就是用来完成Nand Flash烧写的。所以,我们只要强行指定这个FSBL是以JTAG启动就可以烧写了。在Xilinx的官网问答AR#56030里面写的非常的详细。
重新回到刚刚的FSBL代码中的main.c文件,搜索BootModeRegister,并将其修改成以下内容。
此时不要重新生成镜像文件,直接和上面一样点击下载即可,程序就能正常烧录。
/*
* Read bootmode register
*/
// BootModeRegister = Xil_In32(BOOT_MODE_REG);
// BootModeRegister &= BOOT_MODES_MASK;
BootModeRegister = JTAG_MODE;
三、结果
如果一切顺利,则可以看到如下情景,前面的红绿两盏灯交替闪烁,串口每隔一秒钟会输出"Hello World"
总结
这块矿板的性价比非常的高,如果单买芯片都要400-500块,这给想入门FPGA或者是ZYNQ的人带来了福利。但是毕竟是一分价钱一分货,这块矿板的资源极其有限,过小的内存和NAND导致处理稍微复杂应用可能会不够大,以及以单端引出而不是以差分对引出的走线,不能应对高频信号,如HDMI。总的来说这块板子用于入门大于用于长期学习。
参考文章
[1] EBAZ4205 ZYNQ 7Z010 裸机程序NAND固化 JTAG调试方法
[2] zynq7010之EBAZ4205之helloworld
[3] 100块学会ZYNQ-矿板Nand Flash烧写和启动
[4] AR#56030 14.5 Zynq-7000 SoC AP iMPACT - NAND programming requires the board to be in JTAG mode
[5] [正点原子2_启明星ZYNQ之嵌入式开发指南_V1.2.1.pdf]