博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
S02_CH01_Hello World实验
阅读量:5230 次
发布时间:2019-06-14

本文共 4999 字,大约阅读时间需要 16 分钟。

S02_CH01_Hello World实验

ZYNQ是一款SOC芯片,在前面第一季的学习当中,我们只是粗略的学习了ZYNQ的PL部分,对于ZYNQ最突出的功能,其内部的双核Cortex-A9内核并未使用到。从本章开始,我们就将开始学习ZYNQ的SOC学习。

本章将带领大家搭建一个最小系统,在此基础上,对我们的板子上的一些硬件进行测试,通过本章,你将掌握如何创建一个SOC工程与SDK软件的基本使用。

1.1最小系统分析

这张图展示了我们需要构建的最小系统。并且下面的嵌入式实验会基于这个最小系统进行添加外设。

806931-20170227132649141-1809263835.jpg

本实验中将会只使用到PS 部分资源包括了ARM Cortex-A9、DDR3内存、一个UART串口。这就是我们的最小系统。首先我们程序会加载到DDR内存中,然后CPU一条一条执行,那么执行的情况我们可以通过串口打印观察。

1.2 硬件电路分析

红色线框内就是本次实验需要用到的资源,分别为CPU XC7Z020、2 片512MB 内存、一个Micro 接口的USB 转UART。

806931-20170227132650141-1086651750.jpg

1.3创建一个VIVADO工程

Step1:在打开的VIVADO软件界面,单击Create New Project。

806931-20170227132650845-1295896464.jpg

Step2:单击NEXT,在弹出的窗口中输入工程名和选择保存路径,然后单击Next。

806931-20170227132651501-1820175200.jpg

Step3:

806931-20170227132652423-1887973990.jpg

Step4:选择芯片类型。(请大家根据自己实际的类型选择)

Miz702与Miz702N用户如下设置:

806931-20170227132653157-1817791050.jpg

Miz701N与Miz701用户如下设置:

806931-20170227132653610-1770142473.jpg

Step5:

806931-20170227132654016-177973838.jpg

Step6:单击Create Block Design,输入System。

806931-20170227132654516-2080317709.jpg

Step7: 单击下图中806931-20170227132654845-2091633147.jpg添加IP按钮

806931-20170227132655298-1941527832.jpg

Step8:搜素单词z选择ZYNQ7 Processing System,然后双击

806931-20170227132656016-1892175139.jpg

Step9:添加进来了ZYNQ CPU IP,然后单击Run Block Automation ,直接单击OK。

806931-20170227132656501-1475553604.jpg

Step10:在Block文件中,我们进行连线,将鼠标放在引脚处,鼠标变成铅笔后迚行拖拽,连线如下图所示。连线的作用就是把PS的时钟可以接入PL部分,当然这里我们暂时用不到PL部分的资源。

806931-20170227132656954-726646958.jpg

Step11:双击ZYNQ CPU IP,对其进行设置,使其对应我们的硬件设置。在此部分,我们需要做的就是修改时钟频率,内存类型和接口输出。需要注意的是,如果时钟频率与内存类型与我们的硬件不一致时,SDK中的程序会崩溃,运行不过来。这在后续的调试中,是一个小技巧。正确的配置是成功的必要条件。

Miz702时钟及内存型号配置如下:

806931-20170227132657532-977691933.jpg

806931-20170227132658423-522259600.jpg

Miz702N时钟及内存型号配置如下:

806931-20170227132659048-1687485382.jpg

806931-20170227132700470-1800834510.jpg

Miz701与Miz701N时钟及内存型号配置如下:

806931-20170227132701079-996254612.jpg

806931-20170227132701923-118157816.jpg

Step12:设置外扩接口,之后点击OK。

806931-20170227132702641-698806616.jpg

Step13:右击 system.bd, 单击Generate Output Products。

806931-20170227132703485-675297621.jpg

Step14:支部操作会产生执行、仿真、综合的文件,可以看出来最后的硬件设计步骤还是回到了我们前面的FPGA开发上来了。

806931-20170227132704860-1786523758.jpg

Step15:右击system.bd 选择 Create HDL Wrapper 这步的作用是产生顶层的HDL文件

806931-20170227132705673-1521907518.jpg

Step16:选择Leave Let Vivado manager wrapper and auto-update 然后单击OK

806931-20170227132706610-14260600.jpg

Step17:之后我看下源码的层次结构,可以看到system_wrapper.v就是顶层文件,调用了CPU.

806931-20170227132708032-1605088018.jpg

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文件。806931-20170227132708626-1469129468.jpg

1.4 导出SOC硬件到SDK

Step1: File->Export->Export Hardware

806931-20170227132708985-3168755.jpg

Step2:勾选Include bitstream 直接单击OK

806931-20170227132709329-30732661.jpg

Step3:File->Launch SDK加载到SDK

806931-20170227132709720-1467807737.jpg

Step4:单击OK

806931-20170227132710188-204964532.jpg

1.5 Hello World实验

Step1:导出完成后如下图

1、硬件部分,这部分就是从VIVADO定制好的SOC硬件

2、这部分是硬件的地址空间分配

806931-20170227132710829-1378914843.jpg

Step2:选择File->New->Application Project

806931-20170227132711391-499700381.jpg

Step3:工程命名为HelloWorld,创建的bsp包取名为Miz702_bsp,然后单击NEXT

806931-20170227132712095-20206309.jpg

Step4:系统里面有很多自带的测试程序,本次就用自带的Helloworld程序做测试,单击Finish

806931-20170227132712938-319875437.jpg

Step5:完成后

806931-20170227132713266-1166803264.jpg

Step6:右击HelloWorld->Generate linker Script

806931-20170227132713688-1850200999.jpg

Step7:可以看到所有可用内存的情况,代码、数据、堆栈运行所在内存的情况。不做人为改动,关闭。

806931-20170227132714204-1755028134.jpg

Step8:右击HelloWorld->

806931-20170227132715048-1110972563.jpg

Step9:双击这个位置新建

806931-20170227132715470-1932803451.jpg

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

转载于:https://www.cnblogs.com/milinker/p/6473501.html

你可能感兴趣的文章
SQL Server 如何查询表定义的列和索引信息
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>
【练习】使用事务和锁定语句
查看>>
centos7升级firefox的flash插件
查看>>
Apache Common-IO 使用
查看>>
javaScript数组去重方法汇总
查看>>
评价意见整合
查看>>
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>