【FPGA】基于Avalon_MM接口的SDRAM读写

这篇具有很好参考价值的文章主要介绍了【FPGA】基于Avalon_MM接口的SDRAM读写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、SDRAM

1.1 SDRAM简介

C4开发板上的SDRAM芯片是海力士生产,有256Mbits容量。

SDRAM是同步动态随机存储器(存储阵列不断刷新)。

SDRAM寻址基本原理:行列寻址

SDRAM的总存储容量=L-BANK的数量×行数×列数×存储单元的容量(数据线的位宽)。

1.2 SDRAM引脚:

clk 系统时钟

CKE 时钟使能 1:clk有效

cs_n 片选 0:clk、CKE、DQM有效

RAS_n 行地址选通 0有效

CAS_n 列地址选通 0有效

WE_n 写使能 0有效

BA[1:0] Bank地址 00、01、10、11四个

DQM[1:0] 数据掩码 1有效在下个时钟上升沿,低/高字节掩码

A[12:0] 地址总线 A0-A11行地址、A0-A8列地址、A10自动预充电

DQ[15:0] 数据总线 双向复用

1.3 SDRAM操作指令

禁止命令:cs_n无效

NOP空操作命令:cs_n有效;RAS_n、CAS_n、WE_n无效

加载模式寄存器:初始化、配置工作方式; tRSC:模式寄存器设置需要等待的时间,一般取三个时钟周期。

行激活命令:cs_n、RAS_n有效、地址线A0-A1对应行;tRCD:列读写与行激活的时间间隔。

预充电命令:行关闭、cs_n、CAS_n、WE_n有效;tRP:预充电需要等待的时间,取三个时钟周期。

列读命令:cs_n、CAS_n有效(A10有效时,突发读完后立即预充电);CAS潜伏期,两个时钟周期。

列写命令:cs_n、CAS_n、WE_n有效(DQM控制该位对应的字节是否被写入新的数据)。tWR:写恢复时间。

自动刷新命令:非持续(所有Bank预充电),64ms 刷新8192次;tRC:自动刷新需要等待的时间

(3)SDRAM的操作步骤

初始化:输入稳定期200us(NOP空操作)→全Bank预充电(A10拉高)→刷新(一个即可)→设置模式寄存器(设置突发类型BT、CAS潜伏期、突发长度BL)

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

行激活:初始化完成后,无论读操作还是写操作,都要先激活SDRAM中的一行,使之处于活动状态(行有效)。在此之前还要进行SDRAM的片选和L-Bank的定址,与行激活可以同时进行。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

列读写:行地址激活后,进行列读写。在SDRAM,地址线是行列公用的,所以列寻址地址线仍是A0—A11,在寻址时,利用RAS(行地址选通脉冲)和CAS(列地址选通脉冲)来区分行寻址和列地址。列地址位宽小于行地址,A9、A11没有用到。

列寻址信号与读写信号同时发出,读/写命令通过WE信号来控制,WE为低是写命令,为高是读命令。tRCD:列读写与行激活的时间间隔。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档
avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

数据读出:选定列地址就确定了具体的存储单元之后,数据通过数据I/O通道(DQ)输出到内存总线。CAS发出需要经过一段时间才能数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间为CAS潜伏期。只有读操作有CAS潜伏期,写操作没有。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

数据写入:数据写入操作也是在tRCD之后,没有CL(CAS潜伏期只在读取操作中)。数据和写命令同时发送,为了保证数据可靠写入,通常流出足够的写回复时间(tWR)

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

突发长度:指在同一行中相邻的存储单元连续进行数据传输的,连续传输所涉及到存储单元(列)的数量就是突发长度。在连续读/写操作时,为了对当前存储单元的下一个单元进行寻址,需要不断发送列地址与读/写命令(行地址不变)。

突发传输技术指定其实列地址与突发长度,内存依次自动对后面相应数量的存储单元进行读/写操作,而不用控制器连续地提供列地址。

突发长度(BL)的值在模式寄存器配置阶段进行设置。突发长度(BL)1、2、4、8、全页(一整行的数据量)。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

预充电:通过命令控制,可以单独的预充电命令(手动预充电),也可以使用带预充电的读或者写命令来完成。

