第一章 MIZ701 VIVADO 搭建SOC最小系统HelloWorld

摘要:
本章内容是MIZ701中的第五章,本来也是要过渡一下FPGA部分的,但是由于MIZ701没有单独提供PL部分的晶振时钟,时钟必须通过PS产生,所以本章内容作为Miz701的第一章内容。本章的目的是搭建一个最小的SOC系统,并且测试串口输出,千兆以太网回路测试。并且下面的嵌入式实验会基于这个最小系统进行添加外设。

本章内容是MIZ701中的第五章,本来也是要过渡一下FPGA部分的,但是由于MIZ701没有单独提供PL部分的晶振时钟,时钟必须通过PS产生,所以本章内容作为Miz701的第一章内容。本章的目的是搭建一个最小的SOC系统,并且测试串口输出,千兆以太网回路测试。本章先让PS部分搭建最小系统,这样可以从PS部分获取到时钟,然后为后面章节中PL部分提供时钟源。

1.0本章难度系数★★☆☆☆☆☆

1.1最小系统分析

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

wpsCAF7.tmp

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

1.2板子使用的硬件

红色线框内就是本次实验需要用到的资源,分别为CPU XC7Z010、2片512MB内存、一个Micro接口的USB 转 UART,内存型号实际焊机MT41K256M16RE-125 M

wpsCB08.tmpwpsCB09.tmpwpsCB0A.tmp

1.3新建一个VIVADO工程

Step1:新建一个名为为Miz701的工程

wpsCB0B.tmp

Step2:

wpsCB1C.tmp

Step3:

wpsCB1D.tmp

Step4:

wpsCB1E.tmp

1.4使用IP Integrator创建硬件系统

Step1:单击Create Block Design

wpsCB1F.tmp

Step2:输入system

wpsCB2F.tmp

Step3:单击下图中wpsCB30.tmp添加IP按钮

wpsCB31.tmp

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

wpsCB32.tmp

Step5:添加进来了ZYNQ CPU IP,然后双击下图

wpsCB43.tmp

Step6:修改时钟输入为50MHZ,可以看到ARM时钟为650MHZ DDR为525MHZ(1050MHZ),并且修改FCLK_CLK0 为100MHZ

wpsCB44.tmp

Step7:修改MIO的配置 修改IO电压,增加ENT0 和UART1接口,下面会测试这2个接口,之后单机OK.

wpsCB45.tmp

wpsCB46.tmp

Step8:修改内存型号为MT41K256M16RE-125 M

wpsCB47.tmp

Step9:单机Run Block Automation 进行自动连线,VIVADO软件会根据信号的命名规则智能连线。

wpsCB57.tmp

Step10:勾选如下,直接单机OK

wpsCB58.tmp

Step11:在你点击了OK后,你会发现DDR以及FICED_IO自劢的延伸出来,然后把时钟FCLK_CLK0和M_AXI_GPI0_ACLK连接。方法:当把鼠标靠近的时候会自动连接。

wpsCB59.tmp

Step12:为了让以太网PHY RTL8211E-VL可以工作,必须让其复位PIN脚设置为1,只要简单添加一个常量IP并且映射到PL部分的PIN脚(复位脚在FPGA 部分(PL)),和添加CPU方法一样

wpsCB6A.tmp

Step13:双击设置常量为1

wpsCB6B.tmp

Step14:右击PIN脚选择Make External

wpsCB6C.tmp

wpsCB6D.tmp

Step15:取个有意义的名字如下图,只要单击相应的模块就可以在右手边修改

wpsCB6E.tmp

Step16: 右击 system.bd, 单击Generate Output Products

wpsCB7F.tmp

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

wpsCB80.tmp

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

wpsCB81.tmp

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

wpsCB82.tmp

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

wpsCB83.tmp

Step21:查看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 : Sun Aug 28 12:47:04 2016

//Host : Administrator 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,

PHY_Rst);

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 [0:0]PHY_Rst;

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 [0:0]PHY_Rst;

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),

.PHY_Rst(PHY_Rst));

endmodule

可以看到顶层文件的源码调用了CPU接口,所有外设的接口也都是通过顶层文件引出来的。

Step22:单机Add Sources

wpsCB93.tmp

Step23:选择Add or create constraints

wpsCB94.tmp

Step24:选择Create File

wpsCB95.tmp

Step25:输入zynq_pin

wpsCB96.tmp

Step26:如图,单击Finish

wpsCBA7.tmp

Step27:双击打开zynq_pin.xdc文件,添加PIN脚约束

wpsCBA8.tmp

Step28:双击打开zynq_pin.xdc文件,添加PIN脚约束

set_property PACKAGE_PIN E17 [get_ports PHY_Rst[0]]

set_property IOSTANDARD LVCMOS33 [get_ports PHY_Rst[0]]

Step25:执行->产生bit文件wpsCBA9.tmp

1.6导出SOC硬件到SDK

Step1:File->Export->Export Hardware

wpsCBAA.tmp

Step2:勾选Include bitstream 直接单击OK

wpsCBAB.tmp

Step3:File->Launch SDK加载到SDK

wpsCBBB.tmp

Step4:单击OK

wpsCBBC.tmp

1.6 HelloWorld程序

Step1:导出完成后如下图

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

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

wpsCBBD.tmp

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

wpsCBBE.tmp

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

