基于FPGA的三端口非透明型SDRAM控制器

时间:2010-02-23

  摘 要:本文采用Altera 公司的Stratix 系列FPGA 实现了一个三端口非透明型SDRAM 控 制器,该控制器面向用户具有多个端口,通过轮换优先级的设计保证了多个端口平均分配 SDRAM的带宽且不会降低传输速率。将访问SDRAM空间虚拟成一个简单的访问三口RAM 的操作,采用乒乓的DMA 传输机制大大提高了数据传输的带宽和效率。

  1 引言

  SDRAM 具有存储容量大、速度快、成本低的特点,因此广泛应用于雷达信号处理等需 要海量高速存储的场合,但是SDRAM 的操作相对复杂,需要有专门的控制器配合处理器 工作完成数据的存取操作。随着FPGA 技术的快速发展及其应用的普及,用FPGA 实现 SDRAM 控制器是目前的技术手段。虽然现在FPGA 的生产商提供了一些通用的 SDRAM 控制器,但是在雷达信号处理等一些专用领域内这些通用的SDRAM 控制器难以满 足需要,需要开发适合的专用的SDRAM 控制器。

  本文以一个典型的雷达信号存储与预处理系统为应用背景,用 Altera 公司的Stratix 系 列FPGA 实现了一个三端口非透明型的SDRAM 控制器,该控制器内部具有灵活准确的优 先级仲裁功能,在保证多个端口平均分配SDRAM 带宽的同时不影响数据传输的带宽,采 用乒乓的DMA 传输机制大大提高了数据传输的带宽和效率。

  2 SDRAM 的特点及其基本操作

  SDRAM 是在现有的标准动态存储器中加入同步控制逻辑(一个状态机),利用一个单一的系统时钟同步所有的地址数据和控制信号,它具有如下一些特点:

  结构特点:存储容量大,受输出管脚数量限制,其存储单元设计成矩阵形存储结构,因此地址分为行地址和列地址,首先给出行地址选通一行(或一页),然后给出列地址选中要访问的地址单元;

  采用电容存储信息,因此需要定时充电(刷新);

  同步访问:所有信号都在时钟上升沿采样有效才认为有效;

  基于猝发(Burst)方式访问:在发出读写命令之后,SDRAM 自动访问长度为猝发 长度的地址空间,非Burst 访问的效率很低;

  速度快:只要 SDRAM 控制器合理设计时序,可以实现单周期访问一个地址单元。 SDRAM 的基本操作包括:初始化、激活、预充电、刷新等等。

  初始化:SDRAM 上电之后必须按照确定的程式进行初始化之后才能正常工作,主要 的操作是模式寄存器的设置;

  激活:选中所要访问的行列地址单元;

  刷新:SDRAM 存储单元载体为容量很小的电容并存在漏电流。需要定时读取回填各 个单元才能保证数据不丢。在片内有自动刷新控制器,记录了刷新行地址,每执行自 动刷新命令,刷新一行;

  预充电:每次读写操作是通过传感放大器对存储单元电容的充放电过程,在读操作时对 选中整行单元的原始数据可能产生破坏。这就需要在每次读取操作后立即对该行原内容 与阈值比较再回写,并且对传感放大器参考阈值电压复位准备下做读写操作。所以 总是在执行换行读写或刷新之前执行预充电操作。

  3 SDRAM 控制器的基本功能

  三端口非透明型 SDRAM 控制器是指控制器面向用户端有三个端口而不是通常情况下 的一个端口,三个端口的功能完全一致,依靠仲裁控制切换端口与SDRAM 之间交换数据, 数据交换采用DMA 的方式,流经SDRAM 的数据流如图1 所示。数据由C 端口输入,A 端 口输出,B 端口作为与DSP 的数传通道。

  图 1 三端口SDRAM 控制器的数据流向

  这里透明型是指外部设备访问 SDRAM 时,只需简单读写而不需要进行其它复杂的管 理操作,外部设备可以通过SDRAM 控制器将SDRAM 空间视为一个普通的同步三口RAM 操作。但是这种结构不能灵活的实现地址跳变的访问,随机访问的带宽很低,三个端口再次 平均分配SDRAM 的带宽会进一步降低吞吐性能。所以,系统设计中采用了非透明型的设 计,非透明的意思是指:外部设备为了访问SDRAM 的数据,不但要进行数据的读写操作,而且需要进行寄存器设置、控制信号调整等其它操作。非透明型设计的灵活性较差,但是可 以根据具体的使用环境对功能进行简化,并且将一部分控制操作转交给软件完成,所以实现 相对比较简单,而且更加稳定可靠。

  4 SDRAM 控制器的基本结构及工作原理

  三端口非透明型 SDRAM 控制器的结构框图如图2 所示。A、B、C 三个端口的内部结 构完全相同,都包含一个双口RAM(作为数据乒乓缓存),一个DMA 控制器。外部设备可以 通过端口读写DPRAM 中的数据,也可以写DMA 控制寄存器。DMA 控制器的功能是根据 DMA 控制寄存器内的设置在DPRAM 和SDRAM 之间交换数据,当DSP 或者其它外部设备 设置了寄存器后,DMA 控制器向仲裁和数据分配器发出访问SDRAM 的请求,然后开始一 次DMA 操作。仲裁和数据分配器的功能是决定当前哪一个端口具有访问SDRAM 的权利。 SDRAM 时序控制器则负责产生操作SDRAM 必须的命令码,并且传递数据。

  图 2 三端口非透明型SDRAM 控制器的结构

  外部设备与 SDRAM 之间通过一个双口RAM(DPRAM)进行隔离。外部设备可以直 接读写DPRAM 的右侧端口,也可以通过设置DMA 寄存器来启动DPRAM 左侧端口与 SDRAM 之间的DMA 操作。SDRAM 控制器的基本工作原理如下:

  (1)写操作:当外部设备需要向SDRAM 写数据时,首先将数据存入DPRAM,然后 启动一个从DPRAM 到SDRAM 的DMA。

  (2)读操作:当外部设备需要读SDRAM 时,首先启动一个从SDRAM 到DPRAM 的 DMA,等DMA 结束以后再从DPRAM 读取数据。

  (3)基于扇区的长度和地址控制:为了简化DMA 控制器以及其它的控制逻辑,DPRAM 和SDRAM 之间的DMA 传输不是任意长度任意地址的DMA 传输,而是以扇区为基本数传 单位。这里定义一个扇区的长度为SDRAM 中的一行(或者叫一个page)。每个DPRAM 则 顺序划分为2 个扇区。每次DMA 操作完成一个完整扇区数据的搬移。

  (4)仲裁控制:当两个或是三个DMA 控制器同时请求访问SDRAM 时,由仲裁控制 器根据优先级规则进行控制。设计中采用了轮换优先级的方式,即:刚刚完成了DMA 操作的端口具有比较低的优先级,当前具有优先级的端口有权占用SDRAM 直至本次 DMA 结束,这样,就可以三个端口分时占用DMA 通道,保证三个端口之间平均的分配 SDRAM 的带宽。

  5 仲裁器的设计

  仲裁及数据分配器的设计的问题是轮换优先级的设计。必须保证三个端口分时占用 DMA 通道,保证平均分配带宽。采用有限状态机作为仲裁器的控制逻辑,这样既可以保证 优先级设计的稳定性,又可以确保仲裁器判决的实时性,有限状态机的设计如图3 所示。

  图 3 仲裁器的有限状态机设计

  设计中复杂的情况是:一个通道访问SDRAM 的同时(如A 通道),另外两个通道同时 申请下访问SDRAM(如B、C 通道),这样就需要有一个标志位,用它来记录上访 问过SDRAM 的通道,在下仲裁时把它排除在外,直到再下仲裁时才予以考虑。

  每次DMA 结束后,都自动返回到IDLE 的状态,通过request 标志位,上次DMA 通道记录 位来判断此次访问SDRAM 的通道。具体设计如下:

  设初始状态下,默认A 端口具有优先级,然后A、B、C 三个端口具有轮换优先级;

  设置一个标志位 old_request,表示上响应的端口,“100”A 端口响应,“010”B 端 口响应,“001”C 端口响应;

  利用一个标志位 request[2:0]作为状态翻转的标志;

  利用标志位 two_request,three_request 作为进入两个或三个端口同时请求状态的标志, two_request = ABC + ABC + ABC,three_request = ABC。

  6 结论

  本文利用 FPGA 设计并实现了一个相对专用的三端口非透明型SDRAM 控制器。本文 作者创新点在于:通过设计一个带轮换优先级设置的多端口SDRAM 控制器,采用乒乓的 DMA 传输机制,将复杂的SDRAM 访问虚拟成一个简单的三口RAM 的访问,具有访问简 单、控制灵活、传输带宽大等特点。已在某雷达信号存储与预处理系统中成功应用。


  
上一篇:一种基于FPGA/MCU结构的线性调频高度表
下一篇:基于FPGA+PC104的数据处理系统设计与实现

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料