单独的预充电命令中,A10则控制着是对指定的L-Bank预充电还是所有的L-Bank预充电,对指定Bank预充电需要提供Bank的地址,对所有Bank预充电只需要将A10拉高。

在发出预充电命令之后,要经过一段时间才能发送激活命令打开新的工作行,这个时间间隔被称为 tRP(预充电有效周期)

写操作时,由于每笔数据的真正写入需要一个足够的周期来保证,这段时间就是写恢复周期(tWR)。所以预充电不能与写操作同时进行,必须要在tWR之后才能进行预充电命令,以确保数据的可靠写入,否则重写的数据可能出错。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档
avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

刷新:为保证存储的数据不丢失。定期发送刷新命令,逐行刷新。数据有效保存期上限64ms,SDRAM有每个L-Bank有8192行,所以64ms刷新8192次

在自动刷新过程中,所有L-Bank都停止工作。每次刷新操作所需要的时间为自动刷新周期(tRC)。

在自动刷新指令发出后需要等tRC才能发送其他指令。64ms之后再次对同一行进行刷新操作,循环往复。

数据掩码:控制I/O口取消哪些输出或输入的数据。每个DQM对应一个字节,当DQM为1时,对应的字节被掩盖(无效数据)。DQM为0表示数据有效。

SDRAM协议规定:读取数据时,DQM延时两个时钟后生效;写入数据时,DQM和写入命令一样立即生效。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档
avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

1.4 SDRAM时序流程

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

先初始化,初始化结束后进行读写操作,进行读写操作必须经过行激活,然后列读或列写,最后进行预充电,表示一次数据传输完成,预充电结束再次进行行激活,下一次数据传输。

在数据传输过程中,必须定时发送自动刷新命令,逐行去刷新。

1.5 配置SDRAM ip核

打开quartus中的Platform Desiger

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

连线:

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

生成ip

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

把例化模板cope到工程里

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

配置参数

时钟频率100M SDRAM外设时钟为100M。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档
avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档
avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

1.6 SDRAM读写整体框架

将整个SDRAM控制器分为两个部分,即控制逻辑与接口逻辑。控制逻辑作为Master,用于跨时钟域输入输出数据的缓存以及突发传输请求生成。接口逻辑作为Slave,用于执行Master输出的突发传输请求,实现SDRAM存储器的初始化时序、读写时序以及刷新时序等。

方案1:SDRAM接口逻辑部分采用IP核实现,优点:不需要关注IP核内部是怎样实现SDRAM时序的,只需要了解IP核的接口信号时序(Avalone_MM内存映射接口)即可。

方案2:使用Verilog设计SDRAM接口逻辑,优点:有利于初学者深入理解SDRAM协议原理及其工作方式。

方案一工程框架:

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

数据流向:

写:

上位机输入数据给串口接收模块uart_rx经过串并转换发送数据和请求给到sdram_ctrl模块,sdram_ctrl 发送写请求、地址和数据经过Avalon_MM_master接口给Avalon_MM_slave接口的sdram_interface模块,sdram接口模块经过SDRAM写时序发送数据给SDRAM外设。

读:

按键消抖模块发送读请求触发sdram_ctrl模块的读传输(请求+地址+数据)经过Avalon_MM_master接口给Avalon_MM_slave接口到sdram_interface模块,经过SDRAM读时序从SDRAM外设中读出数据给到SDRAM控制模块中,经控制模块发送数据和使能给到串口发送模块uart_tx经过并串转换发送给上位机进行显示。sdram控制模块发送数据给串口发送模块加握手信号,在握手信号ready有效时,在传输数据。

2、Avalon 接口

2.1Avalon接口规范简介

Avalon接口使您能够轻松连接Intel FPGA中的各个组件,从而简化了系统设计。Avalon 接口系列对应用于流式传输高速数据(Avalon_ST网络包文传输,视频传输)读写寄存器和存储器(Avalon_MM)以及控制片外器件(管道接口)的接口进行了定义。Platform Designer中的组件采用这些标准接口。此外,您可以在自定义组件中使用Avalon接口,以增强设计的互操作性。

