高性能多口ddr控制器及其實現(xiàn)方法
【專利摘要】本發(fā)明公開了一種高性能多口DDR控制器及其實現(xiàn)方法,涉及數(shù)據(jù)通信領(lǐng)域。該高性能多口DDR控制器包括本地總線與讀寫報文轉(zhuǎn)換模塊、用戶接口與讀寫報文轉(zhuǎn)換模塊、讀/寫報文下行仲裁模塊、讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊、讀寫報文與DDR接口轉(zhuǎn)換模塊、DDR接口模塊。本發(fā)明中多用戶口共享DDR接口的架構(gòu)更具經(jīng)濟性與靈活性,極大節(jié)省了管腳資源和邏輯資源,簡化了設(shè)計難度。
【專利說明】
高性能多口 DDR控制器及其實現(xiàn)方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域,具體是涉及一種高性能多口DDR控制器及其實現(xiàn)方法。
【背景技術(shù)】
[0002]隨著基于IP( Internet Protocol,網(wǎng)際協(xié)議)化的傳送網(wǎng)絡(luò)不斷發(fā)展,基于FPGA(Field Programmable Gate Array,現(xiàn)場可編程門陣列)芯片實現(xiàn)的網(wǎng)絡(luò)協(xié)議功能對于大容量、高速的數(shù)據(jù)緩存的需求越來越迫切。傳統(tǒng)的數(shù)據(jù)緩存方案基于FPGA片內(nèi)block RAM(塊狀隨機存儲器)實現(xiàn)。該方案擁有高速、配置靈活、使用方便等優(yōu)點,但是成本高昂、且容量小的缺點使其越來越不適用于大條目數(shù)的協(xié)議數(shù)據(jù)緩存。
[0003]DDR(Double Data Rate,雙倍速率同步動態(tài)隨機存儲器)是JEDEC(電子設(shè)備工程聯(lián)合委員會)于2004年發(fā)布,經(jīng)歷了 DDR、DDR2、DDR3、DDR4的發(fā)展,由于各代DDR系統(tǒng)原理相似,下文中以“DDR”統(tǒng)述。DDR因其成本低廉、容量大、高速的優(yōu)點被廣泛用于存儲需求高的數(shù)據(jù)通信領(lǐng)域。DDR系統(tǒng)通常由DDR控制器和DDR存儲器組成。DDR控制器根據(jù)用戶的請求,按照DDR規(guī)范中定義的時序向DDR存儲器發(fā)起初始化、讀、寫等指令;DDR存儲器實現(xiàn)數(shù)據(jù)的存儲和對DDR控制器指令的響應(yīng)。
[0004]在一般的基于FPGA的DDR控制器設(shè)計中,容量與帶寬的提升可以通過DDR存儲器的疊加實現(xiàn),缺點是一個DDR控制器只有一個用戶口。對于多用戶的應(yīng)用場景,需要為每個用戶例化一個DDR控制器,對于FPGA的管腳和邏輯資源是一種極大的浪費。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種高性能多口DDR控制器及其實現(xiàn)方法,多用戶口共享DDR接口的架構(gòu)更具經(jīng)濟性與靈活性,極大節(jié)省了管腳資源和邏輯資源,簡化了設(shè)計難度。
[0006]本發(fā)明提供一種高性能多口DDR控制器,該控制器包括本地總線與讀寫報文轉(zhuǎn)換模塊、用戶接口與讀寫報文轉(zhuǎn)換模塊、讀/寫報文下行仲裁模塊、讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊、讀寫報文與DDR接口轉(zhuǎn)換模塊、雙倍速率同步動態(tài)隨機存儲器DDR接口模塊,其中:
[0007]本地總線與讀寫報文轉(zhuǎn)換模塊用于:將本地總線寫轉(zhuǎn)換為下行的寫報文,將本地總線讀轉(zhuǎn)換為下行的讀報文,并提取相應(yīng)上行的讀回復(fù)數(shù)據(jù)報文中的數(shù)據(jù);
[0008]用戶接口與讀寫報文轉(zhuǎn)換模塊用于:將用戶接口寫請求轉(zhuǎn)換為下行的寫報文,將用戶接口讀請求轉(zhuǎn)換為下行的讀報文,并提取相應(yīng)上行的讀回復(fù)數(shù)據(jù)報文中的數(shù)據(jù);
[0009]讀/寫報文下行仲裁模塊用于:對來自本地總線接口的讀寫報文或來自用戶接口的讀寫報文進行下行仲裁,按照優(yōu)先級順序通過,同時為等待通行的報文提供緩存;
[0010]讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊用于:對DDR接口讀回復(fù)數(shù)據(jù)報文去往本地總線接口或用戶接口的上行進行選擇;
[0011 ]讀寫報文與DDR接口轉(zhuǎn)換模塊用于:下行方向,實現(xiàn)讀寫報文與DDR接口模塊用戶側(cè)接口轉(zhuǎn)換;上行方向,提取讀回復(fù)數(shù)據(jù)組成讀回復(fù)報文;
[0012]DDR接口模塊用于:實現(xiàn)DDR接口的底層協(xié)議,驅(qū)動FPGA與DDR顆粒之間的硬件連線。
[0013]在上述技術(shù)方案的基礎(chǔ)上,所述本地總線與讀寫報文轉(zhuǎn)換模塊提供一個通用的本地總線接口,工作于從端回復(fù)模式;本地總線接口由片選信號、讀寫使能信號、地址信號、數(shù)據(jù)信號、操作完成指示信號組成;所述控制器作為本地總線的從端,響應(yīng)用戶通過該接口提供的讀/寫操作,完成寫操作并提供操作完成指示信號,或者完成讀操作并返回讀數(shù)據(jù)以及操作完成指示信號;用戶作為本地總線的主端,在收到上一次讀/寫操作完成指示信號后,才能再次發(fā)起讀/寫操作。
[0014]在上述技術(shù)方案的基礎(chǔ)上,所述用戶接口與讀寫報文轉(zhuǎn)換模塊提供一個自定義的用戶接口,工作于從端回復(fù)模式;用戶接口由請求開始信號、請求讀寫指示信號、請求起地址信號、請求長度信號、請求寫數(shù)據(jù)信號、請求讀回復(fù)數(shù)據(jù)信號、請求結(jié)束回復(fù)信號組成;所述控制器作為該接口的從端,響應(yīng)用戶通過該接口提供的讀/寫請求,完成寫請求并提供請求結(jié)束回復(fù)信號,或者完成讀請求并返回讀回復(fù)數(shù)據(jù)以及請求結(jié)束回復(fù)信號;用戶作為該接口的主端,在收到上一次讀/寫請求完成回復(fù)信號后,才能再次發(fā)起讀/寫請求。
[0015]在上述技術(shù)方案的基礎(chǔ)上,所述本地總線接口只支持一次操作執(zhí)行一拍數(shù)據(jù)的讀寫,用戶接口一次操作支持I至1024任意拍數(shù)據(jù)的連續(xù)讀寫;用戶作為主端發(fā)起I至1024任意拍數(shù)據(jù)的讀/寫請求后,所述控制器參照直接內(nèi)存存取DMA方式執(zhí)行:用戶接口與讀寫報文轉(zhuǎn)換模塊將該請求按照底層DDR接口的突發(fā)長度切割成小粒度的讀/寫請求并下發(fā),當所有小粒度讀/寫請求完成后,產(chǎn)生請求結(jié)束回復(fù)信號,提示主端請求已完成;
[0016]用戶作為主端發(fā)起I至1024任意拍數(shù)據(jù)的讀/寫請求后,按照DDR接口模塊設(shè)置的突發(fā)長度進行切包操作,將用戶接口所支持的大數(shù)據(jù)請求切分為底層DDR接口模塊支持的小數(shù)據(jù)請求;
[0017]對于用戶寫請求,用戶接口與讀寫報文轉(zhuǎn)換模塊監(jiān)測DDR接口處的執(zhí)行情況,當最后一個寫操作在DDR接口處完成即結(jié)束本次用戶寫請求,返回請求結(jié)束回復(fù)信號;
[0018]對于用戶讀請求,檢測用戶接口與讀寫報文轉(zhuǎn)換模塊收到切包時,讀回復(fù)報文;
[0019]對于用戶接口,收到的讀回復(fù)報文如果不是最后一個切包讀回復(fù)報文,則將數(shù)據(jù)緩存,當收到最后一個讀回復(fù)報文后,即將緩存數(shù)據(jù)整體上報后,回復(fù)用戶讀請求完成指示信號,以完成本次讀請求。
[0020]在上述技術(shù)方案的基礎(chǔ)上,所述本地總線接口或用戶接口所轉(zhuǎn)換的讀寫報文分為寫報文、讀報文、讀回復(fù)報文三種類型,三種類型的報文均由64比特幀頭加數(shù)據(jù)域組成,數(shù)據(jù)域最小數(shù)據(jù)單位為32比特;幀頭信息包括報文類型、端口號、切包標號、切包起地址、切包長度;報文類型指示本報文是寫報文、讀報文或讀回復(fù)報文;端口號指示本報文來自本地總線接口或哪一個用戶接口;切包標號標記本報文攜帶本次大數(shù)據(jù)請求中的第幾段數(shù)據(jù),切包標號指示本次讀寫請求切包后的編號;切包數(shù)據(jù)域最小數(shù)據(jù)單位為32比特,是以切包起地址開始的連續(xù)數(shù)據(jù),切包長度指示該數(shù)據(jù)域有多少個32比特有效數(shù)據(jù);切包起地址標記本報文攜帶數(shù)據(jù)的起地址,切包長度標記本報文攜帶數(shù)據(jù)的長度。
[0021]在上述技術(shù)方案的基礎(chǔ)上,所述讀/寫報文下行仲裁模塊為各上游用戶端口設(shè)置了獨立的通道緩存,用于流量控制;對于先后到達上行端口讀/寫報文,讀/寫報文下行仲裁模塊按照先后順序依次放行;對于同時到達的上行端口讀/寫報文,讀/寫報文下行仲裁模塊按照配置的優(yōu)先級順序執(zhí)行,保證帶寬均勻分配;讀/寫報文下行仲裁模塊的緩存大小為一次寫請求的最大數(shù)據(jù)量,通過本地總線接口 /用戶接口與上游的握手機制保證緩存不溢出;通過切包機制與調(diào)度機制,同時通過流水線調(diào)度機制以及下游模塊的快速執(zhí)行,保證DDR的帶寬利用率。
[0022]在上述技術(shù)方案的基礎(chǔ)上,所述讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊上游與所例化的各用戶端口與讀寫報文轉(zhuǎn)換模塊相連,下游與讀寫報文與DDR接口轉(zhuǎn)換模塊相連,實現(xiàn)對DDR接口讀回復(fù)數(shù)據(jù)去往本地總線接口或用戶接口的上行選擇;讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊收到下游讀回復(fù)報文后,解析讀回復(fù)報文幀頭,根據(jù)幀頭信息獲知該報文的端口號,根據(jù)端口號與用戶端口的對應(yīng)關(guān)系將讀回復(fù)報文轉(zhuǎn)發(fā)至相應(yīng)的端口;讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊是解復(fù)用機制,且上下游端口速率一致,無需設(shè)置緩存。
[0023]在上述技術(shù)方案的基礎(chǔ)上,所述讀寫報文與DDR接口轉(zhuǎn)換模塊與DDR接口模塊完成了常見的單口 DDR控制器功能,將仲裁后的讀/寫報文順序執(zhí)行;對于用戶寫請求,最后一個切包寫報文完成,讀寫報文與DDR接口轉(zhuǎn)換模塊通知用戶接口與讀寫報文轉(zhuǎn)換模塊,由其回復(fù)用戶寫請求完成指示信號以完成本次寫請求;對于用戶讀請求,讀寫報文與DDR接口轉(zhuǎn)換模塊將讀回復(fù)數(shù)據(jù)按照讀報文的幀頭信息重新組幀成讀回復(fù)報文并上送。
[0024]在上述技術(shù)方案的基礎(chǔ)上,所述DDR接口模塊通過調(diào)用FPGA器件廠家提供的DDRIP核實現(xiàn),該IP核將內(nèi)部邏輯的數(shù)據(jù)總線轉(zhuǎn)化為符合DDR標準規(guī)范的DDR總線操作,實現(xiàn)FPGA片內(nèi)邏輯與DDR顆粒的連通,該IP核以硬核方式提供。
[0025]本發(fā)明還提供上述高性能多口DDR控制器的實現(xiàn)方法,包括以下步驟:
[0026]SI ,FPGA內(nèi)部邏輯通過本地總線接口或用戶接口發(fā)起讀/寫命令,F(xiàn)PGA內(nèi)部邏輯作為本地總線接口或用戶接口的主端,均需要等待回復(fù)當前操作完成指示信號,才能發(fā)起下一次操作;
[0027]S2、將讀/寫命令轉(zhuǎn)換為自定義格式讀/寫報文,其中對于用戶接口與讀寫報文轉(zhuǎn)換模塊,按照DDR接口的突發(fā)長度進行切包操作,將用戶接口所支持的大數(shù)據(jù)請求切分為底層DDR接口模塊支持的小數(shù)據(jù)請求;
[0028]S3、為各上游端口設(shè)置獨立的通道緩存并對并發(fā)進行仲裁,按上行多端口讀/寫報文到達的先后順序依次執(zhí)行,對于同時到達的上行多端口讀/寫報文則按照可配置的優(yōu)先級順序執(zhí)行;通過握手機制保證緩存不溢出,通過流水線調(diào)度機制以及下游模塊的快速執(zhí)行,保證DDR的帶寬利用率;
[0029]S4、將仲裁后的讀/寫報文順序執(zhí)行:對于用戶寫請求,最后一個切包寫報文完成,即通知用戶接口與讀寫報文轉(zhuǎn)換模塊,由其回復(fù)用戶寫請求完成指示信號以完成本次寫請求;對于用戶讀請求,將讀回復(fù)數(shù)據(jù)按照讀報文的幀頭信息重新組幀成讀回復(fù)報文并上送;
[0030]S5、解析讀回復(fù)報文幀頭,根據(jù)幀頭信息將讀回復(fù)報文上送至相應(yīng)的用戶接口;
[0031]S6、對本地總線接口,收到讀回復(fù)報文即結(jié)束本次讀操作;對于用戶接口,收到的讀回復(fù)報文如果不是最后一個切包讀回復(fù)報文,則將數(shù)據(jù)緩存,當收到最后一個讀回復(fù)報文后,即將緩存數(shù)據(jù)整體上報后,回復(fù)用戶讀請求完成指示信號,以完成本次讀請求。
[0032]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點如下:
[0033](I)本發(fā)明為用戶提供了簡化但靈活的訪問DDR外設(shè)的接口,用戶既可以使用傳統(tǒng)的本地總線接口,也可以使用高效率類DMA的用戶接口。本發(fā)明在一組DDR總線基礎(chǔ)上實現(xiàn)多個用戶對DDR外設(shè)的同時訪問,多用戶口共享DDR接口的架構(gòu)更具經(jīng)濟性與靈活性,極大節(jié)省了管腳資源和邏輯資源,簡化了設(shè)計難度。
[0034](2)本發(fā)明對DDR接口帶寬利用率高,多用戶同時讀寫時均可以分配到較高的帶寬。
[0035](3)本發(fā)明充分利用DDR器件大容量、高速率的特點,簡化了應(yīng)用難度,可以在許多應(yīng)用場合代替昂貴的FPGA片內(nèi)塊RAM的使用。
【附圖說明】
[0036]圖1是本發(fā)明實施例中高性能多口DDR控制器的結(jié)構(gòu)框圖。
[0037]圖2是本發(fā)明實施例中高性能多口DDR控制器的實現(xiàn)方法的流程圖。
【具體實施方式】
[0038]下面結(jié)合附圖及具體實施例對本發(fā)明作進一步的詳細描述。
[0039]為了滿足多個用戶同時訪問同一個DDR接口的需求,除了需要為用戶提供使用方便的接口,支持用戶進行本地總線讀寫或類似DMA(Direct1nal Memory Access,直接內(nèi)存存取)的大塊數(shù)據(jù)傳輸;同時需要合理分配DDR接口的帶寬(只為工作狀態(tài)的用戶接口平均分配帶寬),提升帶寬利用率。
[0040]參見圖1所示,本發(fā)明實施例提供一種高性能多口DDR控制器,該控制器包括本地總線與讀寫報文轉(zhuǎn)換模塊、用戶接口與讀寫報文轉(zhuǎn)換模塊、讀/寫報文下行仲裁模塊、讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊、讀寫報文與DDR接口轉(zhuǎn)換模塊、DDR接口模塊,其中:
[0041]本地總線與讀寫報文轉(zhuǎn)換模塊用于:將本地總線寫轉(zhuǎn)換為下行的寫報文,將本地總線讀轉(zhuǎn)換為下行的讀報文,并提取相應(yīng)上行的讀回復(fù)數(shù)據(jù)報文中的數(shù)據(jù);
[0042]用戶接口與讀寫報文轉(zhuǎn)換模塊用于:將用戶接口寫請求轉(zhuǎn)換為下行的寫報文,將用戶接口讀請求轉(zhuǎn)換為下行的讀報文,并提取相應(yīng)上行的讀回復(fù)數(shù)據(jù)報文中的數(shù)據(jù);
[0043]讀/寫報文下行仲裁模塊用于:對來自本地總線接口的讀寫報文或來自用戶接口的讀寫報文進行下行仲裁,按照優(yōu)先級順序通過,同時為等待通行的報文提供緩存;
[0044]讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊用于:對DDR接口讀回復(fù)數(shù)據(jù)報文去往本地總線接口或用戶接口的上行進行選擇;
[0045]讀寫報文與DDR接口轉(zhuǎn)換模塊用于:下行方向,實現(xiàn)讀寫報文與DDR接口模塊用戶側(cè)接口轉(zhuǎn)換;上行方向,提取讀回復(fù)數(shù)據(jù)組成讀回復(fù)報文;
[0046]DDR接口模塊用于:實現(xiàn)DDR接口的底層協(xié)議,驅(qū)動FPGA與DDR顆粒之間的硬件連線。
[0047]本地總線與讀寫報文轉(zhuǎn)換模塊提供一個通用的本地總線接口,工作于從端回復(fù)模式。本地總線接口由片選信號、讀寫使能信號、地址信號、數(shù)據(jù)信號、操作完成指示信號組成。本發(fā)明實施例中的控制器作為本地總線的從端,響應(yīng)用戶通過該接口提供的讀/寫操作,完成寫操作并提供操作完成指示信號,或者完成讀操作并返回讀數(shù)據(jù)以及操作完成指示信號。用戶作為本地總線的主端,需要在收到上一次讀/寫操作完成指示信號后,才能再次發(fā)起讀/寫操作。
[0048]用戶接口與讀寫報文轉(zhuǎn)換模塊提供一個自定義的用戶接口,工作于從端回復(fù)模式。用戶接口由請求開始信號、請求讀寫指示信號、請求起地址信號、請求長度信號、請求寫數(shù)據(jù)信號、請求讀回復(fù)數(shù)據(jù)信號、請求結(jié)束回復(fù)信號組成。本發(fā)明實施例中的控制器作為該接口的從端,響應(yīng)用戶通過該接口提供的讀/寫請求,完成寫請求并提供請求結(jié)束回復(fù)信號,或者完成讀請求并返回讀回復(fù)數(shù)據(jù)以及請求結(jié)束回復(fù)信號。用戶作為該接口的主端,需要在收到上一次讀/寫請求完成回復(fù)信號后,才能再次發(fā)起讀/寫請求。
[0049]用戶接口與本地總線接口所不同的是,本地總線接口只支持一次操作執(zhí)行一拍數(shù)據(jù)的讀寫,而用戶接口一次操作支持I至1024任意拍數(shù)據(jù)的連續(xù)讀寫。用戶作為主端發(fā)起I至1024任意拍數(shù)據(jù)的讀/寫請求后,本發(fā)明實施例中的控制器參照DMA方式執(zhí)行:用戶接口與讀寫報文轉(zhuǎn)換模塊會將該請求按照底層DDR接口的突發(fā)長度切割成小粒度的讀/寫請求并下發(fā),當所有小粒度讀/寫請求完成后,產(chǎn)生請求結(jié)束回復(fù)信號,提示主端請求已完成。
[0050]用戶作為主端發(fā)起I至1024任意拍數(shù)據(jù)的讀/寫請求后,需要按照DDR接口模塊設(shè)置的突發(fā)長度進行切包操作,將用戶接口所支持的大數(shù)據(jù)請求切分為底層DDR接口模塊支持的小數(shù)據(jù)請求。
[0051]對于用戶寫請求,用戶接口與讀寫報文轉(zhuǎn)換模塊監(jiān)測DDR接口處的執(zhí)行情況,當最后一個寫操作在DDR接口處完成即結(jié)束本次用戶寫請求,返回請求結(jié)束回復(fù)信號。
[0052]對于用戶讀請求,檢測用戶接口與讀寫報文轉(zhuǎn)換模塊收到切包時,讀回復(fù)報文。
[0053]對于用戶接口,收到的讀回復(fù)報文如果不是最后一個切包讀回復(fù)報文,則將數(shù)據(jù)緩存,當收到最后一個讀回復(fù)報文后,即將緩存數(shù)據(jù)整體上報后,回復(fù)用戶讀請求完成指示信號,以完成本次讀請求。
[0054]本地總線接口或用戶接口所轉(zhuǎn)換的讀寫報文為本發(fā)明自定義格式。讀寫報文分為寫報文、讀報文、讀回復(fù)報文三種類型。三種類型的報文均由64比特幀頭加數(shù)據(jù)域組成,數(shù)據(jù)域最小數(shù)據(jù)單位為32比特。幀頭信息包括報文類型、端口號、切包標號、切包起地址、切包長度。報文類型指示本報文是寫報文、讀報文或讀回復(fù)報文。端口號指示本報文來自本地總線接口或哪一個用戶接口。如上所述,對于用戶接口,用戶接口與讀寫報文轉(zhuǎn)換模塊會將該請求按照底層DDR接口的突發(fā)長度切割成小粒度的讀/寫請求并下發(fā)。切包標號標記本報文攜帶本次大數(shù)據(jù)請求中的第幾段數(shù)據(jù),切包標號指示本次讀寫請求切包后的編號。切包數(shù)據(jù)域最小數(shù)據(jù)單位為32比特,是以切包起地址開始的連續(xù)數(shù)據(jù),切包長度指示該數(shù)據(jù)域有多少個32比特有效數(shù)據(jù)。切包起地址標記本報文攜帶數(shù)據(jù)的起地址,切包長度標記本報文攜帶數(shù)據(jù)的長度。
[0055]本地總線一般應(yīng)用于與CPU連接,用戶接口一般應(yīng)用于與FPGA內(nèi)部邏輯連接。在本發(fā)明實施例中,本地總線接口例化了I個,用戶接口例化了3個,合計4個用戶端口。在實際應(yīng)用中4個用戶端口相互獨立,可同時對底層DDR器件進行訪問。根據(jù)實際應(yīng)用的需求,用戶端口也可以進行擴展,實現(xiàn)原理與本發(fā)明所述一致。
[0056]讀/寫報文下行仲裁模塊為各上游用戶端口設(shè)置了獨立的通道緩存,用于流量控制。對于先后到達上行端口讀/寫報文,讀/寫報文下行仲裁模塊按照先后順序依次放行。對于同時到達的上行端口讀/寫報文,讀/寫報文下行仲裁模塊按照配置的優(yōu)先級順序執(zhí)行,保證帶寬均勻分配。讀/寫報文下行仲裁模塊的緩存大小設(shè)計為一次寫請求的最大數(shù)據(jù)量,通過本地總線接口 /用戶接口與上游的握手機制保證緩存不溢出。通過切包機制與調(diào)度機制,同時通過流水線調(diào)度機制以及下游模塊的快速執(zhí)行保證DDR的帶寬利用率。
[0057]讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊上游與所例化的各用戶端口與讀寫報文轉(zhuǎn)換模塊相連,下游與讀寫報文與DDR接口轉(zhuǎn)換模塊相連,實現(xiàn)對DDR接口讀回復(fù)數(shù)據(jù)去往本地總線接口或用戶接口的上行選擇。讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊收到下游讀回復(fù)報文后,解析讀回復(fù)報文幀頭,根據(jù)幀頭信息獲知該報文的端口號,根據(jù)端口號與用戶端口的對應(yīng)關(guān)系將讀回復(fù)報文轉(zhuǎn)發(fā)至相應(yīng)的端口。由于讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊是解復(fù)用機制,且上下游端口速率一致,所以無需設(shè)置緩存。
[0058]讀寫報文與DDR接口轉(zhuǎn)換模塊與DDR接口模塊完成了常見的單口DDR控制器功能,將仲裁后的讀/寫報文順序執(zhí)行。此部分根據(jù)不同的應(yīng)用場景(不同的FPGA芯片/DDR器件)有不同的實施例,但實現(xiàn)原理均與本發(fā)明描述一致。對于用戶寫請求,最后一個切包寫報文完成,讀寫報文與DDR接口轉(zhuǎn)換模塊通知用戶接口與讀寫報文轉(zhuǎn)換模塊,由其回復(fù)用戶寫請求完成指示信號以完成本次寫請求。對于用戶讀請求,讀寫報文與DDR接口轉(zhuǎn)換模塊將讀回復(fù)數(shù)據(jù)按照讀報文的幀頭信息重新組幀成讀回復(fù)報文并上送。
[0059]DDR接口模塊通過調(diào)用FPGA器件廠家提供的DDR IP核實現(xiàn)。該IP核可實現(xiàn)將內(nèi)部邏輯的數(shù)據(jù)總線轉(zhuǎn)化為符合DDR標準規(guī)范的DDR總線操作,實現(xiàn)FPGA片內(nèi)邏輯與DDR顆粒的連通。由于該IP核以硬核方式提供,且對各廠家DDR顆粒的支持情況良好,可以極大提高本發(fā)明實施例的適用范圍。
[0060]參見圖2所示,本發(fā)明實施例還提供上述高性能多口DDR控制器的實現(xiàn)方法,包括以下步驟:
[0061 ] S1、FPGA內(nèi)部邏輯通過本地總線接口或用戶接口發(fā)起讀/寫命令,F(xiàn)PGA內(nèi)部邏輯作為本地總線接口或用戶接口的主端,均需要等待回復(fù)當前操作完成指示信號,才能發(fā)起下一次操作;
[0062]S2、將讀/寫命令轉(zhuǎn)換為自定義格式讀/寫報文,其中對于用戶接口與讀寫報文轉(zhuǎn)換模塊,需要按照DDR接口的突發(fā)長度進行切包操作,將用戶接口所支持的大數(shù)據(jù)請求切分為底層DDR接口模塊支持的小數(shù)據(jù)請求;
[0063]S3、為各上游端口設(shè)置獨立的通道緩存并對并發(fā)進行仲裁,按上行多端口讀/寫報文到達的先后順序依次執(zhí)行,對于同時到達的上行多端口讀/寫報文則按照可配置的優(yōu)先級順序執(zhí)行;通過握手機制保證緩存不溢出,通過流水線調(diào)度機制以及下游模塊的快速執(zhí)行,保證DDR的帶寬利用率;
[0064]S4、將仲裁后的讀/寫報文順序執(zhí)行:此部分根據(jù)不同的應(yīng)用場景(不同的FPGA芯片/DDR顆粒)有不同的實施例,但實現(xiàn)原理均與本發(fā)明描述一致;對于用戶寫請求,最后一個切包寫報文完成,即通知用戶接口與讀寫報文轉(zhuǎn)換模塊,由其回復(fù)用戶寫請求完成指示信號以完成本次寫請求;對于用戶讀請求,將讀回復(fù)數(shù)據(jù)按照讀報文的幀頭信息重新組幀成讀回復(fù)報文并上送;
[0065]S5、解析讀回復(fù)報文幀頭,根據(jù)幀頭信息將讀回復(fù)報文上送至相應(yīng)的用戶接口;
[0066]S6、對本地總線接口,收到讀回復(fù)報文即結(jié)束本次讀操作;對于用戶接口,收到的讀回復(fù)報文如果不是最后一個切包讀回復(fù)報文,則將數(shù)據(jù)緩存,當收到最后一個讀回復(fù)報文后,即將緩存數(shù)據(jù)整體上報后,回復(fù)用戶讀請求完成指示信號,以完成本次讀請求。
[0067]下面通過一個具體實現(xiàn)的案例進行說明。
[0068]1、讀/寫請求發(fā)起
[0069]參見圖2所示,F(xiàn)PGA內(nèi)部邏輯通過本發(fā)明實施例提供的本地總線接口或用戶接口發(fā)起讀/寫命令。FPGA內(nèi)部邏輯作為本地總線接口或用戶接口的主端,均需要等待本發(fā)明實施例回復(fù)當前操作完成指示信號才能發(fā)起下一次操作。FPGA內(nèi)部邏輯通過本地總線訪問每次請求只能進行一個32比特數(shù)據(jù)的讀寫,而通過用戶接口每次請求可進行1-1024個32比特地址連續(xù)數(shù)據(jù)的讀寫。
[0070]2、讀/寫請求識別與轉(zhuǎn)換
[0071]將讀/寫命令轉(zhuǎn)換為自定義格式讀/寫報文。其中對于本地總線接口直接進行轉(zhuǎn)換;對于用戶接口,需要按照DDR接口的突發(fā)長度進行切包操作,將用戶接口所支持的大數(shù)據(jù)請求切分為底層DDR接口支持的小數(shù)據(jù)請求。所有的小數(shù)據(jù)請求會被順序編號,每個小數(shù)據(jù)請求可以獨立路由以及被執(zhí)行和生成相應(yīng)回復(fù)報文。
[0072]3、讀/寫報文下行仲裁
[0073]通過讀/寫報文下行仲裁模塊為各上游端口設(shè)置獨立的通道緩存,按上行多端口讀/寫報文到達的先后順序依次執(zhí)行,對于同時到達的上行多端口讀/寫報文則按照可配置的優(yōu)先級順序執(zhí)行。通過所述握手機制保證可以設(shè)置合理大小的緩存并保證緩存不溢出,并通過流水線調(diào)度機制以及下游模塊的快速執(zhí)行保證DDR的帶寬利用率。
[0074]4、讀/寫報文執(zhí)行
[0075]將經(jīng)過仲裁后的讀寫報文順序執(zhí)行,轉(zhuǎn)換為DDR接口操作。此部分根據(jù)不同的應(yīng)用場景(不同的FPGA芯片/DDR顆粒)有不同的實施例,但實現(xiàn)原理均與本發(fā)明描述一致。對于用戶寫請求,最后一個切包寫報文完成即通知用戶接口與讀寫報文轉(zhuǎn)換模塊,由其回復(fù)用戶寫請求完成指示信號以完成本次寫請求。對于用戶讀請求,將讀回復(fù)數(shù)據(jù)按照讀報文所示幀頭信息重新組幀成讀回復(fù)報文并上送。
[0076]以下步驟5、6描述寫請求余下步驟:
[0077]5、寫報文完成情況監(jiān)測
[0078]底層DDR操作執(zhí)行部件將所執(zhí)行寫報文端口號、切包編號、切包完成指示上報,監(jiān)測部件核對端口號,根據(jù)本次請求的切包數(shù)目核對切包編號,確定寫請求的最后一個切包寫操作完成即上報寫完成指示。
[0079]6、寫請求完成
[0080]根據(jù)接收的寫請求完成信號,本地總線接口回復(fù)操作完成信號,用戶接口釋放總線為空閑狀態(tài)。
[0081 ]以下步驟7、8、9描述讀請求余下步驟
[0082]7、讀回復(fù)報文生成
[0083]底層DDR操作執(zhí)行部件暫存所執(zhí)行讀報文的報文端口號、切包編號、切包大小等信息,從DDR器件獲取讀回復(fù)數(shù)據(jù)后則按照定義格式組成讀回復(fù)報文進行上報。
[0084]8、讀完成情況監(jiān)測
[0085]監(jiān)測部件解析讀回復(fù)數(shù)據(jù)報文,根據(jù)解析出讀回復(fù)報文端口號、切包編號完成讀完成情況監(jiān)測與讀回復(fù)報文轉(zhuǎn)發(fā)。根據(jù)讀回復(fù)報文端口號確定上送讀回復(fù)報文至哪一個端口,根據(jù)切包編號與暫存的最大切包編號確定是否是本次讀請求的最后一個讀回復(fù)報文。
[0086]9、讀請求完成
[0087]每個端口針對讀回復(fù)報文設(shè)置緩存,讀回復(fù)報文數(shù)據(jù)均需進入緩存,當最后一個讀回復(fù)報文到達緩存即開始向用戶輸出讀回復(fù)數(shù)據(jù),直至緩存清空為止。清空讀回復(fù)數(shù)據(jù)緩存后,對于本地總線接口回復(fù)操作完成信號,對于用戶接口則釋放總線為空閑狀態(tài)。
[0088]本發(fā)明實施例在烽火通信的IPRAN設(shè)備上得到應(yīng)用,充分利用DDR器件大容量、高速率的特點,同時簡化了應(yīng)用難度,可以在許多應(yīng)用場合代替昂貴的FPGA片內(nèi)塊RAM的使用。
[0089]本領(lǐng)域的技術(shù)人員可以對本發(fā)明實施例進行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護范圍之內(nèi)。
[0090]說明書中未詳細描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。
【主權(quán)項】
1.一種高性能多口 DDR控制器,其特征在于:該控制器包括本地總線與讀寫報文轉(zhuǎn)換模塊、用戶接口與讀寫報文轉(zhuǎn)換模塊、讀/寫報文下行仲裁模塊、讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊、讀寫報文與DDR接口轉(zhuǎn)換模塊、雙倍速率同步動態(tài)隨機存儲器DDR接口模塊,其中: 本地總線與讀寫報文轉(zhuǎn)換模塊用于:將本地總線寫轉(zhuǎn)換為下行的寫報文,將本地總線讀轉(zhuǎn)換為下行的讀報文,并提取相應(yīng)上行的讀回復(fù)數(shù)據(jù)報文中的數(shù)據(jù); 用戶接口與讀寫報文轉(zhuǎn)換模塊用于:將用戶接口寫請求轉(zhuǎn)換為下行的寫報文,將用戶接口讀請求轉(zhuǎn)換為下行的讀報文,并提取相應(yīng)上行的讀回復(fù)數(shù)據(jù)報文中的數(shù)據(jù); 讀/寫報文下行仲裁模塊用于:對來自本地總線接口的讀寫報文或來自用戶接口的讀寫報文進行下行仲裁,按照優(yōu)先級順序通過,同時為等待通行的報文提供緩存; 讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊用于:對DDR接口讀回復(fù)數(shù)據(jù)報文去往本地總線接口或用戶接口的上行進行選擇; 讀寫報文與DDR接口轉(zhuǎn)換模塊用于:下行方向,實現(xiàn)讀寫報文與DDR接口模塊用戶側(cè)接口轉(zhuǎn)換;上行方向,提取讀回復(fù)數(shù)據(jù)組成讀回復(fù)報文; DDR接口模塊用于:實現(xiàn)DDR接口的底層協(xié)議,驅(qū)動FPGA與DDR顆粒之間的硬件連線。2.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述本地總線與讀寫報文轉(zhuǎn)換模塊提供一個通用的本地總線接口,工作于從端回復(fù)模式;本地總線接口由片選信號、讀寫使能信號、地址信號、數(shù)據(jù)信號、操作完成指示信號組成;所述控制器作為本地總線的從端,響應(yīng)用戶通過該接口提供的讀/寫操作,完成寫操作并提供操作完成指示信號,或者完成讀操作并返回讀數(shù)據(jù)以及操作完成指示信號;用戶作為本地總線的主端,在收到上一次讀/寫操作完成指示信號后,才能再次發(fā)起讀/寫操作。3.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述用戶接口與讀寫報文轉(zhuǎn)換模塊提供一個自定義的用戶接口,工作于從端回復(fù)模式;用戶接口由請求開始信號、請求讀寫指示信號、請求起地址信號、請求長度信號、請求寫數(shù)據(jù)信號、請求讀回復(fù)數(shù)據(jù)信號、請求結(jié)束回復(fù)信號組成;所述控制器作為該接口的從端,響應(yīng)用戶通過該接口提供的讀/寫請求,完成寫請求并提供請求結(jié)束回復(fù)信號,或者完成讀請求并返回讀回復(fù)數(shù)據(jù)以及請求結(jié)束回復(fù)信號;用戶作為該接口的主端,在收到上一次讀/寫請求完成回復(fù)信號后,才能再次發(fā)起讀/寫請求。4.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述本地總線接口只支持一次操作執(zhí)行一拍數(shù)據(jù)的讀寫,用戶接口 一次操作支持I至1024任意拍數(shù)據(jù)的連續(xù)讀寫;用戶作為主端發(fā)起I至1024任意拍數(shù)據(jù)的讀/寫請求后,所述控制器參照直接內(nèi)存存取DMA方式執(zhí)行:用戶接口與讀寫報文轉(zhuǎn)換模塊將該請求按照底層DDR接口的突發(fā)長度切割成小粒度的讀/寫請求并下發(fā),當所有小粒度讀/寫請求完成后,產(chǎn)生請求結(jié)束回復(fù)信號,提示主端請求已完成; 用戶作為主端發(fā)起I至1024任意拍數(shù)據(jù)的讀/寫請求后,按照DDR接口模塊設(shè)置的突發(fā)長度進行切包操作,將用戶接口所支持的大數(shù)據(jù)請求切分為底層DDR接口模塊支持的小數(shù)據(jù)請求; 對于用戶寫請求,用戶接口與讀寫報文轉(zhuǎn)換模塊監(jiān)測DDR接口處的執(zhí)行情況,當最后一個寫操作在DDR接口處完成即結(jié)束本次用戶寫請求,返回請求結(jié)束回復(fù)信號; 對于用戶讀請求,檢測用戶接口與讀寫報文轉(zhuǎn)換模塊收到切包時,讀回復(fù)報文; 對于用戶接口,收到的讀回復(fù)報文如果不是最后一個切包讀回復(fù)報文,則將數(shù)據(jù)緩存,當收到最后一個讀回復(fù)報文后,即將緩存數(shù)據(jù)整體上報后,回復(fù)用戶讀請求完成指示信號,以完成本次讀請求。5.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述本地總線接口或用戶接口所轉(zhuǎn)換的讀寫報文分為寫報文、讀報文、讀回復(fù)報文三種類型,三種類型的報文均由64比特幀頭加數(shù)據(jù)域組成,數(shù)據(jù)域最小數(shù)據(jù)單位為32比特;幀頭信息包括報文類型、端口號、切包標號、切包起地址、切包長度;報文類型指示本報文是寫報文、讀報文或讀回復(fù)報文;端口號指示本報文來自本地總線接口或哪一個用戶接口;切包標號標記本報文攜帶本次大數(shù)據(jù)請求中的第幾段數(shù)據(jù),切包標號指示本次讀寫請求切包后的編號;切包數(shù)據(jù)域最小數(shù)據(jù)單位為32比特,是以切包起地址開始的連續(xù)數(shù)據(jù),切包長度指示該數(shù)據(jù)域有多少個32比特有效數(shù)據(jù);切包起地址標記本報文攜帶數(shù)據(jù)的起地址,切包長度標記本報文攜帶數(shù)據(jù)的長度。6.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述讀/寫報文下行仲裁模塊為各上游用戶端口設(shè)置了獨立的通道緩存,用于流量控制;對于先后到達上行端口讀/寫報文,讀/寫報文下行仲裁模塊按照先后順序依次放行;對于同時到達的上行端口讀/寫報文,讀/寫報文下行仲裁模塊按照配置的優(yōu)先級順序執(zhí)行,保證帶寬均勻分配;讀/寫報文下行仲裁模塊的緩存大小為一次寫請求的最大數(shù)據(jù)量,通過本地總線接口 /用戶接口與上游的握手機制保證緩存不溢出;通過切包機制與調(diào)度機制,同時通過流水線調(diào)度機制以及下游豐旲塊的快速執(zhí)彳丁,保證DDR的帶寬利用率。7.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊上游與所例化的各用戶端口與讀寫報文轉(zhuǎn)換模塊相連,下游與讀寫報文與DDR接口轉(zhuǎn)換模塊相連,實現(xiàn)對DDR接口讀回復(fù)數(shù)據(jù)去往本地總線接口或用戶接口的上行選擇;讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊收到下游讀回復(fù)報文后,解析讀回復(fù)報文幀頭,根據(jù)幀頭信息獲知該報文的端口號,根據(jù)端口號與用戶端口的對應(yīng)關(guān)系將讀回復(fù)報文轉(zhuǎn)發(fā)至相應(yīng)的端口 ;讀回復(fù)數(shù)據(jù)報文上行端口選擇模塊是解復(fù)用機制,且上下游端口速率一致,無需設(shè)置緩存。8.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述讀寫報文與DDR接口轉(zhuǎn)換模塊與DDR接口模塊完成了常見的單口 DDR控制器功能,將仲裁后的讀/寫報文順序執(zhí)行;對于用戶寫請求,最后一個切包寫報文完成,讀寫報文與DDR接口轉(zhuǎn)換模塊通知用戶接口與讀寫報文轉(zhuǎn)換模塊,由其回復(fù)用戶寫請求完成指示信號以完成本次寫請求;對于用戶讀請求,讀寫報文與DDR接口轉(zhuǎn)換模塊將讀回復(fù)數(shù)據(jù)按照讀報文的幀頭信息重新組幀成讀回復(fù)報文并上送。9.如權(quán)利要求1所述的高性能多口DDR控制器,其特征在于:所述DDR接口模塊通過調(diào)用FPGA器件廠家提供的DDR IP核實現(xiàn),該IP核將內(nèi)部邏輯的數(shù)據(jù)總線轉(zhuǎn)化為符合DDR標準規(guī)范的DDR總線操作,實現(xiàn)FPGA片內(nèi)邏輯與DDR顆粒的連通,該IP核以硬核方式提供。10.權(quán)利要求1所述的高性能多口DDR控制器的實現(xiàn)方法,其特征在于,包括以下步驟: S1、FPGA內(nèi)部邏輯通過本地總線接口或用戶接口發(fā)起讀/寫命令,F(xiàn)PGA內(nèi)部邏輯作為本地總線接口或用戶接口的主端,均需要等待回復(fù)當前操作完成指示信號,才能發(fā)起下一次操作; S2、將讀/寫命令轉(zhuǎn)換為自定義格式讀/寫報文,其中對于用戶接口與讀寫報文轉(zhuǎn)換模塊,按照DDR接口的突發(fā)長度進行切包操作,將用戶接口所支持的大數(shù)據(jù)請求切分為底層DDR接口模塊支持的小數(shù)據(jù)請求; S3、為各上游端口設(shè)置獨立的通道緩存并對并發(fā)進行仲裁,按上行多端口讀/寫報文到達的先后順序依次執(zhí)行,對于同時到達的上行多端口讀/寫報文則按照可配置的優(yōu)先級順序執(zhí)行;通過握手機制保證緩存不溢出,通過流水線調(diào)度機制以及下游模塊的快速執(zhí)行,保證DDR的帶寬利用率; S4、將仲裁后的讀/寫報文順序執(zhí)行:對于用戶寫請求,最后一個切包寫報文完成,即通知用戶接口與讀寫報文轉(zhuǎn)換模塊,由其回復(fù)用戶寫請求完成指示信號以完成本次寫請求;對于用戶讀請求,將讀回復(fù)數(shù)據(jù)按照讀報文的幀頭信息重新組幀成讀回復(fù)報文并上送; S5、解析讀回復(fù)報文幀頭,根據(jù)幀頭信息將讀回復(fù)報文上送至相應(yīng)的用戶接口; S6、對本地總線接口,收到讀回復(fù)報文即結(jié)束本次讀操作;對于用戶接口,收到的讀回復(fù)報文如果不是最后一個切包讀回復(fù)報文,則將數(shù)據(jù)緩存,當收到最后一個讀回復(fù)報文后,即將緩存數(shù)據(jù)整體上報后,回復(fù)用戶讀請求完成指示信號,以完成本次讀請求。
【文檔編號】G06F13/16GK105868134SQ201610231074
【公開日】2016年8月17日
【申請日】2016年4月14日
【發(fā)明人】韓震
【申請人】烽火通信科技股份有限公司