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

相关文章

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

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

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

C# 读写ini文件操作实现

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