FPGA之zynq_DDR(1)

news/2024/9/24 12:38:30/

学习一下关于DDR的知识和vivado操作吧。

用PS控制DDR内存读写

【ZYNQ-7000开发之六】使用PS控制DDR3的读写_xil_in32读取ddr数据-CSDN博客

在新建block design时,选择DDR,选择UART(为什么要用uart?

找到DDR的地址:

在工程目录.sdk --> _bsp --> ps7_cortexa9_0 --> include中找到xparameter_ps.h文件。

这个文件是CortexA9可以直接控制外设的宏定义。

在里面找到了DDR的地址。

/* Canonical definitions for DDR MEMORY */
#define XPAR_DDR_MEM_BASEADDR        0x00000000U
#define XPAR_DDR_MEM_HIGHADDR        0x3FFFFFFFU

 需要用这个地址,对DDR3进行读写操作。

相同目录下,有xil_io.h文件,这个头文件是CortexA9可以直接控制的内存映射或者映射到了地址空间的IO(看不懂)。

翻到最下面,看到如下代码:

/* The following functions allow the software to be transportable across
 * processors which may use memory mapped I/O or I/O which is mapped into a
 * seperate address space.
 */
u8 Xil_In8(INTPTR Addr);                //从某个地址读数据
u16 Xil_In16(INTPTR Addr);
u32 Xil_In32(INTPTR Addr);

void Xil_Out8(INTPTR Addr, u8 Value);                //向某个地址写数据
void Xil_Out16(INTPTR Addr, u16 Value);
void Xil_Out32(INTPTR Addr, u32 Value);

参考的csdn博客中,看到了宏定义:

#define        DDR_BASEARDDR        XPAR_DDR_MEM_BASEADDR + 0x10000000

xil_printf()函数打印。

Xil_Out32(地址, 数据); 写入

用ref = Xil_In32(地址); 读取

记得在main函数的开头和结尾协商init_platform();和cleanup_platform(); 、return 0。

这样就实现了对DDR地址的读写操作了!

然后在串口终端就可以看到打印的DDR地址的数据了。所以选择UART是为了串口调试。

DDR简介

Zynq处理器的DDR控制器详解_zynq ddr-CSDN博客

Zynq上的存储器接口与差分时钟与DDR3_zynq ddr3-CSDN博客

1. DDR2、DDR3等是DDR控制器的不同的接口类型。

2. DDR控制器实现的功能:初始化,读写数据,管理控制信号。

3. 初始化:设置相关参数,如时序和地址映射等。

4. 读写时:控制器需要与DDR存储器进行数据交换,并且确保数据的完整性。【时序控制

DDR存储器控制器主要包括3个主要的模块:

DDRC——核心存储控制器和调度器

DDRI——AXI存储器端口接口

DDRP——数字PHY以及控制器

1. DDR存储器可以被配置为16bit或32bit,能在配置为8、16、32bit的单个块的DRAM存储器中访问1GB地址空间。

DDR3支持最大1333Mb/s的速度。

2. 对PS和PL的共享存储器的共享访问是通过多端口DDRI来支持的。它具有4个AXI从机端口:

PL通过两个专用的64bit端口(AXI_HP)来访问;

一个64bit端口通过L2 Cache控制器专用于ARM CPU,这个端口可以被配置为低延迟;

所有其他AXI主机通过中央互联共享剩下的端口。

(每个AXI接口配备有专用的事务FIFO)

3. DDRP PHY处理从控制器来的读写请求,并在DDR存储器的时序约束下,把请求翻译为信号。(看不懂这里)

大概理解为:DDRI是PS/PL于DDR通信的接口,DDRP传递请求给DDR芯片,DDRC是存储器的读写。

关于DDR的参数和差分时钟等,下次再学吧。


http://www.ppmy.cn/news/1444831.html

相关文章

CSS 如何在长方形中间加一条横线

1、html <div class"arrow"><img src"~/assets/images/reportsModule/&#xff1e;&#xff1e;&#xff1e;.png" alt"" srcset"" class"yo" style"transform: rotateY(180deg);"></div> 代…

清理 Conda 和 pip 缓存

清理 Conda 缓存 查看 Conda 缓存的使用情况 conda clean --dry-run --all 删除不再使用的包和缓存 conda clean --all 清理 pip 缓存 Python缓存文件的默认位置&#xff1a; Windows 10&#xff1a;C:\Users\username\AppData\Local\pip\Cache macOS&#xff1a;/Users/…

Excel 批量创建sheet页

参考资料 最巧妙的Excel批量创建工作表方法 一. 需求 ⏹有如下模板&#xff0c;现想根据提供的姓名&#xff0c;批量创建sheet页&#xff0c;要求每个sheet页拥有相同的模板 二. 通过透视表&#xff0c;批量创建sheet页面 ⏹如下图所示的步骤&#xff0c;创建透视表后&#…

Bert基础(十九)--Bert实战:文本相似度匹配

文本匹配是指计算机系统识别和确定两段文本之间关系的任务。这个概念非常广泛&#xff0c;涵盖了各种场景&#xff0c;其中文本之间的关系可以是有相似度、问答、对话、推理等。在不同的应用场景下&#xff0c;文本匹配的具体定义可能会有所不同。 以下是几种常见的文本匹配任务…

Unity+Shader入门精要-1. 入门shader

今天开始正式整合学习的shader内容。 Simple Shader 主要介绍了大概的shader格式。 Shader "Unity Sgaders Book/Chapter 5/Simple Shader" //shader名 {Properties{//声明color类型的属性_Color("Color Tint", Color) (1.0,1.0,1.0,1.0)}SubShader{Pa…

Visual Studio Installer 运行python 汉字

问题描述&#xff1a; Visual Studio Installer 在正常情况下运行python文件时时候&#xff0c; 不能编译中文注释&#xff0c;更不能输出中文。 解决方法&#xff1a; 在程序开头下面这一行即可。 #coding:GBK 原因及解释&#xff1a; #coding:GBK 是 Python 源文件中的一个…

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2

title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…

反射会打破单例模式吗

反射确实可能打破单例模式。单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点。然而&#xff0c;通过Java反射API&#xff0c;我们可以绕过私有构造器和静态变量&#xff0c;从而可能创建类的多个实例&#xff0c;进而破坏单例模式的约束。 下面是一个使用Jav…