本规范定义了7个 Avalon接口:

  • Avalon Streaming Interface ( Avalon -ST)一支持单向数据流的接口,包括多路复用流,数据包(以太网包)和DSP数据。

FIR,FFT IP核用到流接口;

  • Avalon Memory Mapped Interface ( Avalon -MM)一一种基于地址的读/写接口,是主-从连接的典型接口。

主机master控制从机slave完成传输或发送应答

  • Avalon Conduit Interface一一种接口类型,适用于那些不适合任何其他Avalon类型的单个信号或信号组。您可以在一个Platform Designer系统内部连接管道接口(conduit interface)。或者,您可以将它们导出以连接到设计中的其他模块或者连接到FPGA 管脚

SDRAM ip核和外设SDRAM连接的就是Avalon管道接口;

  • Avalon Tri-State Conduit Interface ( Avalon -TC三态管道接口)一支持与片外(off-chip)连接的接口。多个外设可以通过信号多路复用(signal multiplexing)来共享管脚,从而减少FPGA的管脚数和PCB上的走线数量。

  • Avalon Interrupt Interface一允许组件向其他组件发送事件信号的接口。(终断接口一般在SoPC或者SoC中去使用)

  • Avalon Clock Interface一驱动或接收时钟的接口。

  • Avalon Reset Interface一提供复位连接的接口。

2.2 Avalon_MM接口简介

Avalon_MM接口包括可选的beginbursttransfer和burstcount信号角色,用于那些支持突发(bursting)的组件。

Avalon_MM接口实现主从组件的读写接口;通常包含存储器映射接口的组件示例:

微处理器(master接口):NIOS II ; SoC的HPS;

储存器 、UART、 DWA 、 计时器一般是slave接口;

Avalon_MM接口有固定周期的读写传输,是简单的Avalon_MM接口,比如 SDRAM的ip核就是典型的读传输和写传输;

能够进行突发传输的流水线接口属于复杂的Avalon_MM接口,比如DDR3 ip核就是突发传输的流水线接口。

2.3 Avalon_MM信号角色

某些Avalon_MM信号可以是高电平或低电平,如果设置低电平有效时,信号名称以"_n"结尾。

信号角色

宽度

方向

描述

address

1-64

master - slave

address信号代表一个字节地址

byteenable

byteenable_n

2,4,8,16,32,64,128

master-slave

字节使能

byteenable 中的每个比特对应于writedata和readdata中一个字节。

写操作期间,byteenables指定写入哪些字节。其他字节应该被slave忽略。读操作期间,byteenables表明master读取哪些字节。

read

read_n

1

master-slave

置位表示一个read传输,则需要readdata

readdata

8,16,32,64,128,256,512,1024

slave-master

readdata从slave驱动到master,以响应read传输。

response[1:0]

2

slave-master

响应(用的少)

write

write_n

1

master-slave

置位表示一个write传输,如果存在,则需要writedata

writedata

8,16,32,64,128,256,512,1024

master-slave

写传输的数据,宽度必须和readdata相同

lock

1

master-slave

锁定 一主一从不需要用到lock

多主多从时 当master-slave完成一次传输

其他master才能对外设进行操作

waitrequest

waitrequest_n

1

slave-master

当 slave无法响应读写请求时,置位waitrequest,强制master等待;

当slave可以响应读写请求时,把waitrequest拉低,master就可以发送请求给slave

burstcount

1-11

master-slave

突发的传输数量,通常2的幂

beginburstcount

1

interconnect-slave

开始突发传输

2.4传输简介

传输数一个字或者一个或多个符号的数据的读写操作。传输发生在Avalon_MM接口和外设之间。

Avalon_MM-master启动传输,slave做出响应:写数据时slave将数据写入外设芯片,读数据slave从外设芯片中将数据读出。

2.4.1典型的读写传输

典型的Avalon_MM接口,通过slave控制的waitrequest来支持读写传输。

waitrequest相当于握手信号,不可以传输时拉高,可以传输时拉低。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

