基于FPGA 的DDR SDRAM控制器在高速数据采集系统中应用
时间:07-29
来源:互联网
点击:
3 DDR SDRAM 控制器的FPGA实现
3.1 控制电路主状态机设计
主状态机用于控制整个数据采集系统的工作流程。各功能模块的配合,命令的发送,数据的采集、存储和传输都需要状态机来协调并严格控制时序关系。其状态转换图如图4 所示。控制器上电或复位时进入IDLE 状态,其中LA 和LD 分别为PCI 局部总线的地址线和数据线,上位机的发送的命令通过PCI 总线及接口芯片传送到PCI 局部总线,其中地址线的变化将引起状态机内部的状态转换,状态转换的同时,相应的配置字将出现在数据线上。配置完参数之后,转态机进入等待数据状态(WAIT_DATA),当触发信号满足要求之后(TRG=‘1’),自动进入到保存数据状态(SAVE_DATA),在此状态下,控制程序开始进行数据采集。指定存储深度的数据采集完成后,主状态机自动进入等待读数据状态,在接受到地址线上的状态转换命令后,分别进入读取A 通道和B 通道数据的状态。数据读完之后,上位机发送命令使状态返回到IDLE 状态。
3.2 DDR SDRAM 控制器各模块结构图
系统的顶层文件DATA_SAMPLE 的结构如图5 所示,FPGA 内置的主要有前端缓存模块DATATO_RAM、后端缓存模块TO_LD 和DDR SDRAM 的控制模块SDRAM。从数据流程上看,前端缓存将双路AD 采集到的数据合并成64 位,当缓存中的数据达到设定的存储深度时,控制模块在100MHz 的时钟下将数据读出,并将64 位数据拆分成32 位分别存储到两片DDR SDRAM 中。进入到读状态时,控制模块同时从两片DDR SDRAM 中读出32位的数据,根据用户所选择的数据通道,控制逻辑将相应的数据送入后端缓存中,后端缓存再将数据拆分成16 位,通过PCI 局部总线传送到上位机中。从控制流程上看,DATATO_RAM和TO_LD 中都设置了数据计数器,当DATATO_RAM 中存储的数据量超过设定值时,读使能RDEN 有效,控制模块从缓存中一次读走4 个数据。后端缓存的控制方式与此类似。
控制模块SDRAM 由两部分组成,其结构如图6 所示。其中ADDR 为地址产生模块,给控制核ddr_sdram 提供数据操作的行地址和列地址。控制核ddr_sdram 完成的功能包括将内部状态转换产生的CMD 控制命令译码成DDR SDRAM 所能实现的各种操作并实现以双倍的速率与DDR SDRAM 进行数据交换的接口。ddr_sdram 的结构框图如图7 所示。
控制核ddr_sdram 采用自顶而下模块化的设计方法,由4 个模块构成:ddr_sdram 顶层模块、控制接口模块、命令模块和数据路径模块。ddr_sdram 顶层模块初始化并把其余三个模块有机地结合起来;控制接口模块接收CMD 命令和相关存储器地址,对命令进行译码并将请求发送给命令模块;命令模块接收从控制接口模块译码后的命令和地址,产生相应的命令给DDR SDRAM;数据路径模块在读命令READA 和写命令WRITEA 期间处理数据交换。控制接口模块包含1 个命令译码器和1 个16 位的刷新减计数器及相应的控制电路。 命令译码器译码并将译码后的命令及相应的地址转送给命令模块。减计数器和相应的控制电路用来产生刷新命令给命令模块。其值就是由LOAD_REG2 命令写入到REG2 中的值。当计数器减到0 时,控制接口模块就向命令模块发Request 并一直保持到命令模块发Ack 来响应该请求。一旦控制接口模块接收到Ack,减计数器就会重新写入REG2 中的值。命令模块由1 个简单的仲裁器、命令发生器及命令时序器组成。它接收从控制接口模块来的译码后的命令,同时接收刷新控制逻辑发来的刷新请求命令并产生正确的命令给DDR SDRAM。仲裁器在控制接口发来的命令和刷新控制逻辑发来的刷新请求命令之间进行仲裁。刷新请求命令的优先级高于控制接口来的命令。
在仲裁器收到命令译码器发来的命令后,该命令就传送到命令发生器,命令时序器即用3 个移位寄存器产生正确的命令时序后发给DDR SDRAM。1 个移位寄存器用来控制激活命令时序,1 个用来控制READA 和WRITEA命令,1 个用来计时操作命令的持续时间,为仲裁器确定最后的请求操作是否完成。数据路径模块提供了DDR SDRAM 到FPGA 的数据通道。在和DDR SDRAM 接口的一方,数据路径模块将从DDR SDRAM 过来的数据总线宽度翻倍,并在200MHz 的时钟频率接收DDR SDRAM 在100MHz 时钟的上下沿送出的数据。在和FPGA 接口的一方,数据路径模块将从FPGA 送来的数据宽度减半并以2 倍的速率送给DDR SDRAM。4 系统实现的功能及结果分析逻辑分析仪SignalTap II 是Quartus II 软件中集成的一个内部逻辑分析软件,使用它可以观察本设计的内部信号波形。在系统的软件设计和仿真完成之后,将编译后的文件下载到系统的硬件中,对DDR SDRAM 控制器的状态转移和读写流程中各个信号进行了实时的采集与显示。
如图8 所示,是控制器读数据时嵌入式逻辑分析仪采集到的波形图。第9 行到第15行的信号显示的是读流程中各状态之间的切换过程。读命令发出之后,经过CAS 潜伏期,DDR SDRAM 突发传输8 个数据,并产生选通信号DQS。控制器在读到数据线DQ 上的数据后,将数据宽度加倍,传送到后端缓存中。
写数据的波形图如图9 所示,当主状态机在SAVE_DATA 状态时,DDR SDRAM 从控制器的数据总线上一次存储8 个数据。图中的选通信号HI_LO 是由控制器产生的,在信号的上升沿和下降沿存储器存储数据总线上的数据,存满8 个完成一次写操作。直到前端缓存的读使能信号有效时,控制器从前端缓存读取数据,并发起下一次写操作。
将所设计的控制器用于最高采样速率为10MHz 的数据采集系统中,DDR SDRAM 工作的差分时钟为100MHz,容量为32MByte,系统运行性能良好,能够较好的完成DDR SDRAM与AD 转换模块,PCI 总线接口模块之间的数据交换。图10 为数据采集卡对10kHz 正弦信号采样的波形。
3.1 控制电路主状态机设计
主状态机用于控制整个数据采集系统的工作流程。各功能模块的配合,命令的发送,数据的采集、存储和传输都需要状态机来协调并严格控制时序关系。其状态转换图如图4 所示。控制器上电或复位时进入IDLE 状态,其中LA 和LD 分别为PCI 局部总线的地址线和数据线,上位机的发送的命令通过PCI 总线及接口芯片传送到PCI 局部总线,其中地址线的变化将引起状态机内部的状态转换,状态转换的同时,相应的配置字将出现在数据线上。配置完参数之后,转态机进入等待数据状态(WAIT_DATA),当触发信号满足要求之后(TRG=‘1’),自动进入到保存数据状态(SAVE_DATA),在此状态下,控制程序开始进行数据采集。指定存储深度的数据采集完成后,主状态机自动进入等待读数据状态,在接受到地址线上的状态转换命令后,分别进入读取A 通道和B 通道数据的状态。数据读完之后,上位机发送命令使状态返回到IDLE 状态。
3.2 DDR SDRAM 控制器各模块结构图
系统的顶层文件DATA_SAMPLE 的结构如图5 所示,FPGA 内置的主要有前端缓存模块DATATO_RAM、后端缓存模块TO_LD 和DDR SDRAM 的控制模块SDRAM。从数据流程上看,前端缓存将双路AD 采集到的数据合并成64 位,当缓存中的数据达到设定的存储深度时,控制模块在100MHz 的时钟下将数据读出,并将64 位数据拆分成32 位分别存储到两片DDR SDRAM 中。进入到读状态时,控制模块同时从两片DDR SDRAM 中读出32位的数据,根据用户所选择的数据通道,控制逻辑将相应的数据送入后端缓存中,后端缓存再将数据拆分成16 位,通过PCI 局部总线传送到上位机中。从控制流程上看,DATATO_RAM和TO_LD 中都设置了数据计数器,当DATATO_RAM 中存储的数据量超过设定值时,读使能RDEN 有效,控制模块从缓存中一次读走4 个数据。后端缓存的控制方式与此类似。
控制模块SDRAM 由两部分组成,其结构如图6 所示。其中ADDR 为地址产生模块,给控制核ddr_sdram 提供数据操作的行地址和列地址。控制核ddr_sdram 完成的功能包括将内部状态转换产生的CMD 控制命令译码成DDR SDRAM 所能实现的各种操作并实现以双倍的速率与DDR SDRAM 进行数据交换的接口。ddr_sdram 的结构框图如图7 所示。
控制核ddr_sdram 采用自顶而下模块化的设计方法,由4 个模块构成:ddr_sdram 顶层模块、控制接口模块、命令模块和数据路径模块。ddr_sdram 顶层模块初始化并把其余三个模块有机地结合起来;控制接口模块接收CMD 命令和相关存储器地址,对命令进行译码并将请求发送给命令模块;命令模块接收从控制接口模块译码后的命令和地址,产生相应的命令给DDR SDRAM;数据路径模块在读命令READA 和写命令WRITEA 期间处理数据交换。控制接口模块包含1 个命令译码器和1 个16 位的刷新减计数器及相应的控制电路。 命令译码器译码并将译码后的命令及相应的地址转送给命令模块。减计数器和相应的控制电路用来产生刷新命令给命令模块。其值就是由LOAD_REG2 命令写入到REG2 中的值。当计数器减到0 时,控制接口模块就向命令模块发Request 并一直保持到命令模块发Ack 来响应该请求。一旦控制接口模块接收到Ack,减计数器就会重新写入REG2 中的值。命令模块由1 个简单的仲裁器、命令发生器及命令时序器组成。它接收从控制接口模块来的译码后的命令,同时接收刷新控制逻辑发来的刷新请求命令并产生正确的命令给DDR SDRAM。仲裁器在控制接口发来的命令和刷新控制逻辑发来的刷新请求命令之间进行仲裁。刷新请求命令的优先级高于控制接口来的命令。
在仲裁器收到命令译码器发来的命令后,该命令就传送到命令发生器,命令时序器即用3 个移位寄存器产生正确的命令时序后发给DDR SDRAM。1 个移位寄存器用来控制激活命令时序,1 个用来控制READA 和WRITEA命令,1 个用来计时操作命令的持续时间,为仲裁器确定最后的请求操作是否完成。数据路径模块提供了DDR SDRAM 到FPGA 的数据通道。在和DDR SDRAM 接口的一方,数据路径模块将从DDR SDRAM 过来的数据总线宽度翻倍,并在200MHz 的时钟频率接收DDR SDRAM 在100MHz 时钟的上下沿送出的数据。在和FPGA 接口的一方,数据路径模块将从FPGA 送来的数据宽度减半并以2 倍的速率送给DDR SDRAM。4 系统实现的功能及结果分析逻辑分析仪SignalTap II 是Quartus II 软件中集成的一个内部逻辑分析软件,使用它可以观察本设计的内部信号波形。在系统的软件设计和仿真完成之后,将编译后的文件下载到系统的硬件中,对DDR SDRAM 控制器的状态转移和读写流程中各个信号进行了实时的采集与显示。
如图8 所示,是控制器读数据时嵌入式逻辑分析仪采集到的波形图。第9 行到第15行的信号显示的是读流程中各状态之间的切换过程。读命令发出之后,经过CAS 潜伏期,DDR SDRAM 突发传输8 个数据,并产生选通信号DQS。控制器在读到数据线DQ 上的数据后,将数据宽度加倍,传送到后端缓存中。
写数据的波形图如图9 所示,当主状态机在SAVE_DATA 状态时,DDR SDRAM 从控制器的数据总线上一次存储8 个数据。图中的选通信号HI_LO 是由控制器产生的,在信号的上升沿和下降沿存储器存储数据总线上的数据,存满8 个完成一次写操作。直到前端缓存的读使能信号有效时,控制器从前端缓存读取数据,并发起下一次写操作。
将所设计的控制器用于最高采样速率为10MHz 的数据采集系统中,DDR SDRAM 工作的差分时钟为100MHz,容量为32MByte,系统运行性能良好,能够较好的完成DDR SDRAM与AD 转换模块,PCI 总线接口模块之间的数据交换。图10 为数据采集卡对10kHz 正弦信号采样的波形。
Altera FPGA Quartus 总线 DAC 电路 仿真 嵌入式 相关文章:
- 验证FPGA设计:模拟,仿真,还是碰运气?(08-04)
- 学习FPGA绝佳网站推荐!!!(05-23)
- 智能命令行设计及其在 SOPC 系统中的应用(08-14)
- 我的FPGA学习历程(05-23)
- 在FPGA中实现源同步LVDS接收正确字对齐(05-01)
- Altera FPGA下载配置(11-11)