Zynq 7000从零开始之二 -- 内存测试程序

由于所有的APP都是在DDR中运行的,所以先让DDR工作起来是后续实验的基础.使用的硬件是z-turn开发板.

本文主要讲怎样创建一个内存测试程序,测试DDR,程序还是运行在内部RAM;FPGA涉及的内容有怎样配置DDR参数,及怎样保存和导入硬件参数;软件方面会涉及BSP修改及           BOOT.bin的生成.关于Vivado的具体操作请参考--"Zynq
7000从零开始之一 -- helloworld".

1. 用vivado搭好硬件模型.

在vivado的block design中,PS的DDR Configuration配置如下:

选好Memory Part之后,Memory Part Configuration的参数就自动出来了,不用修改.

上面是根据DDR手册设置的参数,其他参数默认.

记得先Create HDL Wraper,再Run Synthesis.我配置好的block design界面如下:

就只有PS部分而已,不用生成bitstream.

点击file->export->export hardware导出硬件参数给SDK使用,因为没有用到FPGA,所以不用选Include bitstream, 导出到工程文件夹内.

点击file->launch SDK打开SDK编写软件.

2. 保存硬件参数

配置好参数后,把参数保存到硬盘上,下次可以直接导入该配置,后面的实验会基于该实验的配置进行配置.

在Re-customize IP界面点Presets->Save Configaration将PS配置保存为memtest.tcl.

3. 软件编写

创建一个Application Project参数如下:

点击Next->Memory Tests->Finish.完成的在Project Explorer中多出了两个工程,一个是BSP,别一个是app工程.

因为使用2.3版本的SD卡驱动有问题,所以我们先把BSP中的SD卡驱动改成2.2版本的,具体方法请参考前一篇文章.

对源码还需要做些修改:

1>. 在memorytest.c中包含头文件 #include "ps7_init.h"

2>. memorytest.c中main函数中,在init_platform前面添加硬件初始化函数ps7_init();

3>. 将system_wrapper_hw_platform_0中的ps7_init.c包含到memtest工程中.

右击memtest工程->New->File->Advanced,勾上Link to file in the file system,

定位到system_wrapper_hw_platform_0下的ps7_init.c文件.

4>. 将ps7_init.h的路径添加到memtest中的头文件搜索路径.

右击memtest工程->C/C++ Build Setttings->ARM gcc compiler->Directories,点击右边的添加按钮添加

路径,在Add directory path对话框中,点Workspace,选中system_wrapper_hw_platform_0.

之后,就可以编译了.

4. 生成BOOT.bin下载到z-turn板子上运行

编译完成后,右击Project Explorer中的memtest工程->Create Boot Image.

在Boot image partitions将memtest.elf的partition type更改为bootloader.

将memtest\memtest.sdk\memtest\bootimage\文件夹下的BOOT.bin copy到SD卡上,插到z-turn板上运行,会出现以下串口信息:

--Starting Memory Test Application--

NOTE: This application runs with D-Cache disabled.As a result, cacheline requests will not be generated

Testing memory region: ps7_ddr_0

Memory Controller: ps7_ddr

Base Address: 0x00100000

Size: 0x3ff00000 bytes

32-bit test: PASSED!

16-bit test: PASSED!

8-bit test: PASSED!

Testing memory region: ps7_ram_1

Memory Controller: ps7_ram

Base Address: 0xffff0000

Size: 0x0000fe00 bytes

32-bit test: PASSED!

16-bit test: PASSED!

8-bit test: PASSED!

--Memory Test Application Complete--

时间: 2024-08-24 12:56:09

Zynq 7000从零开始之二 -- 内存测试程序的相关文章

Zynq 7000从零开始之一 -- HelloWord

使用myir的z-turn开发板,做一个从uart打印hello world的实验,只用PS,不用PL部分,程序从SD卡启动,跑在PS的内部RAM. zynq 7000的PS虽然也是CPU,但是开发方法不像普通的CPU只需要一个SDK就可以了,它还需要vivado硬件设计软件. 所以ZYNQ 7000的PS开发需要两个工具,一个是vivado--    另一个是SDK--  . 1. 打开vivado软件-->Create New Project,工程名和目录: 2. next->选RTL P

