一种基于FPGA的DDR处理电路及实现方法与流程

文档序号:11285731阅读:281来源:国知局
一种基于FPGA的DDR处理电路及实现方法与流程

本发明属于电路设计领域,具体涉及一种基于fpga的ddr处理电路及实现方法。



背景技术:

近年来随着数据传输速度的不断加快,传统的在时钟上升沿有效的数据传输方法,已不能满足某些高性能读写的需求。为了解决这一问题,人们提出了ddr接口,ddr接口即数据在时钟的上下沿均有效,从而传输速度是上升沿数据有效的两倍,而fpga作为现代电子领域中的重要电子器件,fpga的设计一般遵从上升沿同步的原则,并不能直接使用ddr传输方式。

此为现有技术的不足,因此,针对现有技术中的上述缺陷,提供一种基于fpga的ddr处理电路及实现方法,是非常有必要的。



技术实现要素:

本发明的目的在于,针对上述fpga不能直接使用ddr传输方式的缺陷,提供一种基于fpga的ddr处理电路及实现方法,以解决上述技术问题。

为实现上述目的,本发明给出以下技术方案:

一种基于fpga的ddr处理电路,包括ddr接口,与ddr接口连接的延迟模块,与ddr接口连接的ddr输入寄存器模块,与延迟模块连接的时钟切换模块,与ddr输入寄存器模块连接的第一fifo模块和第二fifo模块,与时钟切换模块连接的用户时钟模块,与第一fifo模块和第二fifo模块都连接的输出切换模块;

时钟切换模块还与第一fifo模块和第二fifo模块连接;

用户时钟模块还与输出切换模块,第一fifo模块和第二fifo模块连接;

延迟模块还与ddr输入寄存器模块连接;

延迟模块用于将dqs信号进行延时,使得延时后的dqs_delay处于dq信号的正中位置;

ddr输入寄存器模块用于将数据选取脉冲上下沿同时有效的数据dq转换成在上升沿有效的数据data_o和data_e,同时将data_o和data_e在时域同步;

第一fifo模块用于将数据data_o缓存;

第二fifo模块用于将数据data_e缓存;

输出切换模块用于将第一fifo模块的数据和第二fifo模块的数据按顺序输出;

时钟切换单元用于选择时钟,将选择的时钟提供给第一fifo模块和第二fifo模块的输入端;

用户时钟模块用于给第一fifo模块和第二fifo模块的输出提供时钟,还用于时钟切换单元的选择时钟之一。

进一步地,ddr接口与延迟模块的连接为dqs信号线;ddr接口与ddr输入寄存器模块的连接为8位dq数据线。

进一步地,ddr输入寄存器模块与第一fifo模块的连接为8位数据线;ddr输入寄存器模块与第二fifo模块的连接为8位数据线。

本发明还给出如下技术方案:

一种基于fpga的ddr处理电路实现方法,包括如下步骤:

步骤1.定义功能模块;

定义时钟切换模块,定义第一fifo模块,定义第二fifo模块,定义输出切换模块,定义用户时钟模块;

步骤2.例化自定义的功能模块实体,例化采用fpga原语的延迟模块和ddr输入寄存器模块实体,实现各实体功能模块的连接;

步骤3.对程序进行编译,编译完成后下载到fpga内部;fpga内部形成实体模块;

步骤4.将ddr接口与fpga连接;

步骤5.fpga启动工作;

步骤6.fpga各功能模块对ddr接口数据进行处理。

进一步地,步骤1定义功能模块的具体步骤如下:

定义时钟切换模块,时钟切换模块包括一输入端口dqs_delay3,一输入端口user_clk2,一输出端口clk_out1;

定义第一fifo模块,第一fifo模块包括一输入端口data_o2,一输入端口clk_out2,一输入端口user_clk4,一输出端口odata_out;

定义第二fifo模块,第二fifo模块包括一输入端口data_e2,一输入端口clk_out3,一输入端口user_clk5,一输出端口edata_out;

定义输出切换模块,输出切换模块包括一输入端口odata_in,一输入端口edata_in,一输入端口user_clk3,一输出端口data_out;

定义用户时钟模块,用户时钟模块包括一输出端口user_clk1。

