用于测试SDRAM控制器的PDMA
扫描二维码
随时随地手机看文章
1引言
现代电子信息设备往往需要保存和处理大量的数字信息,一个高性能的memory控制器可以大大提高系统的性能。在进行sdram控制器的设计时,需要考虑很多因素,设计完成以后还要进行多项测试看是否完全满足所要求的各项性能,为此我们设计了一个pdma(programmable direct mem o ry access)用于测试sdram控制器的性能。在soc中,sdram控制器往往跟多个ip模块(图形处理单元,音频处理单元等)交换数据,采用多个pdma通道同时访问memory可以真实模拟sdram控制器在soc环境中被多个ip随机访问的情形。
2 pdma的结构及工作原理
pdma是可编程直接存储器存取的简称。图1 虚中框内是pdma的内部模块结构,它主要由寄存器组和控制器两大部分构成,寄存器组用于保存配置参数和pdma对sdrma控制器访问后的状态信息及接收、启动、停止等控制信息。图2是 pdma寄存器组的内部结构。
寄存器组模块里包含了一个同步模块、控制寄存器、状态寄存器和各通道的寄存器组。每一个子通道的寄存器组又包含访问基址寄存器、访问模式寄存器、周期计数器等三个寄存器。各寄存器的功能描述如表1所示。
pdma的控制器主要由:产生写数据的状态机、地址译码模块、fifo以及读数据校验模块四部分构成。各模块的功能由表2描述。
pdma控制器的结构如图3所示,其核心逻辑是一个状态机,我们采用一个两层嵌套的状态机来实现控制功能,如图4所示。
3 测试系统的结构和工作原理
在本设计中,pdma用于仿真多个ip核对sdram控制器进行读写访问以验证sdram控制器的设计是否高效合理,性能是否稳定等指标。
pdma整个测试系统由pci接口模块、pdma 以及sdram控制器三大部分构成(见图1)。pci接口模块与pdma之间以内部io总线相连接。 pdma与sdram控制器之间以内部memory总线连接。pci接口模块连接外部pci总线与内部的 pdma,转换由外部发起的pci io访问对pdma进行参数配置以及对命令、状态等寄存器进行读写。pdma在得到了配置参数及启动访问的命令信息后启动对sdram控制器的访问(写然后读),并把测试的结果反映到pdma的状态寄存里。
测试用pdma的具体工作过程如下:
(1)pci接口模块对pdma各通道进行参数配置(如访问长度、访问基址、访问方式等);
(2)pci接口模块写pdma的控制寄存器,启动对sdram的读写;
(3)pci接口模块读pdma的状态寄存器,探测访问是否完成,如完成,则读取完成后的状态信息(如错误位,发生错误的地址)。
4 rtl仿真
完成rtl级的设计后,我们利用cadence公司的仿真工具verilogxl对设计进行了功能仿真。仿真的环境是基于pci的,所以其仿真顺序如下:
(1)配置pci配置空间的io base 及 mem o ry base寄存器;
(2)写pci配置空间54h,58h等寄存器,配置sdram 控制器及sdram芯片的参数;
(3)写pci配置空间的命令寄存器(offset==04h),使能该设备;
(4)访问pci io空间中的pdma配置寄存器,设定各个pdma通道的配置参数;
(5)写入相应的命令,启动pdma访问内新路子sdram控制器;
(6)检测pdma的状态寄存器,根据设定的条件(正常结束或者发生错误)退出仿真程序;
(7)打开波形文件,检查是否有错误发生。
图5是由pci发起的一次写io寄存器访问的仿真波形,pdma的配置数据就是通过若干这样的操作完成的。
相对而言,我们更关注pdma是如何访问memory的。图6是由一个pdma发起的写读模式下的访问时序。group1