本發(fā)明屬于電路設(shè)計(jì)領(lǐng)域,具體涉及一種基于fpga的ddr處理電路及實(shí)現(xiàn)方法。
背景技術(shù):
近年來(lái)隨著數(shù)據(jù)傳輸速度的不斷加快,傳統(tǒng)的在時(shí)鐘上升沿有效的數(shù)據(jù)傳輸方法,已不能滿足某些高性能讀寫(xiě)的需求。為了解決這一問(wèn)題,人們提出了ddr接口,ddr接口即數(shù)據(jù)在時(shí)鐘的上下沿均有效,從而傳輸速度是上升沿?cái)?shù)據(jù)有效的兩倍,而fpga作為現(xiàn)代電子領(lǐng)域中的重要電子器件,fpga的設(shè)計(jì)一般遵從上升沿同步的原則,并不能直接使用ddr傳輸方式。
此為現(xiàn)有技術(shù)的不足,因此,針對(duì)現(xiàn)有技術(shù)中的上述缺陷,提供一種基于fpga的ddr處理電路及實(shí)現(xiàn)方法,是非常有必要的。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于,針對(duì)上述fpga不能直接使用ddr傳輸方式的缺陷,提供一種基于fpga的ddr處理電路及實(shí)現(xiàn)方法,以解決上述技術(shù)問(wèn)題。
為實(shí)現(xiàn)上述目的,本發(fā)明給出以下技術(shù)方案:
一種基于fpga的ddr處理電路,包括ddr接口,與ddr接口連接的延遲模塊,與ddr接口連接的ddr輸入寄存器模塊,與延遲模塊連接的時(shí)鐘切換模塊,與ddr輸入寄存器模塊連接的第一fifo模塊和第二fifo模塊,與時(shí)鐘切換模塊連接的用戶時(shí)鐘模塊,與第一fifo模塊和第二fifo模塊都連接的輸出切換模塊;
時(shí)鐘切換模塊還與第一fifo模塊和第二fifo模塊連接;
用戶時(shí)鐘模塊還與輸出切換模塊,第一fifo模塊和第二fifo模塊連接;
延遲模塊還與ddr輸入寄存器模塊連接;
延遲模塊用于將dqs信號(hào)進(jìn)行延時(shí),使得延時(shí)后的dqs_delay處于dq信號(hào)的正中位置;
ddr輸入寄存器模塊用于將數(shù)據(jù)選取脈沖上下沿同時(shí)有效的數(shù)據(jù)dq轉(zhuǎn)換成在上升沿有效的數(shù)據(jù)data_o和data_e,同時(shí)將data_o和data_e在時(shí)域同步;
第一fifo模塊用于將數(shù)據(jù)data_o緩存;
第二fifo模塊用于將數(shù)據(jù)data_e緩存;
輸出切換模塊用于將第一fifo模塊的數(shù)據(jù)和第二fifo模塊的數(shù)據(jù)按順序輸出;
時(shí)鐘切換單元用于選擇時(shí)鐘,將選擇的時(shí)鐘提供給第一fifo模塊和第二fifo模塊的輸入端;
用戶時(shí)鐘模塊用于給第一fifo模塊和第二fifo模塊的輸出提供時(shí)鐘,還用于時(shí)鐘切換單元的選擇時(shí)鐘之一。
進(jìn)一步地,ddr接口與延遲模塊的連接為dqs信號(hào)線;ddr接口與ddr輸入寄存器模塊的連接為8位dq數(shù)據(jù)線。
進(jìn)一步地,ddr輸入寄存器模塊與第一fifo模塊的連接為8位數(shù)據(jù)線;ddr輸入寄存器模塊與第二fifo模塊的連接為8位數(shù)據(jù)線。
本發(fā)明還給出如下技術(shù)方案:
一種基于fpga的ddr處理電路實(shí)現(xiàn)方法,包括如下步驟:
步驟1.定義功能模塊;
定義時(shí)鐘切換模塊,定義第一fifo模塊,定義第二fifo模塊,定義輸出切換模塊,定義用戶時(shí)鐘模塊;
步驟2.例化自定義的功能模塊實(shí)體,例化采用fpga原語(yǔ)的延遲模塊和ddr輸入寄存器模塊實(shí)體,實(shí)現(xiàn)各實(shí)體功能模塊的連接;
步驟3.對(duì)程序進(jìn)行編譯,編譯完成后下載到fpga內(nèi)部;fpga內(nèi)部形成實(shí)體模塊;
步驟4.將ddr接口與fpga連接;
步驟5.fpga啟動(dòng)工作;
步驟6.fpga各功能模塊對(duì)ddr接口數(shù)據(jù)進(jìn)行處理。
進(jìn)一步地,步驟1定義功能模塊的具體步驟如下:
定義時(shí)鐘切換模塊,時(shí)鐘切換模塊包括一輸入端口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;
定義用戶時(shí)鐘模塊,用戶時(shí)鐘模塊包括一輸出端口user_clk1。
進(jìn)一步地,步驟2例化自定義的功能模塊實(shí)體,例化采用fpga原語(yǔ)的延遲模塊和ddr輸入寄存器模塊實(shí)體,實(shí)現(xiàn)各實(shí)體功能模塊的連接;具體步驟如下:
例化采用fpga原語(yǔ)idelay的延遲模塊實(shí)體,延遲模塊包括一輸入端口dqs,一輸出端口dqs_delay1;
例化采用fpga原語(yǔ)iddr的ddr輸入寄存器模塊實(shí)體,ddr輸入寄存器模塊包括一輸入端口dq,一輸入端口dqs_delay2,一輸出端口data_o1,一輸出端口data_e1;
延遲模塊的輸出端口dqs_delay1與時(shí)鐘切換模塊輸入端口dqs_delay3,與ddr輸入寄存器模塊輸入端口dqs_delay2連接,實(shí)現(xiàn)延遲模塊與時(shí)鐘切換模塊,與ddr輸入寄存器模塊的連接;
ddr輸入寄存器模塊的輸出端口data_o1與第一fifo模塊的輸入端口data_o2連接,ddr輸入寄存器模塊的輸出端口data_e1與第二fifo模塊的輸入端口data_e2連接,實(shí)現(xiàn)ddr輸入寄存器模塊與第一fifo模塊和第二fifo模塊的連接;
時(shí)鐘切換模塊的輸出端口clk_out1與第一fifo模塊的輸入端口clk_out2,與第二fifo模塊的輸入端口clk_out3連接,實(shí)現(xiàn)時(shí)鐘切換模塊與第一fifo模塊,與第二fifo模塊的連接;
輸出切換模塊的輸入端口odata_in與第一fifo模塊的輸出端口odata_out連接,輸出切換模塊的輸入端口edata_in與第二fifo模塊的輸出端口edata_out連接,實(shí)現(xiàn)輸出切換模塊與第一fifo模塊,與第二fifo模塊的連接;
用戶時(shí)鐘模塊的輸出端口user_clk1與時(shí)鐘切換模塊的輸入端user_clk2,與輸出切換模塊的輸入端口user_clk3,與第一fifo模塊的輸入端user_clk4,與第二fifo模塊的輸入端user_clk5連接,實(shí)現(xiàn)用戶時(shí)鐘模塊與時(shí)鐘切換單元,與輸出切換單元,與第一fifo模塊,與第二fifo模塊的連接;
步驟4中將ddr接口與fpga連接具體步驟如下:
ddr接口的dqs信號(hào)與延遲模塊的輸入端口dqs連接,ddr接口的dq信號(hào)與ddr輸入寄存器模塊的輸入端口dq連接,實(shí)現(xiàn)ddr接口與fpga的連接。
進(jìn)一步地,ddr輸入寄存器模塊還包括數(shù)據(jù)同步單元,數(shù)據(jù)同步單元用于實(shí)現(xiàn)兩路數(shù)據(jù)在時(shí)域的同步。
進(jìn)一步地,步驟6fpga各功能模塊對(duì)ddr接口數(shù)據(jù)進(jìn)行處理,具體步驟如下:
步驟61.ddr接口信號(hào)數(shù)據(jù)選取脈沖dqs到達(dá)延遲模塊,延遲模塊對(duì)數(shù)據(jù)選取脈沖dqs進(jìn)行延遲,生成dqs_delay給輸入寄存器模塊和時(shí)鐘切換模塊;
步驟62.ddr輸入寄存器模塊在dqs_delay上升沿后的中部位置接收第一個(gè)dq數(shù)據(jù),ddr輸入寄存模塊在差分dqs_delay上升沿后的中部位置接收第二個(gè)dq數(shù)據(jù),第一個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_o1輸出,第二個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_e1輸出;
步驟63.依次類(lèi)推;第奇數(shù)個(gè)dq數(shù)據(jù)重復(fù)第一個(gè)dq數(shù)據(jù)接收的過(guò)程,第偶數(shù)個(gè)dq數(shù)據(jù)重復(fù)第二個(gè)dq數(shù)據(jù)接收的過(guò)程;第奇數(shù)個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_o1輸出,第偶數(shù)個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_e1輸出;
步驟64.在時(shí)鐘切換模塊提供的時(shí)鐘下,第一fifo模塊對(duì)ddr輸入寄存器模塊的輸出端口data_o1輸出的數(shù)據(jù)進(jìn)行緩存;第二fifo模塊對(duì)ddr輸入寄存器模塊的輸出端口data_e1輸出的數(shù)據(jù)進(jìn)行緩存;
步驟65.在用戶時(shí)鐘模塊提供的時(shí)鐘下,輸出切換模塊將第一fifo模塊的輸出端口odata_out輸出的數(shù)據(jù)和第二fifo模塊的輸出端口edata_out輸出的數(shù)據(jù)按順序輸出,保證數(shù)據(jù)順序無(wú)誤。
進(jìn)一步地,步驟62和步驟63中,ddr輸入寄存器模塊的輸出端口data_o1和輸出端口data_e1數(shù)據(jù)輸出前還經(jīng)過(guò)數(shù)據(jù)同步單元同步,實(shí)現(xiàn)data_o1和data_e1的同時(shí)輸出。
進(jìn)一步地,步驟64中時(shí)鐘切換單元提供時(shí)鐘的選擇如下:若存在數(shù)據(jù)選取脈沖dqs,則時(shí)鐘切換模塊選擇數(shù)據(jù)選取脈沖dqs_delay作為第一fifo模塊和第二fifo模塊的工作時(shí)鐘;若不存在數(shù)據(jù)選取脈沖dqs,則時(shí)鐘切換模塊選擇用戶時(shí)鐘模塊提供的用戶時(shí)鐘作為第一fifo模塊和第二fifo模塊的工作時(shí)鐘,保證第一fifo模塊和第二fifo模塊的時(shí)鐘不會(huì)中斷,避免數(shù)據(jù)丟失。
本發(fā)明的有益效果在于:本發(fā)明設(shè)計(jì)了實(shí)現(xiàn)了一種基于fpga的ddr處理電路,將ddr接口轉(zhuǎn)換成通用的fifo接口,滿足fpga的設(shè)計(jì)需求,經(jīng)過(guò)本電路的轉(zhuǎn)換,用戶直接采用用戶時(shí)鐘操作輸出的8位寬數(shù)據(jù)即可,十分方便易用。
此外,本發(fā)明設(shè)計(jì)原理可靠,結(jié)構(gòu)簡(jiǎn)單,具有非常廣泛的應(yīng)用前景。
由此可見(jiàn),本發(fā)明與現(xiàn)有技術(shù)相比,具有突出的實(shí)質(zhì)性特點(diǎn)和顯著的進(jìn)步,其實(shí)施的有益效果也是顯而易見(jiàn)的。
附圖說(shuō)明
圖1為本發(fā)明電路各模塊連接示意圖;
圖2為本發(fā)明的方法流程圖;
圖3為實(shí)施例2的ddr輸入寄存器模塊工作時(shí)序圖;
圖4為實(shí)施例3的包括數(shù)據(jù)同步單元的ddr輸入寄存器模塊工作時(shí)序圖;
其中,1.ddr接口;2.ddr輸入寄存器模塊;3.延遲模塊;4.時(shí)鐘切換模塊;5.第一fifo模塊;6.第二fifo模塊;7.用戶時(shí)鐘模塊;8.輸出切換模塊。
具體實(shí)施方式:
為使得本發(fā)明的目的、特征、優(yōu)點(diǎn)能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明具體實(shí)施例中的附圖,對(duì)本發(fā)明中的技術(shù)方案進(jìn)行清楚、完整地描述。
如圖1所示,本發(fā)明實(shí)施例1提供一種基于fpga的ddr處理電路,包括ddr接口1,與ddr接口1連接的延遲模塊3,與ddr接口1連接的ddr輸入寄存器模塊2,與延遲模塊3連接的時(shí)鐘切換模塊4,與ddr輸入寄存器2模塊連接的第一fifo模塊5和第二fifo模塊6,與時(shí)鐘切換模塊4連接的用戶時(shí)鐘模塊7,與第一fifo模塊5和第二fifo模塊6都連接的輸出切換模塊8;
時(shí)鐘切換模塊4還與第一fifo模塊5和第二fifo模塊6連接;
用戶時(shí)鐘模塊7還與輸出切換模塊8,第一fifo模塊5和第二fifo模塊6連接;
延遲模塊3還與ddr輸入寄存器模塊2連接;
ddr接口1與延遲模塊3的連接為dqs信號(hào)線;ddr接口1與ddr輸入寄存器模塊2的連接為8位dq數(shù)據(jù)線;
ddr輸入寄存器模塊2與第一fifo模塊5的連接為8位數(shù)據(jù)線;ddr輸入寄存器模塊2與第二fifo模塊6的連接為8位數(shù)據(jù)線。
如圖2和圖3所示,本發(fā)明實(shí)施例2提供一種基于fpga的ddr處理電路實(shí)現(xiàn)方法,包括如下步驟:步驟1.定義功能模塊;定義時(shí)鐘切換模塊,定義第一fifo模塊,定義第二fifo模塊,定義輸出切換模塊,定義用戶時(shí)鐘模塊;
定義時(shí)鐘切換模塊,時(shí)鐘切換模塊包括一輸入端口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;
定義用戶時(shí)鐘模塊,用戶時(shí)鐘模塊包括一輸出端口user_clk1;
步驟2.例化自定義的功能模塊實(shí)體,例化采用fpga原語(yǔ)的延遲模塊和ddr輸入寄存器模塊實(shí)體,實(shí)現(xiàn)各實(shí)體功能模塊的連接;
例化采用fpga原語(yǔ)idelay的延遲模塊實(shí)體,延遲模塊包括一輸入端口dqs,一輸出端口dqs_delay1;
例化采用fpga原語(yǔ)iddr的ddr輸入寄存器模塊實(shí)體,ddr輸入寄存器模塊包括一輸入端口dq,一輸入端口dqs_delay2,一輸出端口data_o1,一輸出端口data_e1;
延遲模塊的輸出端口dqs_delay1與時(shí)鐘切換模塊輸入端口dqs_delay3,與ddr輸入寄存器模塊輸入端口dqs_delay2連接,實(shí)現(xiàn)延遲模塊與時(shí)鐘切換模塊,與ddr輸入寄存器模塊的連接;
ddr輸入寄存器模塊的輸出端口data_o1與第一fifo模塊的輸入端口data_o2連接,ddr輸入寄存器模塊的輸出端口data_e1與第二fifo模塊的輸入端口data_e2連接,實(shí)現(xiàn)ddr輸入寄存器模塊與第一fifo模塊和第二fifo模塊的連接;
時(shí)鐘切換模塊的輸出端口clk_out1與第一fifo模塊的輸入端口clk_out2,與第二fifo模塊的輸入端口clk_out3連接,實(shí)現(xiàn)時(shí)鐘切換模塊與第一fifo模塊,與第二fifo模塊的連接;
輸出切換模塊的輸入端口odata_in與第一fifo模塊的輸出端口odata_out連接,輸出切換模塊的輸入端口edata_in與第二fifo模塊的輸出端口edata_out連接,實(shí)現(xiàn)輸出切換模塊與第一fifo模塊,與第二fifo模塊的連接;
用戶時(shí)鐘模塊的輸出端口user_clk1與時(shí)鐘切換模塊的輸入端user_clk2,與輸出切換模塊的輸入端口user_clk3,與第一fifo模塊的輸入端user_clk4,與第二fifo模塊的輸入端user_clk5連接,實(shí)現(xiàn)用戶時(shí)鐘模塊與時(shí)鐘切換單元,與輸出切換單元,與第一fifo模塊,與第二fifo模塊的連接;
步驟3.對(duì)程序進(jìn)行編譯,編譯完成后下載到fpga內(nèi)部;fpga內(nèi)部形成實(shí)體模塊;
步驟4.將ddr接口與fpga連接;
ddr接口的dqs信號(hào)與延遲模塊的輸入端口dqs連接,ddr接口的dq信號(hào)與ddr輸入寄存器模塊的輸入端口dq連接,實(shí)現(xiàn)ddr接口與fpga的連接;
步驟5.fpga啟動(dòng)工作;
步驟6.fpga各功能模塊對(duì)ddr接口數(shù)據(jù)進(jìn)行處理。
步驟61.ddr接口信號(hào)數(shù)據(jù)選取脈沖dqs到達(dá)延遲模塊,延遲模塊對(duì)數(shù)據(jù)選取脈沖dqs進(jìn)行延遲,生成dqs_delay給輸入寄存器模塊和時(shí)鐘切換模塊;
如圖3所示,步驟62.ddr輸入寄存器模塊在dqs_delay上升沿后的中部位置接收第一個(gè)dq數(shù)據(jù),ddr輸入寄存模塊在差分dqs_delay上升沿后的中部位置接收第二個(gè)dq數(shù)據(jù),第一個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_o1輸出,第二個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_e1輸出;
步驟63.依次類(lèi)推;第奇數(shù)個(gè)dq數(shù)據(jù)重復(fù)第一個(gè)dq數(shù)據(jù)接收的過(guò)程,第偶數(shù)個(gè)dq數(shù)據(jù)重復(fù)第二個(gè)dq數(shù)據(jù)接收的過(guò)程;第奇數(shù)個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_o1輸出,第偶數(shù)個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_e1輸出;
步驟64.時(shí)鐘切換單元提供時(shí)鐘的選擇如下:若存在數(shù)據(jù)選取脈沖dqs,則時(shí)鐘切換模塊選擇數(shù)據(jù)選取脈沖dqs_delay作為第一fifo模塊和第二fifo模塊的工作時(shí)鐘;若不存在數(shù)據(jù)選取脈沖dqs,則時(shí)鐘切換模塊選擇用戶時(shí)鐘模塊提供的用戶時(shí)鐘作為第一fifo模塊和第二fifo模塊的工作時(shí)鐘;
在時(shí)鐘切換模塊提供的時(shí)鐘下,第一fifo模塊對(duì)ddr輸入寄存器模塊的輸出端口data_o1輸出的數(shù)據(jù)進(jìn)行緩存;第二fifo模塊對(duì)ddr輸入寄存器模塊的輸出端口data_e1輸出的數(shù)據(jù)進(jìn)行緩存;
步驟65.在用戶時(shí)鐘模塊提供的時(shí)鐘下,輸出切換模塊將第一fifo模塊的輸出端口odata_out輸出的數(shù)據(jù)和第二fifo模塊的輸出端口edata_out輸出的數(shù)據(jù)按順序輸出,保證數(shù)據(jù)順序無(wú)誤。
如圖2和圖4所示,本發(fā)明實(shí)施例3提供一種基于fpga的ddr處理電路實(shí)現(xiàn)方法,包括如下步驟:步驟1.定義功能模塊;定義時(shí)鐘切換模塊,定義第一fifo模塊,定義第二fifo模塊,定義輸出切換模塊,定義用戶時(shí)鐘模塊;
定義時(shí)鐘切換模塊,時(shí)鐘切換模塊包括一輸入端口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;
定義用戶時(shí)鐘模塊,用戶時(shí)鐘模塊包括一輸出端口user_clk1;
步驟2.例化自定義的功能模塊實(shí)體,例化采用fpga原語(yǔ)的延遲模塊和ddr輸入寄存器模塊實(shí)體,實(shí)現(xiàn)各實(shí)體功能模塊的連接;
例化采用fpga原語(yǔ)idelay的延遲模塊實(shí)體,延遲模塊包括一輸入端口dqs,一輸出端口dqs_delay1;
例化采用fpga原語(yǔ)iddr的ddr輸入寄存器模塊實(shí)體,ddr輸入寄存器模塊包括一輸入端口dq,一輸入端口dqs_delay2,一輸出端口data_o1,一輸出端口data_e1;ddr輸入寄存器模塊還包括數(shù)據(jù)同步單元;
延遲模塊的輸出端口dqs_delay1與時(shí)鐘切換模塊輸入端口dqs_delay3,與ddr輸入寄存器模塊輸入端口dqs_delay2連接,實(shí)現(xiàn)延遲模塊與時(shí)鐘切換模塊,與ddr輸入寄存器模塊的連接;
ddr輸入寄存器模塊的輸出端口data_o1與第一fifo模塊的輸入端口data_o2連接,ddr輸入寄存器模塊的輸出端口data_e1與第二fifo模塊的輸入端口data_e2連接,實(shí)現(xiàn)ddr輸入寄存器模塊與第一fifo模塊和第二fifo模塊的連接;
時(shí)鐘切換模塊的輸出端口clk_out1與第一fifo模塊的輸入端口clk_out2,與第二fifo模塊的輸入端口clk_out3連接,實(shí)現(xiàn)時(shí)鐘切換模塊與第一fifo模塊,與第二fifo模塊的連接;
輸出切換模塊的輸入端口odata_in與第一fifo模塊的輸出端口odata_out連接,輸出切換模塊的輸入端口edata_in與第二fifo模塊的輸出端口edata_out連接,實(shí)現(xiàn)輸出切換模塊與第一fifo模塊,與第二fifo模塊的連接;
用戶時(shí)鐘模塊的輸出端口user_clk1與時(shí)鐘切換模塊的輸入端user_clk2,與輸出切換模塊的輸入端口user_clk3,與第一fifo模塊的輸入端user_clk4,與第二fifo模塊的輸入端user_clk5連接,實(shí)現(xiàn)用戶時(shí)鐘模塊與時(shí)鐘切換單元,與輸出切換單元,與第一fifo模塊,與第二fifo模塊的連接;
步驟3.對(duì)程序進(jìn)行編譯,編譯完成后下載到fpga內(nèi)部;fpga內(nèi)部形成實(shí)體模塊;
步驟4.將ddr接口與fpga連接;
ddr接口的dqs信號(hào)與延遲模塊的輸入端口dqs連接,ddr接口的dq信號(hào)與ddr輸入寄存器模塊的輸入端口dq連接,實(shí)現(xiàn)ddr接口與fpga的連接;
步驟5.fpga啟動(dòng)工作;
步驟6.fpga各功能模塊對(duì)ddr接口數(shù)據(jù)進(jìn)行處理。
步驟61.ddr接口信號(hào)數(shù)據(jù)選取脈沖dqs到達(dá)延遲模塊,延遲模塊對(duì)數(shù)據(jù)選取脈沖dqs進(jìn)行延遲,生成dqs_delay給輸入寄存器模塊和時(shí)鐘切換模塊;
如圖4所示,步驟62.ddr輸入寄存器模塊在dqs_delay上升沿后的中部位置接收第一個(gè)dq數(shù)據(jù),ddr輸入寄存模塊在差分dqs_delay上升沿后的中部位置接收第二個(gè)dq數(shù)據(jù),經(jīng)ddr輸入寄存器模塊的數(shù)據(jù)同步單元同步,第一個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_o1輸出,第二個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_e1輸出;
步驟63.依次類(lèi)推;第奇數(shù)個(gè)dq數(shù)據(jù)重復(fù)第一個(gè)dq數(shù)據(jù)接收的過(guò)程,第偶數(shù)個(gè)dq數(shù)據(jù)重復(fù)第二個(gè)dq數(shù)據(jù)接收的過(guò)程;第奇數(shù)個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_o1輸出,第偶數(shù)個(gè)dq數(shù)據(jù)從ddr輸入寄存器模塊的輸出端口data_e1輸出;經(jīng)ddr輸入寄存器模塊的數(shù)據(jù)同步單元同步,相鄰的第奇數(shù)個(gè)和第偶數(shù)個(gè)dq數(shù)據(jù)同時(shí)輸出。
步驟64.在時(shí)鐘切換模塊提供的時(shí)鐘下,第一fifo模塊對(duì)ddr輸入寄存器模塊的輸出端口data_o1輸出的數(shù)據(jù)進(jìn)行緩存;第二fifo模塊對(duì)ddr輸入寄存器模塊的輸出端口data_e1輸出的數(shù)據(jù)進(jìn)行緩存;
步驟65.在用戶時(shí)鐘模塊提供的時(shí)鐘下,輸出切換模塊將第一fifo模塊的輸出端口odata_out輸出的數(shù)據(jù)和第二fifo模塊的輸出端口edata_out輸出的數(shù)據(jù)按順序輸出,保證數(shù)據(jù)順序無(wú)誤。
ddr是doubledatarate雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器的簡(jiǎn)稱。
數(shù)據(jù)選取脈沖(dqs),dqs是ddrsdram中的重要功能,它的功能主要用來(lái)在一個(gè)時(shí)鐘周期內(nèi)準(zhǔn)確的區(qū)分出每個(gè)傳輸周期,并便于接收方準(zhǔn)確接收數(shù)據(jù),每一顆芯片都有一個(gè)dqs信號(hào)線,它是雙向的,在寫(xiě)入時(shí)它用來(lái)傳送由外部發(fā)來(lái)的dqs信號(hào),dqs與寫(xiě)入數(shù)據(jù)中心對(duì)齊,讀取時(shí),則由ddr生成dqs向外部發(fā)送,dqs與數(shù)據(jù)邊沿對(duì)齊,完全可以說(shuō),它就是數(shù)據(jù)的同步信號(hào)。
fifo(firstinputfirstoutput),即先進(jìn)先出隊(duì)列。fifo隊(duì)列不對(duì)報(bào)文進(jìn)行分類(lèi),當(dāng)報(bào)文進(jìn)入接口的速度大于接口能發(fā)送的速度時(shí),fifo按報(bào)文到達(dá)接口的先后順序讓報(bào)文進(jìn)入隊(duì)列,同時(shí),fifo在隊(duì)列的出口讓報(bào)文按進(jìn)隊(duì)的順序出隊(duì),先進(jìn)的報(bào)文將先出隊(duì),后進(jìn)的報(bào)文將后出隊(duì)。
本發(fā)明的實(shí)施例是說(shuō)明性的,而非限定性的,上述實(shí)施例只是幫助理解本發(fā)明,因此本發(fā)明不限于具體實(shí)施方式中所述的實(shí)施例,凡是由本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出的其他的具體實(shí)施方式,同樣屬于本發(fā)明保護(hù)的范圍。