使用SDRAM控制器IP核对SDRAM进行读写操作-飞外网

SDRAM是一种RAM类型的易失性存储器件,因其具有较大的容量和相对较低的价格在嵌入式系统中应用广泛。然而应用SDRAM需要实现刷新操作、行列管理、不同延迟和命令序列等逻辑,控制复杂,而Qsys提供的SDRAM控制器IP核接口极大的方便了SDRAM的使用,本文我们实现使用SDRAM控制器IP核对SDRAM进行读写操作。

理论部分简介

SDRAM控制器IP核能够处理所有的SDRAM协议要求,包括上电初始化、地址复用、刷新、读写时序等,极大的方便了SDRAM的使用。下面我们先来看看SDRAM控制器IP核和SDRAM芯片的连接框图,如下所示:

Avalon从机接口用来连接我们的CPU,Avalon从机接口是SDRAM控制器IP核中仅为用户可见的部分。从控制器端口提供一个如SDRAM芯片一样大的平滑、线性存储器空间。当访问从控制器端口时,SDRAM协议的细节完全透明。Avalon接口作为一个简单的存储器接口操作,没有存储器映射的配置寄存器。这里我们需要注意的是:SDRAM芯片必须和Avalone接口一样以相同的时钟来驱动。

我们可以看到图中的片内锁相环(PLL),它就是用来调整SDRAM控制器与SDRAM芯片之间的时钟相位差。在较低的时钟频率下,可能不需要PLL。在较高的时钟频率下,当信号在引脚上有效时,需要PLL来调整SDRAM时钟。PLL并没有包括在SDRAM控制器内。如果需要PLL,设计者必须在生成Qsys系统模块以外手动添加PLL。Altera FPGA和SDRAM芯片的不同组合将要求不同PLL的设置。

还有一点我们需要说明的是fmax性能取决于整个硬件设计。Qsys系统模块的主控制器时钟驱动SDRAM控制器和SDRAM芯片。因此,整个系统模块的性能决定SDRAM控制器的性能。例如,为了实现100MHz的fmax性能,系统模块必须设计为100MHz时钟率,且QuartusII软件的时序分析必须检验硬件设计是否能够进行100MHz的操作。说完了SDRAM的综述之后下面我们就总结给出SDRAM控制器IP核的功能特性:

(1)SDRAM控制器IP核具有不同数据宽度(8、16、32或64位)、不同内存容量和多片选择等设置。

(2)SDRAM控制器IP核可以全面支持符合PC100标准的SDRAM芯片。 (PC100,表明时钟信号为100,数据读写速率也为100)

(3)SDRAM控制器IP核可选择与其他的片外Avalon三态器件共用地址和数据总线,该特性在I/O引脚资源紧张的系统中很有用。我们可以在Qsys中使用SDRAM IP核的配置向导来指定硬件特性和仿真特性。SDRAMIP核配置向导有两个选项卡:Memory Profile和Timing,如下图所示。

为了使用方便,Presets列表提供几个预定义的SDRAM配置。如果实际使用的SDRAM芯片型号与列表中的一致,可直接选用而不用设置其他选项。选择不同的预配置,SDRAM IP核将自动改变Memory Profile和Timing选项卡上的值来匹配指定的配置。如果实际使用的SDRAM芯片与列表中的不相同,则需要设计者根据SDRAM芯片数据手册的参数来设置Memory Profile和Timing标签上的值,改变任何选项卡上的配置设置转变Preset值为custom。

当然我们也可以将我们配置好的SDRAM参数添加到预定义的SDRAM配置,在今后的使用过程中我们就直接选择我们添加的预定义的SDRAM配置。接下来我们就来简单的介绍一下Memory Profile和Timing。

(1) Memory Profile选项卡

Memory Profile选项卡允许设计者指定SDRAM的结构,例如地址和数据总线宽度、片选信号的数目和区的数目等。Memory Profile选项卡设置项如下表所示。

这些参数值可参照使用的SDRAM手册来设置。通过Memory Profile选项卡上的设置后,消息框以兆字节、兆bit位以及可寻址的字长显示SDRAM预期的内存容量。将这些预期值与选择的SDRAM的实际大小相比较可以检验设置是否正确。说完了Memory Profile选项卡,接下来我们看看Timing选项卡。

(2) Timing选项卡