时序图中数字标记以下转换:

  1. address、byteenable、read在clk的上升沿之后有效。Slave置位waitrequest,暂停传输;

  1. waitrequest被采样,因为waitrequest信号拉高,该周期仍是等待状态,address,read,write和byteenable保持不变;

  1. 在该时钟上升沿waitrequest信号无效,Slave置位readdata和response(response和readdata有效);

  1. Master对readdata,response,和置位无效的waitrequest采样以完成传输;

  1. 该时钟上升沿后address,writedata,byteenable以及write信号被置为有效,从设备slave置位waitrequest信号以停止传输;

  1. 从设备slave在clk的上升沿置低waitrequest信号;在置低后的下一个时钟上升沿,写请求拉低,数据改变。

  1. 从设备slave采集写数据以完成传输。

2.4.2 使用 waitrequestAllowance 属性进行传输

  • waitrequestAllowance 属性指定 waitrequest 信号置位后一个 Avalon -MM master 能

够发出的或者一个 Avalon -MM slave 必须接受的传输数量。

  • waitrequestAllowance 的默认值为 0,对应于上图典型的读写传输中描述的行为,其中 waitrequest 置位停止发出或接受当前传输。也就是说当waitrequestAllowance为0时,一旦waitrequest拉高,就不能再继续传输数据了。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

当waitrequestAllowance等于2时,当waitrequest拉高后,主机还可以发送两个请求,从机必须执行,在传输两个数据。

2.4.3 固定等待状态的读写传输

  • slave可以使用readWaitTime和writeWaitTime属性指定固定的等待状态。

  • 使用固定等待状态可以代替waitrequest来停止传输。

  • readWaitTime或writeWaitTime设置为‘n'相当于将每次传输waitrequest置位‘n'个时钟周期。

在下图中,slave 有 writeWaitTime = 2 和 readWaitTime = 1。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

1. master 在 clk 的上升沿置位 address 和 read。

2. clk 的下一个上升沿标记第一个也是唯一一个等待状态(wait-state)周期的结束。因为readWaitTime 为 1。在这个clk的上升沿开始传输读的数据。

3. slave 在 clk 的上升沿置位 readdata 和 response。读传输结束。

4. writedata,address,byteenable 和 write 信号可用于 slave。

5. 写传输在 2 个等待状态(wait-state)周期后结束。

2.4.4 突发传输

  • 突发将多个传输数据作为一个单元进行执行,而不是独立处理每个数据。

  • 突发可以增加slave端口的吞吐量,从而在一次处理多个数据实现更高的效率。

突发Avalon_MM接口包含一个burstcount输出信号。burstcount表示突发中有序传输的个数。一般2的整数次幂。

在突发开始,slave逻辑必须对突发中的所有传输(但不包括第一个传输)计算地址。

slave可以使用输入信号beginbursttransfer开始突发。

下图显示了一个长度为 4 的 slave 写突发。在此实例中,slave 置位 waitrequest 两次来延迟突发。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档
  • slave 必须在 write 置位时才能采集 writedata。在突发期间,master 通过置低 write来表明 writedata 是无效的。置低 write 不会终止突发。write 的置低会延迟突发,并且没有其他 master 可以访问 slave,从而降低了传输效率。

  • slave 通过置位 waitrequest,强制 writedata,write,burstcount 和byteenable 保持不变来延迟一个传输。

下图显示了一个系统,其中两个读突发 master 访问一个 slave。注意:在数据返回给 Master A 之前,Master B 能够驱动一个读请求。

avalon sdram,verilog,fpga,fpga开发,Powered by 金山文档

读突发和写突发的区别:

  • 读突发在读请求信号read一个周期有效后便可拉低。

  • 写突发的写请求在写数据期间一直拉高。文章来源地址https://www.toymoban.com/news/detail-598426.html

