S02_CH01_Hello World实验
ZYNQ是一款SOC芯片,在前面第一季的学习当中,我们只是粗略的学习了ZYNQ的PL部分,对于ZYNQ最突出的功能,其内部的双核Cortex-A9内核并未使用到。从本章开始,我们就将开始学习ZYNQ的SOC学习。
本章将带领大家搭建一个最小系统,在此基础上,对我们的板子上的一些硬件进行测试,通过本章,你将掌握如何创建一个SOC工程与SDK软件的基本使用。
1.1最小系统分析
这张图展示了我们需要构建的最小系统。并且下面的嵌入式实验会基于这个最小系统进行添加外设。
本实验中将会只使用到PS 部分资源包括了ARM Cortex-A9、DDR3内存、一个UART串口。这就是我们的最小系统。首先我们程序会加载到DDR内存中,然后CPU一条一条执行,那么执行的情况我们可以通过串口打印观察。
1.2 硬件电路分析
红色线框内就是本次实验需要用到的资源,分别为CPU XC7Z020、2 片512MB 内存、一个Micro 接口的USB 转UART。
1.3创建一个VIVADO工程
Step1:在打开的VIVADO软件界面,单击Create New Project。
Step2:单击NEXT,在弹出的窗口中输入工程名和选择保存路径,然后单击Next。
Step3:
Step4:选择芯片类型。(请大家根据自己实际的类型选择)
Miz702与Miz702N用户如下设置:
Miz701N与Miz701用户如下设置:
Step5:
Step6:单击Create Block Design,输入System。
Step7: 单击下图中添加IP按钮
Step8:搜素单词z选择ZYNQ7 Processing System,然后双击
Step9:添加进来了ZYNQ CPU IP,然后单击Run Block Automation ,直接单击OK。
Step10:在Block文件中,我们进行连线,将鼠标放在引脚处,鼠标变成铅笔后迚行拖拽,连线如下图所示。连线的作用就是把PS的时钟可以接入PL部分,当然这里我们暂时用不到PL部分的资源。
Step11:双击ZYNQ CPU IP,对其进行设置,使其对应我们的硬件设置。在此部分,我们需要做的就是修改时钟频率,内存类型和接口输出。需要注意的是,如果时钟频率与内存类型与我们的硬件不一致时,SDK中的程序会崩溃,运行不过来。这在后续的调试中,是一个小技巧。正确的配置是成功的必要条件。
Miz702时钟及内存型号配置如下:
Miz702N时钟及内存型号配置如下:
Miz701与Miz701N时钟及内存型号配置如下:
Step12:设置外扩接口,之后点击OK。
Step13:右击 system.bd, 单击Generate Output Products。
Step14:支部操作会产生执行、仿真、综合的文件,可以看出来最后的硬件设计步骤还是回到了我们前面的FPGA开发上来了。
Step15:右击system.bd 选择 Create HDL Wrapper 这步的作用是产生顶层的HDL文件
Step16:选择Leave Let Vivado manager wrapper and auto-update 然后单击OK
Step17:之后我看下源码的层次结构,可以看到system_wrapper.v就是顶层文件,调用了CPU.
Step18:查看system_wrapper.v源码
//Copyright 1986-2015 Xilinx, Inc. All Rights Reserved. //-------------------------------------------------------------------------------- //Tool Version: Vivado v.2015.4 (win64) Build 1412921 Wed Nov 18 09:43:45 MST 2015 //Date : Thu Mar 24 22:07:47 2016 //Host : PC201603040001 running 64-bit Service Pack 1 (build 7601) //Command : generate_target system_wrapper.bd //Design : system_wrapper //Purpose : IP block netlist //-------------------------------------------------------------------------------- `timescale 1 ps / 1 ps module system_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); 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; 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; system system_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 |
可以看到顶层文件的源码调用了CPU接口,所有外设的接口也都是通过顶层文件引出来的。
Step19:执行->产生bit文件。
1.4 导出SOC硬件到SDK
Step1: File->Export->Export Hardware
Step2:勾选Include bitstream 直接单击OK
Step3:File->Launch SDK加载到SDK
Step4:单击OK
1.5 Hello World实验
Step1:导出完成后如下图
1、硬件部分,这部分就是从VIVADO定制好的SOC硬件
2、这部分是硬件的地址空间分配
Step2:选择File->New->Application Project
Step3:工程命名为HelloWorld,创建的bsp包取名为Miz702_bsp,然后单击NEXT
Step4:系统里面有很多自带的测试程序,本次就用自带的Helloworld程序做测试,单击Finish
Step5:完成后
Step6:右击HelloWorld->Generate linker Script
Step7:可以看到所有可用内存的情况,代码、数据、堆栈运行所在内存的情况。不做人为改动,关闭。
Step8:右击HelloWorld->
Step9:双击这个位置新建
Step10:然后进行如下设置
Step11:进入SDK调试界面
1、启动2、暂停3、停止4、代码5、信息控制台6、调试变量
Step12:启用系统自带的串口调试助手,进行相关的设置。
Step13:单击运行输出结果
1.6 MemTest内存测试程序
Step1:新建一个名为MemTest的工程
Step2:任然采用自带的测试函数测试
Step3:测试结果
1.7 DRAMTest内存测试程序
Step1:新建一个名为MemTest的工程
Step3:新建一个名为MemTest的工程
Step4:测试结果
根据提示可以在控制台中输入相关序号按回车进行(r,i测试会有一部分错误,还以和程序空间有关系)
1.8 LWIP协议对千兆网口测试
Step1:新建一个名为LWIP_Test的工程
Step2:选择LWIP Echo Server 之后单击Finish
Step3:运行之后的串口打印信息
Step4:用网络助手实现回传测试
1.9使用快捷按钮调试
使用这两个图标,一个是debug一个是运行模式可以方便调试。
1.10 本章小结
本章详细讲解了定制一个SOC最小系统,并且运行了自带的HelloWorld工程、MemTest内存测试工程、DRAMTest内存测试工程、LWIP网络协议工程对千兆网口测试。本章让初学者可以搭建一个最小的SOC系统,并且教会读者利用软件自动的工程对SOC的基本外设进行测试。希望大家多多操作,熟练掌握如何创建VIVADO工程,懂得如何根据自己的硬件平台配置ZYNQ CPU IP,下章我们将不在对这些进行详细的讲解。
工程配套源码:
【MIZ701N-7010】: 密码:z6ve【MIZ701N-7020】: 密码:t1fs【MIZ702-7020 】: 密码:epy4【MIZ702N-7020】: 密码:1beo