Zynq 7000从零开始之三 -- mio的gpio操作

本文讲述怎样使用PS的gpio,不涉及fpga部分,软件涉及到一级引导程序fsbl的创建及app的创建,程序运行在ddr中. z-turn板的mio 50引脚连接到了按键K1,该实验实现的功能为,检测按键并从串口打印出相应的信息. 1. 用vivado搭建硬件模型. 在block design的Re-customize IP界面,点击Presets->Apply Configuration, 定位到上章导出的memtest.tcl硬件配置文件. 点击MIO configuration->展开G

ZYNQ 7000平台UDP数据包(1字节或2字节)校验和Checksum错误0xFFFF解决方案(linux+vxworks6.9平台)

在赛灵思ZYNQ 7000平台,使用UDP方式发送1字节或者2字节数据时,校验和为错误值0xffff,接收机无法正常接收ZYNQ7000平台发送的数据,本人已经找到该问题的解决方案,有该问题的朋友可以通过邮箱[email protected]与我联系,联系时请详细描述你的环境,针对该咨询提供的问题解决方案会收取一定的费用,费用不会太高,现在是知识付费的年代,希望各位理解,同时如果能够解决您的问题,也是为你节约了开支.我会及时回复邮件的.具体事项可以邮件沟通[email protected].

垃圾回收GC:.Net自己主动内存管理 上(二)内存算法

垃圾回收GC:.Net自己主动内存管理 上(二)内存算法 垃圾回收GC:.Net自己主动内存管理 上(一)内存分配 垃圾回收GC:.Net自己主动内存管理 上(二)内存算法 垃圾回收GC:.Net自己主动内存管理 上(三)终结器 前言 .Net下的GC全然攻克了开发人员跟踪内存使用以及控制释放内存的窘态.然而,你或午想要理解GC是怎么工作的.此系列文章中将会解释内存资源是怎么被合理分配及管理的,并包括很具体的内在算法描写叙述.同一时候.还将讨论GC的内存清理流程及什么时清理,怎么样强制清理. 内

垃圾回收GC:.Net自动内存管理 上(二)内存算法

垃圾回收GC:.Net自动内存管理 上(二)内存算法 垃圾回收GC:.Net自动内存管理 上(一)内存分配 垃圾回收GC:.Net自动内存管理 上(二)内存算法 前言 .Net下的GC完全解决了开发者跟踪内存使用以及控制释放内存的窘态.然而,你或午想要理解GC是怎么工作的.此系列文章中将会解释内存资源是怎么被合理分配及管理的,并包含非常详细的内在算法描述.同时,还将讨论GC的内存清理流程及什么时清理,怎么样强制清理. 内存算法 GC检测用于查看堆中是否有对象不再被程序使用.如果这样的对象存在,这

Java从零开始学二十一(集合List接口)

一.List接口 List是Collection的子接口,里面可以保存各个重复的内容,此接口的定义如下: public interface List<E> extends Collection<E> 二.List接口的扩展方法 No. 方法 类型 描述 1 public void add(int index, E element) 普通 在指定位置增加元素 2 public boolean addAll(int index, Collection<? extends E>

Java从零开始学二十九(大数操作(BigIntger、BigDecimal)

一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型).BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法.另外,BigInteger 还提供以下运算:模算术.GCD 计算.质数测试.素数生成.位操作以及一

Java从零开始学二十八(Math类和Random类)

一.Math概述 提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率) 二.常用方法 package com.pb.demo1; public class MathTest { public static void main(String[] args) { System.out.println("求平方根:" + Math.sqrt(9.0)); System.out.println("求两数的最大值:" + Math.max(10,30))

Java从零开始学二十七(NumberFormat类)

一.NumberFormat表示数字的格式化类 NumberFormat表示数字的格式化类,即:可以按照本地的风格习惯进行数字的显示. No. 方法 类型 描述 1 public static Locale[] getAvailableLocales() 普通 返回所有语言环境的数组 2 public static final NumberFormat getInstance() 普通 返回当前默认语言环境的数字格式 3 public static NumberFormat getInstanc