到了这里,关于【FPGA】基于Avalon_MM接口的SDRAM读写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA开发】SDRAM的读写VGA显示

            实验的目的旨在使用sdram作为中间媒介,在sdram上读写以在显示器上显示图像的目的。 1.2.1 SDRAM型号介绍 这里我们使用的 sdram为 Hynix 公司生产的型号为 HY57V281620F 的 芯片,其存储空间可以分为4Bank x 2M x16Bit ,其中 4Bank 指的是该芯片有 4 个bank区间, 2M 指的是每个 ba

    2024年01月17日
    浏览(34)
  • FPGA以太网入门(一)——MDIO接口读写测试实验(基于紫光同创)

    此篇为专栏《紫光同创FPGA开发笔记》的第五篇,记录我的学习 FPGA 的一些开发过程和心得感悟,刚接触 FPGA 的朋友们可以先去此博客 《FPGA零基础入门学习路线》来做最基础的扫盲。 本篇内容基于笔者实际开发过程和正点原子资料撰写,将会详细讲解此 FPGA 实验的全流程,

    2024年04月15日
    浏览(54)
  • FPGA-基于AXI4接口的DDR3读写顶层模块

    AXI4(Advancede Xtensible Interface 4)是一种高性能、高带宽的总线接口协议,用于在系统级芯片设计中连接不同的IP核(Intellectual Property)或模块。它是由ARM公司开发的,被广泛应用于各种SoC(System-on-Chip)设计中。 AXI4接口协议定义了一组规范,用于描述数据传输、地址传输、控

    2024年04月15日
    浏览(42)
  • 基于FPGA 的SDRAM控制器

    4X16X4=256(Mbit),注意不是MByte sdram包含两个部分:sdram_ctrl、fifo_ctrl。 sdram_ctrl:其顶层为SDRAM的控制模块内部实例化了5个模块,有初始化、自刷新、写和读模块,还有一个仲裁模块对这四个不同操作进行分配; fifo_ctrl:其顶层为SDRAM的数据输入输出,内部实例化了两个用于连

    2024年02月08日
    浏览(49)
  • 基于FPGA的I2C接口控制器(包含单字节和多字节读写)

      前文对IIC的时序做了详细的讲解,还有不懂的可以获取TI的IIC数据手册查看原理。通过手册需要知道的是IIC读、写数据都是以字节为单位,每次操作后接收方都需要进行应答。主机向从机写入数据后,从机接收数据,需要把总线拉低来告知主机,前面发送的数据已经被接

    2024年02月19日
    浏览(38)
  • FPGA 20个例程篇:12.千兆网口实现MDIO接口读写

           千兆网口是我们日常生活中经常见到的外设接口,在后面三个例程中,我们将会一起去动手实现千兆网口实现MDIO接口读写、ARP通信协议、ICMP和UDP通信协议等,这三个例程有一定的难度,通过实际分析、动手编码、模块划分、上板调试大家可以学到很多内容,涵盖了

    2024年02月01日
    浏览(79)
  • 通过eeprom验证FPGA实现的单字节/页读写IIC接口时序

      前文设计基于FPGA的IIC接口模块,本文将使用eeprom来验证该模块的设计。为了便于查看读写波形,采用两个按键来控制对eeprom数据的读写,当按键0按下后,FPGA向eeprom的前64个存储地址写入地址对应的数据,当按键1按下后,FPGA从eeprom的前64个存储地址读取数据。   该ee

    2024年02月21日
    浏览(36)
  • FPGA驱动SDRAM

    实现PC向FPGA发送数据保存进SDRAM,再通过按键控制读出SDRAM中的数据发送给PC端,实现数据回环。 同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)是有一个同步接口的动态随机存取内存(DRAM)。 本次实验使用的SDRAM芯片(HY57V561620FTP)内部被分成了4个bank,

    2024年02月07日
    浏览(25)
  • FPGA project : sdram

    设计并实现一个 SDRAM 数据读写控制器,使用 PC 机通过串口向 SDRAM 写入 10 字 节数据,并将写入的 10 字节数据读出,通过串口回传至 PC 机,在串口助手上位机上打印 显示回传数据。 sdram基本操作实的实现sdram_ctrl 要实现数据的读写,还要有初始化和刷新操作。所以该模块要有

    2024年01月16日
    浏览(29)
  • 基于FPGA 外置qspi Flash的读写

    1.写在前面 FPGA内部不具有掉电存储程序的功能,所以都需要外置的flash存储器来存储程序,上电后从flash加载程序到FPGA中运行。外置的flash可以存储程序,也可以存储任何用户数据,可以更有效的利用flash的存储空间。 值得注意的是,用于存储程序的flash和fpga连接用的是fpga的

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包