Timing选项卡允许设计者设置SDRAM芯片的时序规范。正确值在SDRAM芯片数据手册中提供。Timing选项卡上可用的设置如下表所示。

我们需要注意的是无论我们输入的精确时序值如何,每个参数实现的实际时序将为Avalon时钟的整数倍。对于每隔一段时间执行一个刷新命令的参数,实际时序将不超出目标值,而其他所有参数,实际时序将大于或等于目标值。

操作任务

利用官方SDRAM ControllerIP核实现对SDRAM的读写操作。

硬件设计

实验的硬件框架如下图所示:

图中,我们要把clk IP 核的时钟频率设置为 100MHz。

另外需要注意的是,Nios II IP 核需要将复位向量 Reset Vector 和异常向量 Exception Vector 都设置为 SDRAM,如下图所示:

现在我们主要来介绍一下新添加的SDRAM IP 核,按照使用的 SDRAM 型号为

W9825G6KH的datasheet,配置如下图所示。

为了方便大家以后的使用,下面我们就简单为大家讲解一下如何将自己的SDRAM配置添加至Library中。当我们配置好SDRAM以后,我们可以在窗口的右下方找到【New】按钮并点击,弹出如下图所示页面。

在该页面中,我们将Preset name和Preset description填写好以后,我们就可以点击【Save】按钮,弹出如下图所示提示窗口。

在该提示窗口中我们选择是,这时我们就可以在Library中看到我们添加的SDRAM配置了。然后我们重新打开Qsys软件,这时,我们就可以在SDRAM的Library中看到我们添加的W9825G6KH。最后我们再补充说明一点,SDRAM为动态存储器对时序要求比较高,由于FPGA内部有延迟,所以PLL输出100Mhz时钟频率给SDRAM_SCLK时,PLL时钟需要设置相位偏移,

相位偏移我们设置为-75deg。

顶层代码如下:

从顶层代码可以看到,我们主要例化PLL和SDRAM控制器,PLL生成两个100MHz的时钟,其中一个偏移-75度用于驱动SDRAM芯片。

软件设计

本实验的软件工程代码如下:

在代码中,首先定义了一个aut_u8型的指针ram指向SDRAM的基地址+0x10000,之后我们改变或读取指针指向的地址(SDRAM基地址+偏移地址)的值,就改变了SDRAM相应地址(偏移地址/2)的值。在主函数中,我们通过memset函数将从ram指向地址开始的100个地址的值全部清0,再通过一个for循环向从ram指向地址开始的100个地址的赋相应的值,最后再将这100个值逆向读取打印出来,这样就完成了SDRAM的读写操作。可以看出,通过SDRAM控制器的使用,对SDRAM的读写操作变得非常简单。

之所以对SDRAM的读写要偏移0x10000,是因为CPU程序的运行占用了从SDRAM基地址开始的部分内存,如果我们不做偏移直接从基地址开始读写,则很有可能破坏程序正常运行,0x10000这个值并不固定,只要别占用程序运行的内存就可以了。

验证

首先我们需要在Quartus II软件中将qsys_sdram.sof文件到开发板中;然后在Eclipse软件中将qsys_sdram_rw.elf文件进去。

qsys_sdram_rw.elf完成以后,我们的C程序会自动运行,同时在Nios II Console界面会显示程序的打印信息。图中可以看到从SDRAM中读出的数据为99到0,与我们写入的数据一致,说明本次实验验证成功。

如果大家在elf文件的过程中工具提示错误,如下图所示:

我们留意到在过程中,Console 会提示如下图所示的信息,说地址“0x2000020”到 “0x200D757”之间验证错误。

错误的这段地址并不固定,但它们在Qsys 系统中刚好处于 SDRAM 的地址范围内。此时,我们可以通过以下方式解决报错的问题。

在Eclipse 中右击应用工程“qsys_sdram_rw”,在弹出的菜单中选择“Run As”

—>“Run Configurations”,会弹出“Run Configurations”配置页面,如下图所示:

在上图所示页面中的“Target Connection”标签页最下方,勾选“Reset the selected

target system”。在上图中,我们同时勾选了“Ignore mismatched system ID”以及“Ignore mismatched system timestamp”。设置完成后,点击“Apply”,最后点击“Run”来重新elf文件,这样在的过程中就不会报错了。