进一步地,步骤2例化自定义的功能模块实体,例化采用fpga原语的延迟模块和ddr输入寄存器模块实体,实现各实体功能模块的连接;具体步骤如下:

例化采用fpga原语idelay的延迟模块实体,延迟模块包括一输入端口dqs,一输出端口dqs_delay1;

例化采用fpga原语iddr的ddr输入寄存器模块实体,ddr输入寄存器模块包括一输入端口dq,一输入端口dqs_delay2,一输出端口data_o1,一输出端口data_e1;

延迟模块的输出端口dqs_delay1与时钟切换模块输入端口dqs_delay3,与ddr输入寄存器模块输入端口dqs_delay2连接,实现延迟模块与时钟切换模块,与ddr输入寄存器模块的连接;

ddr输入寄存器模块的输出端口data_o1与第一fifo模块的输入端口data_o2连接,ddr输入寄存器模块的输出端口data_e1与第二fifo模块的输入端口data_e2连接,实现ddr输入寄存器模块与第一fifo模块和第二fifo模块的连接;

时钟切换模块的输出端口clk_out1与第一fifo模块的输入端口clk_out2,与第二fifo模块的输入端口clk_out3连接,实现时钟切换模块与第一fifo模块,与第二fifo模块的连接;

输出切换模块的输入端口odata_in与第一fifo模块的输出端口odata_out连接,输出切换模块的输入端口edata_in与第二fifo模块的输出端口edata_out连接,实现输出切换模块与第一fifo模块,与第二fifo模块的连接;

用户时钟模块的输出端口user_clk1与时钟切换模块的输入端user_clk2,与输出切换模块的输入端口user_clk3,与第一fifo模块的输入端user_clk4,与第二fifo模块的输入端user_clk5连接,实现用户时钟模块与时钟切换单元,与输出切换单元,与第一fifo模块,与第二fifo模块的连接;

步骤4中将ddr接口与fpga连接具体步骤如下:

ddr接口的dqs信号与延迟模块的输入端口dqs连接,ddr接口的dq信号与ddr输入寄存器模块的输入端口dq连接,实现ddr接口与fpga的连接。

进一步地,ddr输入寄存器模块还包括数据同步单元,数据同步单元用于实现两路数据在时域的同步。

进一步地,步骤6fpga各功能模块对ddr接口数据进行处理,具体步骤如下:

步骤61.ddr接口信号数据选取脉冲dqs到达延迟模块,延迟模块对数据选取脉冲dqs进行延迟,生成dqs_delay给输入寄存器模块和时钟切换模块;

步骤62.ddr输入寄存器模块在dqs_delay上升沿后的中部位置接收第一个dq数据,ddr输入寄存模块在差分dqs_delay上升沿后的中部位置接收第二个dq数据,第一个dq数据从ddr输入寄存器模块的输出端口data_o1输出,第二个dq数据从ddr输入寄存器模块的输出端口data_e1输出;

步骤63.依次类推;第奇数个dq数据重复第一个dq数据接收的过程,第偶数个dq数据重复第二个dq数据接收的过程;第奇数个dq数据从ddr输入寄存器模块的输出端口data_o1输出,第偶数个dq数据从ddr输入寄存器模块的输出端口data_e1输出;

步骤64.在时钟切换模块提供的时钟下,第一fifo模块对ddr输入寄存器模块的输出端口data_o1输出的数据进行缓存;第二fifo模块对ddr输入寄存器模块的输出端口data_e1输出的数据进行缓存;

步骤65.在用户时钟模块提供的时钟下,输出切换模块将第一fifo模块的输出端口odata_out输出的数据和第二fifo模块的输出端口edata_out输出的数据按顺序输出,保证数据顺序无误。

进一步地,步骤62和步骤63中,ddr输入寄存器模块的输出端口data_o1和输出端口data_e1数据输出前还经过数据同步单元同步,实现data_o1和data_e1的同时输出。

进一步地,步骤64中时钟切换单元提供时钟的选择如下:若存在数据选取脉冲dqs,则时钟切换模块选择数据选取脉冲dqs_delay作为第一fifo模块和第二fifo模块的工作时钟;若不存在数据选取脉冲dqs,则时钟切换模块选择用户时钟模块提供的用户时钟作为第一fifo模块和第二fifo模块的工作时钟,保证第一fifo模块和第二fifo模块的时钟不会中断,避免数据丢失。

