zynq7000 PL读写DDR3----实验笔记

2024-02-29 13:48

本文主要是介绍zynq7000 PL读写DDR3----实验笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境:vivado2018.3

芯片: xc7z100ffg900-2

本实验参考资料主要来源:https://www.eefocus.com/antaur/blog/17-08/423773_0818c.html

实验目的:将ADC接收的数据先存入DDR3,待PS端读取完成后,再存入一批。

 

1、工程规划

DDR芯片的管脚是绑定到Zynq的DDR接口上的。

 而Zynq系统的这个DDR总线接口有是链接在其内部“Memory Interfaces”中的“DDR2/3,LPDDR2 Controller”可配置硬核上的。

图片来源: https://www.eefocus.com/antaur/blog/17-08/423773_0818c.html

因此,要想PL访问板上的DDR3存储器,必须借道Zynq中的“Memory Interfaces----DDR2/3,LPDDR2 Controller”(后文简称“DDR3 Controller”)。在Zynq系统中,ARM Core(CPU)能够访问硬核“DDR3 Controller”,根据经验可以确定“DDR3 Controller”一定是一个从设备,而PL要想访问“DDR3 Controller”的话,PL一定要是一个主设备,由PL发起读写操作。

“DDR3 Controller”是封装在Zynq子系统中的,因此,PL必须连接Zynq的从机接口。本节使用普通的从机接口“32b GP AXI Slave Ports”。

交互数据将会经过Zynq子系统的内部总“Central Interconnect”转发给Memory Interfaces。具体数据交互路径如上图蓝色箭头。

 根据上述分析,SoC系统集成方案框图如下:

 2.Zynq系统裁剪

修改配置,裁剪掉在本项目中不需要的Zynq中的硬核。

 封装图如下:

FCLK_CLK0和FCLK_RESET0_N是输出时钟和复位信号。这两个信号的出处已在上图中标注。这两个信号详情请见附录1.

利用FCLK_CLK0驱动PL端的时序逻辑。而将Y9管脚引入的100MHzGCLK信号旁路。

zynq子系统剪裁完毕。

3、生成AXI4-Lite Master IP

详细步骤见:https://www.eefocus.com/antaur/blog/17-08/423751_6cc0d.html

代码见:https://www.eefocus.com/antaur/blog/17-08/423773_0818c.html

4、完成Block Design

添加上一步生成的axi_master的IP核到block design,点击Run Connection Audomation后,如下图所示。彩色标注出的PL端的时钟信号和复位信号,均由Zynq子系统产生。GP接口速率低,更换使用HP接口。

按F6检查链接,检查无误后,点击Address Editor标签,可以看到相关的内存分配。内存映射相关见首页链接。

主机模块,使用的默认起始地址是0x4000_0000,这个在代码中定义的。也可在IP核的GUI中看到。从文档中知道,这个地址是向PL AXI Slave Port #0,即GP0的,Size是1G。

来自文档:DS190 Zynq-7000 SoC Data Sheet: Overview

数据传输路径:(猜测)

PL 中的Master IP向0x4000_0000地址写入数据,经过PL中的AXI Interconnect直连,将会转发给GP0,GP0收到后,转给DDR.

硬件设计完毕。

5、Generate Bitstream

创建HDL Wrapper —> Run Synthesis(—> Schematic查看I/O Planning,根据需要进行管脚绑定)—> Generate Bitstream

如果BD有修改,则右键block design—> generate output products。系统会自动更新HDL wrapper。

不方便仿真,所以直接下板测试。

6、启用SDK

本实验启用了ARM,必须再SDK中进行SoC工程配置,否则zynq不会工作。

 

第一步:Vivado中File —>Export Hardware...(其中需要Include Bitstream)

第二步:Vivado中File —>Launch SDK

第三步:创建用户工程,File —>New —> Application Project   

在配置中选择     会自动生成板载支持库函数。

第四步:在helloword.c中编写相应代码,保存后,系统会自动编译。(因为系统默认设置Build Automatically,在Project栏中)

第六步:Program FPGA

SDK相关说明

第一步export过来的文件夹下的system.hdf 和生成的板载支持库文件夹下的system.mss可以查看相关信息。

 

 

 

这篇关于zynq7000 PL读写DDR3----实验笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759006

相关文章

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个