大拇指FPGA开发板(Anlogic EG4S20BG256版本)相关资料介绍 1、大拇指安路FPGA开发板的总体介绍“大拇指”安路FPGA极简开发板是专门针对数字电路课程开发的,核心板不追求大而全,... 发表于 06-29 17:04 • 3502次
JEDEC标准 SDRAM在读取期间和由内存控制器执行写入期间。DQS是edge--与的数据对齐读取和居中—与写入数.... 发表于 06-27 14:56 •
使用memheap内存管理算法对片内RAM和片外SDRAM进行管理的方法   在开发中由于单片机自带的 RAM 空间比较小,有时候需要扩展片外的 RAM 以供使用,RT-Th.... RT-Thread 操作系统 发表于 06-17 08:53 • 322次
arm程序在nand flash里启动获取超级终端数值失败是何原因 各位高手,我刚开始学习arm,写了一段程序运行,下到sdram里仿真没问题,可以正常运行,但下到nand flash里去启动,里面的变量... 发表于 06-09 15:09 • 1010次
SDRAM封装内存模块VD3D16G72XB199XX2WH用户手册 VD3D16G72XB199XX2WH是16Gbit DDR3 SDRAM高密度系统封装内存模块。它.... 发表于 06-08 15:16 •
VD3D16G16XB96XX2WX用户手册 VD3D16G16XB96XX2WX是封装内存中的16Gbit DDR3 SDRAM高密度系统单元它.... 发表于 06-08 15:15 •
SDRAM VD2D8G08XS88XX8U5用户手册 VD2D8G08XS88X8X8U5是8G位DDR2 SDRAM,按1G×8位组织。该设备有八个模具.... 发表于 06-08 15:13 •
SDRAM VD2D1G08xS74xx1U6用户手册 VD2D1G08XS74XX1U6是一个1024M位DDR2 SDRAM,按128M×8位组织。该设.... 发表于 06-08 15:12 •
SDRAM封装内存模块VD2D2G16XB95XX2U6用户手册 VD2D2G16XB95XX2U6是一个2Gbit DDR2 SDRAM高密度系统封装内存模块。它是.... 发表于 06-08 15:11 •
SDRAM VD2D8G08RS88SS8U6用户手册 VD2D8G08XS88X8X8U6是8G位DDR2 SDRAM,按1G×8位组织。该设备有八个模具.... 发表于 06-08 14:30 •
SDRAM VD2D4G72xx191xx3U6用户手册 VD2D4G72XX191XX3U6是一个4608M位DDR2 SDRAM,结构为64M×72位。该.... 发表于 06-08 14:28 •
SDRAM VDSD512M16xS54xx1V75用户手册 VDSD512M16XS54XX1V75是一个512M位SDRAM,由32M个字×16位组成。该设备.... 发表于 06-08 11:45 •
SDRAM VDSD4G16xS62xx8V75用户手册 VDSD4G16XS62XX8V75是一个4096M位SDRAM,由256M个字×16位组成。该设备.... 发表于 06-08 11:43 •
SDRAM VDSD4G08xS54xx8V75-Ⅱ用户手册 VDSD4G08XS54XX8V75-Ⅱ是一个4096M位SDRAM,由512M个字×8位组成。该设.... 发表于 06-08 11:38 •
SDRAM VDSD4G08xS54xx8V75用户手册 VDSD4G08XS54XX8V75是一个4096M位SDRAM,由512M个字×8位组成。该设备有.... 发表于 06-08 11:36 •
SDRAM VDSD2G40xS70xx5V75用户手册 VDSD2G40XS70XX5V75是一个2.56G位SDRAM,按64M×40位组织。该设备有五个.... 发表于 06-08 11:35 •
SDRAM VDSD2G32xS70xx4V75用户手册 VDSD2G32XS70XX4V75是一个2048M位SDRAM,按64M个字×32位组织。该设备具.... 发表于 06-08 11:34 •
SDRAM VDSD2G08xS54xx4V75用户手册 VDSD2G08XS54XX4V75是一个2048M位SDRAM,由256M个字×8bit组成。该设.... 发表于 06-08 11:32 •
SDRAM VDSD1G32xS70xx2V75-Ⅱ用户手册 VDSD1G32XS70XX2V75-Ⅱ是一个1024M位SDRAM,由32M个字×32位组成。该设.... 发表于 06-08 11:31 •
SDRAM VDSD1G32xS70xx2V75用户手册 VDSD1G32XS70XX2V75是一个1024M位SDRAM,由32M个字×32位组成。该设备具.... 发表于 06-08 11:29 •
SDRAM VDSD3G48xQ114xx6V75用户手册 VDSD3G48XQ114XX6V75是一个3072M位SDRAM,由64M个字×48位组成。该设备.... 发表于 06-08 10:29 •
2048M位DDR1 SDRAM VD1D2G32xS86xx2T7B英文手册 VD1D2G32XS86XX2T7B是一个2048M位DDR1 SDRAM,由64M个字×32位组成.... 发表于 06-01 17:44 •
RT Thread Studio如何将数据定义到外部SDRAM中去? 在LVGL中为了提高LCD RGB屏幕的刷新速度,现在将static lv_color_t buf_1[MY_DISP_HOR_RES * 20]; 发表于 05-20 15:20 • 3715次
嵌入式裸机之汇编初始化SDRAM实现过程 1.SDRAM引入1.1 常见存储器介绍:DRAM介绍同步动态随机存取内存(synchronous dynamic random-access memory,简... 发表于 05-16 15:03 • 2311次
ARM裸机重定位的目的是什么?如何实现 1、 重定位的目的 对于2440上电后,分两种情况,从nor启动,直接从nor作为0地址,开始在nor中运行。从... 发表于 05-16 14:32 • 1811次
有关arm裸机SDRAM的相关知识介绍 SDRAM引入SDRAM:Syncronized Dynamic Ramdam Access Memory,同步动态随机存储器DDR:DDR就是DDR ... 发表于 05-16 14:15 • 1407次
移植RTThread Studio LVGL 8.2.0报错怎么解决? 1.芯片STM32F49BIT6 使用外部SDRAM,移植LTDC驱动RGB屏幕三色显示正常。2.添加LVGL 8.2.0软件包,没有... 发表于 05-16 09:49 • 1513次
传统的信号分析通常在 PDN 是“理想”的假设下运行。这是为了方便和权宜之计,而不是准确性。随着我们.... 要长高 发表于 05-13 17:33 • 1286次
谈一谈ARM920T的undefined与svc异常模式 一、undefined异常模式0. 当执行未定义指令时进入und模式,进入过程:CPU跳至0x4地址执行代码,自动保存CPSR寄存器值至S... 发表于 05-11 17:57 • 6308次
讲解使用memheap内存管理算法对内部RAM和片外的SDRAM进行管理的方法 在开发中由于单片机自带的 RAM 空间比较小,有时候需要扩展片外的 RAM 以供使用,RT-Thread 提供了 memheap 管理算法来... 发表于 05-11 14:45 • 2876次
上图中,把SDRAM用到的所有指令都罗列出来了,其实我们在运用SDRAM的时候,只用到其中部分指令。.... FPGA设计论坛 发表于 05-09 10:09 • 407次
硬件和布局设计DDR3 SDRAM的考虑因素 本申请说明中提供的设计指南适用于利用DDR3 SDRAM IP核的产品,它们基于内部平台的汇编由.... 发表于 03-31 15:28 •
MCU怎么在扩展的SDRAM上运行程序? 在使用MCU的嵌入式系统设计中,当程序或者数据内存占用太大而无法放入片上闪存或SRAM时,开发者通常.... 发表于 02-10 10:09 •
单片机系统中扩展SDRAM的几个配置步骤 在使用MCU的嵌入式系统设计中,当程序或者数据内存占用太大而无法放入片上闪存或SRAM时,开发者通常.... 发表于 02-08 16:31 •
STM32CubeMX | 31-使用硬件FMC读写SDRAM(W9825G6KH) 本篇详细的记录了如何使用STM32CubeMX配置 STM32F767IGT6 的硬件FMC外设与 .... 发表于 12-08 13:21 • 225次
第一部分 设计概述 1.1 设计目的 该作品的设计灵感来自于科幻电影《星际特工》中的头盔控制攻击系统.... FPGA技术江湖 发表于 12-02 17:52 • 1906次
MCU系统中Iot RAM的潜在应用 我们来看一下MCU设计中的情况,其中IoT RAM明显比外部DRAM具有优势。在下面的通用MCU图中.... 发表于 11-06 09:51 • 161次
近日,存储大厂美光发布示警信息称,由于PC客户面临其他零件短缺,导致对存储器拉货减少。受此影响,美光.... Blue5 发表于 10-05 12:49 • 1125次
高手进阶SDR的SDRAM内存原理 高手进阶SDR的SDRAM内存原理(c++嵌入式开发linux)-作为电脑中必不可少的三大件之一(其.... 发表于 08-04 13:21 • 313次
(网盘)关于SDRAM和录音机等FPGA视频 (网盘)关于SDRAM和录音机等FPGA视频(android嵌入式开发教程)-关于SDRAM和录音机.... 发表于 08-04 12:21 • 208次
利用ISE的SDRAM设计的FIFO实验 利用ISE的SDRAM设计的FIFO实验(嵌入式开发转后端开发)-利用ISE的SDRAM设计的FIF.... 发表于 08-04 12:14 • 216次
FPGA作为ARM的SDRAM使用的LPC3250与FPGA接口程序 FPGA作为ARM的SDRAM使用的LPC3250与FPGA接口程序(华为嵌入式开发工程师拉勾网)-.... 发表于 08-04 12:09 • 204次
基于FPGA的SDRAM串口实验 基于FPGA的SDRAM串口实验(嵌入式开发板实验报告)-基于FPGA的SDRAM串口实验,veri.... 发表于 08-04 09:43 • 249次
基于FPGA的DDR3SDRAM控制器设计及实现 基于FPGA的DDR3SDRAM控制器设计及实现(嵌入式开发式入门)-该文档为基于FPGA的DDR3.... 发表于 07-30 13:07 • 297次
基于FPGA的SDRAM控制器的设计与实现简介 基于FPGA的SDRAM控制器的设计与实现简介(嵌入式开发工程师和基层公务员)-该文档为基于FPGA.... 发表于 07-30 09:34 • 251次
目前,在很多通信芯片及系统的开发中,常常需要用到存储容量大、读写速度高的存储器。在各种随机存储器件中.... FPGA设计论坛 发表于 06-30 09:16 • 1190次
前两天收到了华芯微特提供的一块开发板,今天抽时间测试了一下,感觉效果还不错,分享给大家。 之前做了一.... 嵌入式ARM 发表于 04-25 14:29 • 3235次
在FPGA视频图像处理系统中,经常需要使用到SDRAM作为视频图像缓存。SDRAM控制器可以分为上电.... FPGA之家 发表于 04-19 09:46 • 2067次
SAMA5D2动态存储器实现指南 本应用笔记为SAMA5D2系列微处理器提供了有关PCB布线和软件设置的设计建议,以确保采用多种SDR.... 发表于 04-01 09:23 • 203次
浅谈SSD异常掉电导致的故障现象 固态硬盘由于必须使用FTL做逻辑地址和物理地址之间的转换,如果在SSD读、写、删除等正常工作的情况下.... 发表于 03-31 10:13 • 2467次
DDR SDRAM控制器的设计与实现 本文首先分析了DDR SDRAM的基本特征,并提出了相应的解决方案详细介绍了基于J EDEC DDR.... 发表于 03-28 10:57 • 369次
设计最优化的时钟电路 高速数字电路设计超越了简单的“1”与“0”的世界而进入模拟电路领域,避免传输线效应造成的系统故障是设.... 发表于 03-28 10:40 • 298次
使用Virtex-4 FPGA器件实现DDR SDRAM控制器 本应用指南描述了在 Virtex™-4 XC4VLX25 FF668 -10C 器件中实现的 DDR.... 发表于 03-26 14:42 • 228次
一、从结构说起: 1、P-bank SDRAM,也即我们的内存,我们的电脑,手机等设备都离不开我们的.... city_prolove 发表于 03-25 17:08 • 3253次
K4S640832K和K4S641632K的SDRAM规范资料免费 K4S640832K/K4S641632K是采用三星高性能CMOS工艺制造的67108864位同步高.... 发表于 03-17 16:03 • 368次
DDR3价格飞涨 预上涨40%-50% 2021 年,DDR3内存价格受缺货影响预上涨 40%-50%,春节之后的价格就已经上涨至3.3美元.... 发表于 03-15 15:18 • 2177次
如何使用FPGA实现SDRAM控制器的IP核的设计 1.SDRAM使用越来越广泛。2.SDRAM具有存储容量大,速率快的特点。3.SDRAM对.... 发表于 03-05 14:49 • 338次