本发明的有益效果在于:本发明设计了实现了一种基于fpga的ddr处理电路,将ddr接口转换成通用的fifo接口,满足fpga的设计需求,经过本电路的转换,用户直接采用用户时钟操作输出的8位宽数据即可,十分方便易用。

此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。

由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。

附图说明

图1为本发明电路各模块连接示意图;

图2为本发明的方法流程图;

图3为实施例2的ddr输入寄存器模块工作时序图;

图4为实施例3的包括数据同步单元的ddr输入寄存器模块工作时序图;

其中,1.ddr接口;2.ddr输入寄存器模块;3.延迟模块;4.时钟切换模块;5.第一fifo模块;6.第二fifo模块;7.用户时钟模块;8.输出切换模块。

具体实施方式:

为使得本发明的目的、特征、优点能够更加的明显和易懂,下面将结合本发明具体实施例中的附图,对本发明中的技术方案进行清楚、完整地描述。

如图1所示,本发明实施例1提供一种基于fpga的ddr处理电路,包括ddr接口1,与ddr接口1连接的延迟模块3,与ddr接口1连接的ddr输入寄存器模块2,与延迟模块3连接的时钟切换模块4,与ddr输入寄存器2模块连接的第一fifo模块5和第二fifo模块6,与时钟切换模块4连接的用户时钟模块7,与第一fifo模块5和第二fifo模块6都连接的输出切换模块8;

时钟切换模块4还与第一fifo模块5和第二fifo模块6连接;

用户时钟模块7还与输出切换模块8,第一fifo模块5和第二fifo模块6连接;

延迟模块3还与ddr输入寄存器模块2连接;

ddr接口1与延迟模块3的连接为dqs信号线;ddr接口1与ddr输入寄存器模块2的连接为8位dq数据线;

ddr输入寄存器模块2与第一fifo模块5的连接为8位数据线;ddr输入寄存器模块2与第二fifo模块6的连接为8位数据线。

如图2和图3所示,本发明实施例2提供一种基于fpga的ddr处理电路实现方法,包括如下步骤:步骤1.定义功能模块;定义时钟切换模块,定义第一fifo模块,定义第二fifo模块,定义输出切换模块,定义用户时钟模块;

定义时钟切换模块,时钟切换模块包括一输入端口dqs_delay3,一输入端口user_clk2,一输出端口clk_out1;

定义第一fifo模块,第一fifo模块包括一输入端口data_o2,一输入端口clk_out2,一输入端口user_clk4,一输出端口odata_out;

定义第二fifo模块,第二fifo模块包括一输入端口data_e2,一输入端口clk_out3,一输入端口user_clk5,一输出端口edata_out;

定义输出切换模块,输出切换模块包括一输入端口odata_in,一输入端口edata_in,一输入端口user_clk3,一输出端口data_out;

定义用户时钟模块,用户时钟模块包括一输出端口user_clk1;

步骤2.例化自定义的功能模块实体,例化采用fpga原语的延迟模块和ddr输入寄存器模块实体,实现各实体功能模块的连接;

例化采用fpga原语idelay的延迟模块实体,延迟模块包括一输入端口dqs,一输出端口dqs_delay1;

例化采用fpga原语iddr的ddr输入寄存器模块实体,ddr输入寄存器模块包括一输入端口dq,一输入端口dqs_delay2,一输出端口data_o1,一输出端口data_e1;

延迟模块的输出端口dqs_delay1与时钟切换模块输入端口dqs_delay3,与ddr输入寄存器模块输入端口dqs_delay2连接,实现延迟模块与时钟切换模块,与ddr输入寄存器模块的连接;

ddr输入寄存器模块的输出端口data_o1与第一fifo模块的输入端口data_o2连接,ddr输入寄存器模块的输出端口data_e1与第二fifo模块的输入端口data_e2连接,实现ddr输入寄存器模块与第一fifo模块和第二fifo模块的连接;

时钟切换模块的输出端口clk_out1与第一fifo模块的输入端口clk_out2,与第二fifo模块的输入端口clk_out3连接,实现时钟切换模块与第一fifo模块,与第二fifo模块的连接;