wpsCBBF.tmp

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

wpsCBD0.tmp

Step5:完成后

wpsCBD1.tmp

Step6:右击HelloWorld->Generate linker Script

wpsCBD2.tmp

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

wpsCBD3.tmp

Step8:右击HelloWorld->

wpsCBD4.tmp

Step9:单击这个位置新建

wpsCBD5.tmpStep10:然后进行如下设置

wpsCBE6.tmp

Step11:设置调试信息输出的端口可以到支持串口和JTAG方式,如果使用串口先确保串口已经接通到电脑,并且开发板已经通电。这里选择串口,这样可以测试我们的串口是否正常工作了。如果以后调试可以直接使用JTAG调试更加方便并且波特率设置到115200之后单击Apply。之后单击Debug(注意开发板必须通电,另外TF卡确保拔掉)

wpsCBE7.tmp

Step12:进入SDK调试界面

1、启动2、暂停3、停止4、代码5、信息控制台6、调试变量

wpsCBE8.tmp

Step13:单击运行输出结果

wpsCBE9.tmp

1.7 MemTest内存测试程序

Step1:新建一个名为MemTest的工程

wpsCBF9.tmp

Step2:任然采用自带的测试函数测试

wpsCBFA.tmp

Step3:测试结果

wpsCBFB.tmp


1.8 DRAMTest内存测试程序

Step1:新建一个名为DRAMTest的工程

wpsCBFC.tmp

Step3:新建一个名为MemTest的工程

wpsCBFD.tmp

Step4:测试结果

根据提示可以在控制台中输入相关序号按回车进行(r,i测试会有一部分错误,还以和程序空间有关系)

wpsCC0E.tmp

1.9 LWIP协议对千兆网口测试

Step1:新建一个名为LWIP_Test的工程

wpsCC0F.tmp

Step2:选择LWIP Echo Server 之后单击Finish

wpsCC10.tmp

Step3:运行之后的串口打印信息

wpsCC11.tmp

Step4:用网络助手实现回传测试

wpsCC12.tmp

1.10使用快捷按钮调试

wpsCC13.tmp

使用这两个图标,一个是debug一个是运行模式可以方便调试。

1.11 本章小结

本章详细讲解了定制一个SOC最小系统,并且运行了自带的HelloWorld工程、MemTest内存测试工程、DRAMTest内存测试工程、LWIP网络协议工程对千兆网口测试。本章让初学者可以搭建一个最小的SOC系统,并且教会读者利用软件自动的工程对SOC的基本外设进行测试。

免责声明:文章转载自《第一章 MIZ701 VIVADO 搭建SOC最小系统HelloWorld》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mac单机 k8s minikube ELK yaml 详细配置 踩坑unable to recognize "*.yaml": no matches for kind "RoleBinding" in version "rbac.authorization.k8s.io/v1beta1"下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CPU 内存 频率 DDR DDR2 DDR3

fbs最多达到1600MHz 完全达不到cpu处理和内存要求 所以改成qpi+dmi 所以没有了前端总线一说ddr2 800  有效频率400MHz 由于是ddr  实际存取速度乘2  大概是800M*64bit/s / 8=6400MB/s 同理 ddr3 1600 有效频率800MHz  速率12.8GB/s 双通道的话  25.6GB/s  前端总线...

Ddr2,ddr3,ddr4内存条的读写速率

理论极限值是可以计算的:1333MHz * 64bit(单通道,双通道则128bit) / 8(位到字节单位转换) = 10.664GB/s。这只是理论,实际发挥还要看内存控制器,实际上1333单条跑出来的数据在7~9GB/s差不多了。首先,实际中我没见过内存速度超过10GB/s的情况,不知道是不是题主你把单位弄错了?实际见过的像RamDisk之类的软件,...

内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统

linux内核最小系统,使用内核版本:https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.8.1.tar.bz2 1,FL2440板子的基本硬件:晶振12MHZ CPU 型号为S3C2440,基于ARM920T,指令集ARMV4,时钟主频400MHz SDRAM H57V2562GTR-75...

vivado/FPGA 使用小纪

1、使用FPGA做为外部控制器的总线译码时,将总线时钟接在全局时钟脚上(MRCC),就算接在了局部时钟(SRCC)上,也要通过BUFG转为全局时钟走线,否则会因为local clk到各部分的时延较大引起各种问题(时序不稳、观测信号无法正常加载等,血泪教训!) 2、VIO使用时要注意IO及信号走向要在同一时钟域,一个VIO的信号跨时钟域会带来不可预知的问题(...

Zynq-7000 MiZ701 SOC硬件使用手册

一、整体概述 4 二、应用领域及人群 4 三、硬件配置 4 BANK资源分配 6 四、MiZ701开发板功能描述 7 4.1 全编程SOC(All Programmable SoC) 7 4.2 内存(Memory) 7 4.2.1 DDR3 7 4.2.2 PROM SPI FALSH 8 4.2.3 TF 卡 9 4.3 USB...

DDR工作原理【转】

转自:https://www.cnblogs.com/shengansong/archive/2012/09/01/2666213.html DDR SDRAM全称为Double Data Rate SDRAM,中文名为“双倍数据流SDRAM”。DDR SDRAM在原有的SDRAM的基础上改进而来。也正因为如此,DDR能够凭借着转产成本优势来打败昔日的对手...