输出切换模块的输入端口odata_in与第一fifo模块的输出端口odata_out连接,输出切换模块的输入端口edata_in与第二fifo模块的输出端口edata_out连接,实现输出切换模块与第一fifo模块,与第二fifo模块的连接;

用户时钟模块的输出端口user_clk1与时钟切换模块的输入端user_clk2,与输出切换模块的输入端口user_clk3,与第一fifo模块的输入端user_clk4,与第二fifo模块的输入端user_clk5连接,实现用户时钟模块与时钟切换单元,与输出切换单元,与第一fifo模块,与第二fifo模块的连接;

步骤3.对程序进行编译,编译完成后下载到fpga内部;fpga内部形成实体模块;

步骤4.将ddr接口与fpga连接;

ddr接口的dqs信号与延迟模块的输入端口dqs连接,ddr接口的dq信号与ddr输入寄存器模块的输入端口dq连接,实现ddr接口与fpga的连接;

步骤5.fpga启动工作;

步骤6.fpga各功能模块对ddr接口数据进行处理。

步骤61.ddr接口信号数据选取脉冲dqs到达延迟模块,延迟模块对数据选取脉冲dqs进行延迟,生成dqs_delay给输入寄存器模块和时钟切换模块;

如图3所示,步骤62.ddr输入寄存器模块在dqs_delay上升沿后的中部位置接收第一个dq数据,ddr输入寄存模块在差分dqs_delay上升沿后的中部位置接收第二个dq数据,第一个dq数据从ddr输入寄存器模块的输出端口data_o1输出,第二个dq数据从ddr输入寄存器模块的输出端口data_e1输出;

步骤63.依次类推;第奇数个dq数据重复第一个dq数据接收的过程,第偶数个dq数据重复第二个dq数据接收的过程;第奇数个dq数据从ddr输入寄存器模块的输出端口data_o1输出,第偶数个dq数据从ddr输入寄存器模块的输出端口data_e1输出;

步骤64.时钟切换单元提供时钟的选择如下:若存在数据选取脉冲dqs,则时钟切换模块选择数据选取脉冲dqs_delay作为第一fifo模块和第二fifo模块的工作时钟;若不存在数据选取脉冲dqs,则时钟切换模块选择用户时钟模块提供的用户时钟作为第一fifo模块和第二fifo模块的工作时钟;

在时钟切换模块提供的时钟下,第一fifo模块对ddr输入寄存器模块的输出端口data_o1输出的数据进行缓存;第二fifo模块对ddr输入寄存器模块的输出端口data_e1输出的数据进行缓存;

步骤65.在用户时钟模块提供的时钟下,输出切换模块将第一fifo模块的输出端口odata_out输出的数据和第二fifo模块的输出端口edata_out输出的数据按顺序输出,保证数据顺序无误。

如图2和图4所示,本发明实施例3提供一种基于fpga的ddr处理电路实现方法,包括如下步骤:步骤1.定义功能模块;定义时钟切换模块,定义第一fifo模块,定义第二fifo模块,定义输出切换模块,定义用户时钟模块;

定义时钟切换模块,时钟切换模块包括一输入端口dqs_delay3,一输入端口user_clk2,一输出端口clk_out1;

定义第一fifo模块,第一fifo模块包括一输入端口data_o2,一输入端口clk_out2,一输入端口user_clk4,一输出端口odata_out;

定义第二fifo模块,第二fifo模块包括一输入端口data_e2,一输入端口clk_out3,一输入端口user_clk5,一输出端口edata_out;

定义输出切换模块,输出切换模块包括一输入端口odata_in,一输入端口edata_in,一输入端口user_clk3,一输出端口data_out;

定义用户时钟模块,用户时钟模块包括一输出端口user_clk1;

步骤2.例化自定义的功能模块实体,例化采用fpga原语的延迟模块和ddr输入寄存器模块实体,实现各实体功能模块的连接;

例化采用fpga原语idelay的延迟模块实体,延迟模块包括一输入端口dqs,一输出端口dqs_delay1;

例化采用fpga原语iddr的ddr输入寄存器模块实体,ddr输入寄存器模块包括一输入端口dq,一输入端口dqs_delay2,一输出端口data_o1,一输出端口data_e1;ddr输入寄存器模块还包括数据同步单元;

延迟模块的输出端口dqs_delay1与时钟切换模块输入端口dqs_delay3,与ddr输入寄存器模块输入端口dqs_delay2连接,实现延迟模块与时钟切换模块,与ddr输入寄存器模块的连接;

ddr输入寄存器模块的输出端口data_o1与第一fifo模块的输入端口data_o2连接,ddr输入寄存器模块的输出端口data_e1与第二fifo模块的输入端口data_e2连接,实现ddr输入寄存器模块与第一fifo模块和第二fifo模块的连接;

时钟切换模块的输出端口clk_out1与第一fifo模块的输入端口clk_out2,与第二fifo模块的输入端口clk_out3连接,实现时钟切换模块与第一fifo模块,与第二fifo模块的连接;

输出切换模块的输入端口odata_in与第一fifo模块的输出端口odata_out连接,输出切换模块的输入端口edata_in与第二fifo模块的输出端口edata_out连接,实现输出切换模块与第一fifo模块,与第二fifo模块的连接;

用户时钟模块的输出端口user_clk1与时钟切换模块的输入端user_clk2,与输出切换模块的输入端口user_clk3,与第一fifo模块的输入端user_clk4,与第二fifo模块的输入端user_clk5连接,实现用户时钟模块与时钟切换单元,与输出切换单元,与第一fifo模块,与第二fifo模块的连接;

步骤3.对程序进行编译,编译完成后下载到fpga内部;fpga内部形成实体模块;

步骤4.将ddr接口与fpga连接;

ddr接口的dqs信号与延迟模块的输入端口dqs连接,ddr接口的dq信号与ddr输入寄存器模块的输入端口dq连接,实现ddr接口与fpga的连接;

步骤5.fpga启动工作;

步骤6.fpga各功能模块对ddr接口数据进行处理。

步骤61.ddr接口信号数据选取脉冲dqs到达延迟模块,延迟模块对数据选取脉冲dqs进行延迟,生成dqs_delay给输入寄存器模块和时钟切换模块;

如图4所示,步骤62.ddr输入寄存器模块在dqs_delay上升沿后的中部位置接收第一个dq数据,ddr输入寄存模块在差分dqs_delay上升沿后的中部位置接收第二个dq数据,经ddr输入寄存器模块的数据同步单元同步,第一个dq数据从ddr输入寄存器模块的输出端口data_o1输出,第二个dq数据从ddr输入寄存器模块的输出端口data_e1输出;

步骤63.依次类推;第奇数个dq数据重复第一个dq数据接收的过程,第偶数个dq数据重复第二个dq数据接收的过程;第奇数个dq数据从ddr输入寄存器模块的输出端口data_o1输出,第偶数个dq数据从ddr输入寄存器模块的输出端口data_e1输出;经ddr输入寄存器模块的数据同步单元同步,相邻的第奇数个和第偶数个dq数据同时输出。

步骤64.在时钟切换模块提供的时钟下,第一fifo模块对ddr输入寄存器模块的输出端口data_o1输出的数据进行缓存;第二fifo模块对ddr输入寄存器模块的输出端口data_e1输出的数据进行缓存;

步骤65.在用户时钟模块提供的时钟下,输出切换模块将第一fifo模块的输出端口odata_out输出的数据和第二fifo模块的输出端口edata_out输出的数据按顺序输出,保证数据顺序无误。

ddr是doubledatarate双倍速率同步动态随机存储器的简称。

数据选取脉冲(dqs),dqs是ddrsdram中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据,每一颗芯片都有一个dqs信号线,它是双向的,在写入时它用来传送由外部发来的dqs信号,dqs与写入数据中心对齐,读取时,则由ddr生成dqs向外部发送,dqs与数据边沿对齐,完全可以说,它就是数据的同步信号。

fifo(firstinputfirstoutput),即先进先出队列。fifo队列不对报文进行分类,当报文进入接口的速度大于接口能发送的速度时,fifo按报文到达接口的先后顺序让报文进入队列,同时,fifo在队列的出口让报文按进队的顺序出队,先进的报文将先出队,后进的报文将后出队。

本发明的实施例是说明性的,而非限定性的,上述实施例只是帮助理解本发明,因此本发明不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他的具体实施方式,同样属于本发明保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1