集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法
【專利摘要】本發(fā)明涉及一種集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法,該集約式數(shù)據(jù)幀隊(duì)列控制器包括用于順序存放所有數(shù)據(jù)幀首地址的FIFO、用于存儲(chǔ)器存放數(shù)據(jù)幀長(zhǎng)度和內(nèi)容的共享存儲(chǔ)資源的雙端口存儲(chǔ)器以及用于實(shí)現(xiàn)數(shù)據(jù)幀隊(duì)列控制管理的專用控制邏輯;專用控制邏輯分別與FIFO以及雙端口存儲(chǔ)器相連。本發(fā)明提供了一種可實(shí)現(xiàn)數(shù)據(jù)幀的緊密存儲(chǔ)排列、可提高有限存儲(chǔ)資源利用率、有效地解決存儲(chǔ)資源的瓶頸問(wèn)題、有利于在現(xiàn)有FPGA芯片基礎(chǔ)上實(shí)現(xiàn)高性能的交換機(jī)和通信接口以及可降低硬件設(shè)計(jì)難度和成本的集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法。
【專利說(shuō)明】集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)控制【技術(shù)領(lǐng)域】,涉及一種集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法,尤其涉及一種對(duì)交換機(jī)和通信節(jié)點(diǎn)中數(shù)據(jù)幀隊(duì)列管理的集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法。
【背景技術(shù)】
[0002]在高速通信系統(tǒng)設(shè)計(jì)中,為了保證系統(tǒng)的傳輸效率和通信服務(wù)質(zhì)量,需要在交換機(jī)、通信節(jié)點(diǎn)中需要采用大量的存儲(chǔ)資源存放數(shù)據(jù)幀以緩解通信接口與上層處理訪問(wèn)速率不匹配。
[0003]通信系統(tǒng)的硬件設(shè)計(jì)往往采用FPGA可編程器件實(shí)現(xiàn),而受芯片工藝限制,F(xiàn)PGA內(nèi)部存儲(chǔ)資源有限,因此FPGA存儲(chǔ)資源成為制約高速通信系統(tǒng)設(shè)計(jì)的瓶頸。
[0004]傳統(tǒng)的數(shù)據(jù)幀存儲(chǔ)管理采用以最大數(shù)據(jù)幀長(zhǎng)為單位,將存儲(chǔ)區(qū)劃分為等長(zhǎng)的存儲(chǔ)塊,構(gòu)成一個(gè)環(huán)形緩沖隊(duì)列。該方法簡(jiǎn)單。傳統(tǒng)的數(shù)據(jù)幀存儲(chǔ)管理采用以最大數(shù)據(jù)幀長(zhǎng)為單位,將存儲(chǔ)區(qū)劃分為等長(zhǎng)的存儲(chǔ)塊,存儲(chǔ)塊從零開(kāi)始,順序編號(hào),構(gòu)成一個(gè)環(huán)形緩沖隊(duì)列。該方法簡(jiǎn)單。但在實(shí)際應(yīng)用過(guò)程中,傳輸?shù)臄?shù)據(jù)幀長(zhǎng)度往往小于最大幀長(zhǎng)度。隊(duì)列中每個(gè)數(shù)據(jù)塊的長(zhǎng)度必須不小于最大數(shù)據(jù)幀的長(zhǎng)度。例如:以太網(wǎng)數(shù)據(jù)幀的取值范圍為64-1518字節(jié),數(shù)據(jù)塊的長(zhǎng)度不能小于1518字節(jié),當(dāng)傳輸?shù)膸L(zhǎng)為64字節(jié)時(shí),該數(shù)據(jù)塊的利用率只有4.2% (64/1518)。因此,傳統(tǒng)的數(shù)據(jù)幀存儲(chǔ)管理對(duì)存儲(chǔ)資源利用率低,設(shè)計(jì)成本高。
【發(fā)明內(nèi)容】
[0005]為了解決【背景技術(shù)】中存在的上述技術(shù)問(wèn)題,本發(fā)明提供了一種可實(shí)現(xiàn)數(shù)據(jù)幀的緊密存儲(chǔ)排列、可提高有限存儲(chǔ)資源利用率、有效地解決存儲(chǔ)資源的瓶頸問(wèn)題、有利于在現(xiàn)有FPGA芯片基礎(chǔ)上實(shí)現(xiàn)高性能的交換機(jī)和通信接口以及可降低硬件設(shè)計(jì)難度和成本的集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法。
[0006]本發(fā)明的技術(shù)解決方案是:本發(fā)明提供了一種集約式數(shù)據(jù)幀隊(duì)列控制器,其特殊之處在于:所述集約式數(shù)據(jù)幀隊(duì)列控制器包括用于順序存放所有數(shù)據(jù)幀首地址的FIFO、用于存儲(chǔ)器存放數(shù)據(jù)幀長(zhǎng)度和內(nèi)容的共享存儲(chǔ)資源的雙端口存儲(chǔ)器以及用于實(shí)現(xiàn)數(shù)據(jù)幀隊(duì)列控制管理的專用控制邏輯;所述專用控制邏輯分別與FIFO以及雙端口存儲(chǔ)器相連。
[0007]上述專用控制邏輯包括用于存放環(huán)形隊(duì)列包括隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr、隊(duì)列長(zhǎng)度QueueLength、最大數(shù)據(jù)巾貞長(zhǎng)Frame_MAXLen的控制寄存器組;
[0008]根據(jù)控制寄存器組中隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr,獲取雙端口存儲(chǔ)器中空閑存儲(chǔ)空間,將數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容寫(xiě)入到雙端口存儲(chǔ)器中,同時(shí)將數(shù)據(jù)幀在雙端口存儲(chǔ)器的首地址寫(xiě)入到FIFO,并調(diào)整隊(duì)列尾地址QueueTailPtr的輸入控制單元;
[0009]以及讀取FIFO中的數(shù)據(jù)幀首地址,根據(jù)數(shù)據(jù)幀首地址從雙端口存儲(chǔ)器中讀取數(shù)據(jù)中貞,并調(diào)整隊(duì)列首地址QueueHeadPtr的輸出控制單元;
[0010]所述輸入控制單元通過(guò)雙端口存儲(chǔ)器接入輸出控制單元;所述控制寄存器組分別與FIFO以及雙端口存儲(chǔ)器相連。
[0011]一種集約式數(shù)據(jù)幀隊(duì)列控制器的控制方法,其特殊之處在于:所述控制方法包括以下步驟:
[0012]I)對(duì)控制寄存器組以及FIFO進(jìn)行初始化;
[0013]2)數(shù)據(jù)幀輸入單元將新收到數(shù)據(jù)幀寫(xiě)入到雙端口存儲(chǔ)器,并將數(shù)據(jù)幀的地址寫(xiě)入到FIFO中;
[0014]3)數(shù)據(jù)幀輸出單元從FIFO中獲取數(shù)據(jù)幀首地址,根據(jù)數(shù)據(jù)首幀從雙端口存儲(chǔ)器讀取數(shù)據(jù)幀的內(nèi)容。
[0015]上述步驟I)的具體實(shí)現(xiàn)方式是:
[0016]1.1)設(shè)置隊(duì)列首地址和隊(duì)列尾地址:將控制寄存器組中的隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr分別設(shè)置為零;
[0017]1.2)設(shè)置隊(duì)列長(zhǎng)度:根據(jù)雙端口存儲(chǔ)器的大小設(shè)置控制寄存器組中隊(duì)列長(zhǎng)度QueueLength ;
[0018]1.3)設(shè)置最大數(shù)據(jù)幀長(zhǎng):按照預(yù)先定義最大幀長(zhǎng),設(shè)置控制寄存器組中最大數(shù)據(jù)中貞長(zhǎng)Frame_MAXLen ;Frame_MAXLen取值為4字節(jié)的整數(shù)倍;
[0019]1.4)對(duì)FIFO進(jìn)行復(fù)位:復(fù)位FIF0,清空FIFO中存放的所有信息。
[0020]上述步驟1.3)中的取值范圍是在32-4096字節(jié)之間。
[0021]上述步驟2)的具體實(shí)現(xiàn)方式是:
[0022]2.1)判斷雙端口存儲(chǔ)器的空滿狀態(tài):若數(shù)據(jù)幀環(huán)形隊(duì)列滿,則直接丟棄該數(shù)據(jù)幀;若否,則執(zhí)行步驟2.2);
[0023]2.2)判斷FIFO狀態(tài):判斷FIFO是否已滿,若FIFO已滿,則直接丟棄該數(shù)據(jù)幀;若否,則執(zhí)行步驟2.3);
[0024]2.3)計(jì)算數(shù)據(jù)幀在存儲(chǔ)單元中首地址:所述數(shù)據(jù)幀在存儲(chǔ)單元中的首地址是雙端口存儲(chǔ)器在邏輯上構(gòu)成一個(gè)數(shù)據(jù)巾貞環(huán)形隊(duì)列的尾地址QueueTailPtr ;
[0025]2.4)將數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容寫(xiě)入數(shù)據(jù)幀首地址對(duì)應(yīng)的存儲(chǔ)單元中;
[0026]2.5)將數(shù)據(jù)幀首地址寫(xiě)入到FIFO中:
[0027]2.6)調(diào)整隊(duì)列尾地址 QueueTailPtr,所述 QueueTailPtr 是 QueueTailPtr 與Frame_Len之和,判斷新的QueueTailPtr后續(xù)存儲(chǔ)區(qū)域是否還能存放一個(gè)最大數(shù)據(jù)巾貞,當(dāng)(QueueTailPtr+Frame_MAXLen) %QueueLength 小于 QueueTailPtr 成立,表不隊(duì)列尾地址QueueTailPtr已到雙端口存儲(chǔ)器的尾端,則設(shè)置隊(duì)列尾地址QueueTailPtr為零。
[0028]上述步驟2.1)中雙端口存儲(chǔ)器在邏輯上構(gòu)成一個(gè)數(shù)據(jù)幀環(huán)形隊(duì)列,所述數(shù)據(jù)幀環(huán)形隊(duì)列判斷為滿的條件是:(QueueTailPtr+2*Frame_MAXLen)%QueueLength>=QueueHeadPtr。
[0029]上述步驟3)的具體實(shí)現(xiàn)方式是:
[0030]3.1)判斷FIFO的狀態(tài),若FIFO為空,則雙端口存儲(chǔ)器無(wú)新的數(shù)據(jù)幀,直接返回;若否,則執(zhí)行步驟3.2);
[0031]3.2)從FIFO中讀取數(shù)據(jù)巾貞首地址Frame_Addr ;[0032]3.3)根據(jù)數(shù)據(jù)幀首地址,從雙口存儲(chǔ)器的數(shù)據(jù)幀首地址處讀取前四字節(jié)作為數(shù)據(jù)幀的長(zhǎng)度Frame_Len,根據(jù)數(shù)據(jù)幀的長(zhǎng)度,從雙口存儲(chǔ)器的數(shù)據(jù)幀首地址Frame_Addr+4處讀取數(shù)據(jù)幀的內(nèi)容;
[0033]3.4)調(diào)整環(huán)形隊(duì)列的隊(duì)列首地址QueueHeadPtr,將QueueHeadPtr設(shè)置為Frame_Addr0
[0034]本發(fā)明提出一種集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法,該集約式數(shù)據(jù)幀隊(duì)列控制器采用FIFO+雙端口存儲(chǔ)器+專用控制邏輯,構(gòu)造一個(gè)鏈?zhǔn)浇Y(jié)構(gòu)的共享存儲(chǔ)體,實(shí)現(xiàn)支持變長(zhǎng)、集約式數(shù)據(jù)幀隊(duì)列控制器電路。其中雙端口用于存儲(chǔ)器存放數(shù)據(jù)幀的內(nèi)容,邏輯上構(gòu)成一個(gè)的環(huán)形隊(duì)列;FIF0用于順序存放所有數(shù)據(jù)幀首地址。數(shù)據(jù)幀首地址表示該數(shù)據(jù)幀在雙端口存儲(chǔ)器中的偏移地址。專用控制邏輯實(shí)現(xiàn)數(shù)據(jù)幀隊(duì)列控制管理。專用控制邏輯包括控制寄存器組、輸入控制單元和輸出控制單元。輸入控制單元和輸出控制單元分別在雙端口存儲(chǔ)器和FIFO兩端操作,收到數(shù)據(jù)幀時(shí),輸入控制將數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容寫(xiě)入到雙端口存儲(chǔ)器中,將雙端口存儲(chǔ)器存放數(shù)據(jù)幀首地址寫(xiě)入到FIFO中。輸出控制負(fù)責(zé)從FIFO讀取數(shù)據(jù)幀索引信息,根據(jù)數(shù)據(jù)幀首地址從雙端口存儲(chǔ)器中讀取數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容。該集約式數(shù)據(jù)幀隊(duì)列控制器的控制方法采用鏈?zhǔn)酱鎯?chǔ)和環(huán)形隊(duì)列管理等策略實(shí)現(xiàn)一種集約式數(shù)據(jù)幀隊(duì)列管理。本發(fā)明所提供的集約式數(shù)據(jù)幀隊(duì)列控制器及控制方法按照單個(gè)數(shù)據(jù)幀的實(shí)際長(zhǎng)度分配存儲(chǔ)空間,實(shí)現(xiàn)數(shù)據(jù)幀的緊密存儲(chǔ)排列,提高了有限存儲(chǔ)資源利用率,有效地解決存儲(chǔ)資源的瓶頸問(wèn)題,有利于在現(xiàn)有FPGA芯片基礎(chǔ)上實(shí)現(xiàn)高性能的交換機(jī)和通信接口,降低硬件設(shè)計(jì)難度和成本,保證了通信系統(tǒng)具有很好傳輸服務(wù)質(zhì)量。另外,該集約式隊(duì)列數(shù)據(jù)幀隊(duì)列管理控制器實(shí)現(xiàn)簡(jiǎn)單、可擴(kuò)展性強(qiáng)、訪問(wèn)延遲小。采用硬件電路實(shí)現(xiàn)一種集約式數(shù)據(jù)幀隊(duì)列控制器。具體而言,本發(fā)明具有如下優(yōu)點(diǎn):
[0035]資源利用率高:采用鏈?zhǔn)酱鎯?chǔ)器管理策略,實(shí)現(xiàn)了數(shù)據(jù)幀緊密存儲(chǔ)排列,提高了存儲(chǔ)資源利用率,減少系統(tǒng)設(shè)計(jì)對(duì)存儲(chǔ)資源需求。
[0036]傳輸效率高:采用硬件電路數(shù)據(jù)幀隊(duì)列控制管理,滿足通信高速傳輸要求。
[0037]可擴(kuò)展性強(qiáng):數(shù)據(jù)幀隊(duì)列控制器的存儲(chǔ)器的最大長(zhǎng)度、數(shù)據(jù)幀的最大長(zhǎng)度可配置,使用靈活,具有很好的可擴(kuò)展性。
[0038]設(shè)計(jì)難度小:有效提高單芯片內(nèi)通信系統(tǒng)設(shè)計(jì)規(guī)模,系統(tǒng)內(nèi)部互連實(shí)現(xiàn)簡(jiǎn)單,保證通信系統(tǒng)具有很好傳輸服務(wù)質(zhì)量,降低通信系統(tǒng)設(shè)計(jì)難度。
【專利附圖】
【附圖說(shuō)明】
[0039]圖1是本發(fā)明所提供的集約式數(shù)據(jù)幀隊(duì)列控制器的結(jié)構(gòu)框圖;
[0040]圖2是本發(fā)明所提供的集約式數(shù)據(jù)隊(duì)列管理控制器工作原理圖。
【具體實(shí)施方式】
[0041]參見(jiàn)圖1,集約式數(shù)據(jù)隊(duì)列控制器基于雙端口存儲(chǔ)器和FIFO,采用鏈?zhǔn)焦芾斫Y(jié)構(gòu)進(jìn)行數(shù)據(jù)幀的緊密排列,基于FPGA設(shè)計(jì)實(shí)現(xiàn)一種數(shù)據(jù)幀隊(duì)列管理控制電路。該電路由輸入控制單元、輸出控制單元、雙端口存儲(chǔ)器、FIFO、控制寄存器組五部分組成。
[0042]其中:
[0043]雙端口存儲(chǔ)器:用于存放數(shù)據(jù)幀長(zhǎng)度和內(nèi)容的共享存儲(chǔ)資源。[0044]FIFO:用于存放數(shù)據(jù)幀首地址,數(shù)據(jù)幀地址表示該數(shù)據(jù)在雙端口存儲(chǔ)器中的偏移地址。FIFO采用一個(gè)先進(jìn)先出策略實(shí)現(xiàn)多個(gè)數(shù)據(jù)幀地址的順序存儲(chǔ)。
[0045]控制寄存器組:用于存放環(huán)形隊(duì)列包括隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr、隊(duì)列長(zhǎng)度QueueLength、最大數(shù)據(jù)巾貞長(zhǎng)Frame_MAXLen??刂齐p端口存儲(chǔ)器的訪問(wèn),雙端口存儲(chǔ)器從邏輯上構(gòu)成一個(gè)環(huán)形緩沖區(qū)。
[0046]輸入控制單元:根據(jù)控制寄存器組中隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr,獲取雙端口存儲(chǔ)器中空閑存儲(chǔ)空間,將數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容寫(xiě)入到雙端口存儲(chǔ)器中,同時(shí)將數(shù)據(jù)幀在雙端口存儲(chǔ)器的首地址寫(xiě)入到FIF O,并調(diào)整隊(duì)列尾地址QueueTailPtr ;
[0047]輸出控制單元:讀取FIFO中的數(shù)據(jù)幀首地址,根據(jù)數(shù)據(jù)幀首地址從雙端口存儲(chǔ)器中讀取數(shù)據(jù)巾貞,并調(diào)整隊(duì)列首地址QueueHeadPtr。
[0048]參見(jiàn)圖2,本發(fā)明在提供上述控制器的同時(shí),還提供了一種基于該控制器的控制方法,該方法主要分為三個(gè)步驟:初始化、數(shù)據(jù)幀輸入、數(shù)據(jù)幀輸出。
[0049]其中:
[0050]1.初始化時(shí),控制器需要初始化控制寄存器組和FIFO。將雙端口存儲(chǔ)器邏輯上構(gòu)成一個(gè)環(huán)形緩沖區(qū)。初始化具體過(guò)程如下。
[0051]1.1)設(shè)置隊(duì)列首地址和隊(duì)列尾地址:將控制寄存器組中的隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr分別設(shè)置為零;
[0052]1.2)設(shè)置隊(duì)列長(zhǎng)度:根據(jù)雙端口存儲(chǔ)器大小設(shè)置控制寄存器組中隊(duì)列長(zhǎng)度QueueLength ;
[0053]1.3)設(shè)置最大數(shù)據(jù)幀長(zhǎng):按照用戶預(yù)先定義最大幀長(zhǎng),設(shè)置控制寄存器組中最大數(shù)據(jù)幀長(zhǎng)Frame_MAXLen ;Frame_MAXLen取值為4字節(jié)的整數(shù)倍,典型取值范圍在32-4096字節(jié)之間。
[0054]1.4)復(fù)位FIFO:復(fù)位FIF0,清空FIFO中存放的所有信息。
[0055]2.數(shù)據(jù)幀輸入:數(shù)據(jù)幀輸入單元負(fù)責(zé)將新收到數(shù)據(jù)幀寫(xiě)入到雙端口存儲(chǔ)器,并將數(shù)據(jù)幀的地址寫(xiě)入到FIFO中,具體流程如下:
[0056]2.1)判斷雙端口存儲(chǔ)器空滿狀態(tài):雙端口存儲(chǔ)器在邏輯上構(gòu)成一個(gè)數(shù)據(jù)幀環(huán)形隊(duì)列,數(shù)據(jù)巾貞環(huán)形隊(duì)列判斷為滿的條件為:(QueueTailPtr+2*Frame_MAXLen)%QueueLength>=QueueHeadPtr。若數(shù)據(jù)幀環(huán)形隊(duì)列滿,則直接丟棄該數(shù)據(jù)幀,否則進(jìn)入到步驟2.2);
[0057]2.2)判斷FIFO狀態(tài):判斷FIFO是否已滿,若FIFO已滿,則直接丟棄該數(shù)據(jù)幀,否則進(jìn)入到步驟2.3);
[0058]2.3)計(jì)算數(shù)據(jù)幀在存儲(chǔ)單元中首地址:雙端口存儲(chǔ)器在邏輯上構(gòu)成一個(gè)數(shù)據(jù)幀環(huán)形隊(duì)列,隊(duì)列尾地址QueueTailPtr即新數(shù)據(jù)巾貞在存儲(chǔ)單元的首地址;
[0059]2.4)數(shù)據(jù)幀寫(xiě)入到存儲(chǔ)單元:將數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容寫(xiě)入數(shù)據(jù)幀首地址對(duì)應(yīng)的存儲(chǔ)單元中;
[0060]2.5)將數(shù)據(jù)幀首地址寫(xiě)入到FIFO中:將數(shù)據(jù)幀首地址寫(xiě)入到FIFO中。
[0061 ] 2.6 )調(diào)整數(shù)據(jù)幀環(huán)形隊(duì)列的隊(duì)列尾地址:調(diào)整隊(duì)列尾地址QueueTai IPtr,QueueTaiIPtr=QueueTailPtr+Frame_Len,判斷新的 QueueTailPtr 后續(xù)存儲(chǔ)區(qū)域是否還能存放一個(gè)最大數(shù)據(jù)巾貞,當(dāng)條件(QueueTai lPtr+Frame_MAXLen ) %QueueLength<QueueTai IPtr成立,表示隊(duì)列尾地址QueueTailPtr已到雙端口存儲(chǔ)器的尾端,則設(shè)置隊(duì)列尾地址QueueTailPtr 為零。
[0062]3、數(shù)據(jù)幀輸出:數(shù)據(jù)幀輸出單元負(fù)責(zé)從FIFO中獲取數(shù)據(jù)幀首地址,根據(jù)數(shù)據(jù)首幀從雙端口存儲(chǔ)器讀取數(shù)據(jù)幀的內(nèi)容,具體流程如下:
[0063]3.1)判斷FIFO狀態(tài):判斷FIFO的狀態(tài),若FIFO為空,表明雙端口存儲(chǔ)器無(wú)新的數(shù)據(jù)幀,直接返回,否則進(jìn)入到步驟3.2);
[0064]3.2)獲取數(shù)據(jù)幀首地址:從FIFO中讀取數(shù)據(jù)幀首地址Frame_Addr ;
[0065]3.3)讀取數(shù)據(jù)幀的內(nèi)容:根據(jù)數(shù)據(jù)幀首地址,從雙口存儲(chǔ)器的數(shù)據(jù)幀首地址處讀取前四字節(jié)作為數(shù)據(jù)幀的長(zhǎng)度Frame_Len,根據(jù)數(shù)據(jù)幀的長(zhǎng)度,從雙口存儲(chǔ)器的數(shù)據(jù)幀首地址Frame_Addr+4處讀取數(shù)據(jù)巾貞的內(nèi)容;
[0066]3.4)調(diào)整數(shù)據(jù)幀環(huán)形隊(duì)列的隊(duì)列首地址:調(diào)整環(huán)形隊(duì)列的隊(duì)列首地址QueueHeadPtr,將 QueueHeadPtr 設(shè)置為 Frame_Addr。
【權(quán)利要求】
1.一種集約式數(shù)據(jù)幀隊(duì)列控制器,其特征在于:所述集約式數(shù)據(jù)幀隊(duì)列控制器包括用于順序存放所有數(shù)據(jù)幀首地址的FIFO、用于存儲(chǔ)器存放數(shù)據(jù)幀長(zhǎng)度和內(nèi)容的共享存儲(chǔ)資源的雙端口存儲(chǔ)器以及用于實(shí)現(xiàn)數(shù)據(jù)幀隊(duì)列控制管理的專用控制邏輯;所述專用控制邏輯分別與FIFO以及雙端口存儲(chǔ)器相連。
2.根據(jù)權(quán)利要求1所述的集約式數(shù)據(jù)幀隊(duì)列控制器,其特征在于:所述專用控制邏輯包括用于存放環(huán)形隊(duì)列包括隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr、隊(duì)列長(zhǎng)度QueueLength、最大數(shù)據(jù)幀長(zhǎng)Frame_MAXLen的控制寄存器組; 根據(jù)控制寄存器組中隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr,獲取雙端口存儲(chǔ)器中空閑存儲(chǔ)空間,將數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容寫(xiě)入到雙端口存儲(chǔ)器中,同時(shí)將數(shù)據(jù)幀在雙端口存儲(chǔ)器的首地址寫(xiě)入到FIFO,并調(diào)整隊(duì)列尾地址QueueTailPtr的輸入控制單元; 以及讀取FIFO中的數(shù)據(jù)幀首地址,根據(jù)數(shù)據(jù)幀首地址從雙端口存儲(chǔ)器中讀取數(shù)據(jù)幀,并調(diào)整隊(duì)列首地址QueueHeadPtr的輸出控制單元; 所述輸入控制單元通過(guò)雙端口存儲(chǔ)器接入輸出控制單元;所述控制寄存器組分別與FIFO以及雙端口存儲(chǔ)器相連。
3.根據(jù)權(quán)利要求2所述的集約式數(shù)據(jù)幀隊(duì)列控制器的控制方法,其特征在于:所述控制方法包括以下步驟: 1)對(duì)控制寄存器組以及FIFO進(jìn)行初始化; 2)數(shù)據(jù)幀輸入單元將新收到數(shù)據(jù)幀寫(xiě)入到雙端口存儲(chǔ)器,并將數(shù)據(jù)幀的地址寫(xiě)入到FIFO 中; 3)數(shù)據(jù)幀輸出單元從FIFO中獲取數(shù)據(jù)幀首地址,根據(jù)數(shù)據(jù)首幀從雙端口存儲(chǔ)器讀取數(shù)據(jù)幀的內(nèi)容。
4.根據(jù)權(quán)利要求3所述的控制方法,其特征在于:所述步驟I)的具體實(shí)現(xiàn)方式是: .1.1)設(shè)置隊(duì)列首地址和隊(duì)列尾地址:將控制寄存器組中的隊(duì)列首地址QueueHeadPtr、隊(duì)列尾地址QueueTailPtr分別設(shè)置為零; .1.2)設(shè)置隊(duì)列長(zhǎng)度:根據(jù)雙端口存儲(chǔ)器的大小設(shè)置控制寄存器組中隊(duì)列長(zhǎng)度QueueLength ; .1.3)設(shè)置最大數(shù)據(jù)幀長(zhǎng):按照預(yù)先定義最大幀長(zhǎng),設(shè)置控制寄存器組中最大數(shù)據(jù)幀長(zhǎng)Frame_MAXLen ;Frame_MAXLen取值為4字節(jié)的整數(shù)倍; .1.4)對(duì)FIFO進(jìn)行復(fù)位:復(fù)位FIFO,清空FIFO中存放的所有信息。
5.根據(jù)權(quán)利要求4所述的控制方法,其特征在于:所述步驟1.3)中的取值范圍是在32-4096字節(jié)之間。
6.根據(jù)權(quán)利要求4或5所述的控制方法,其特征在于:所述步驟2)的具體實(shí)現(xiàn)方式是: . 2.1)判斷雙端口存儲(chǔ)器的空滿狀態(tài):若數(shù)據(jù)幀環(huán)形隊(duì)列滿,則直接丟棄該數(shù)據(jù)幀;若否,則執(zhí)行步驟2.2); . 2.2)判斷FIFO狀態(tài):判斷FIFO是否已滿,若FIFO已滿,則直接丟棄該數(shù)據(jù)幀;若否,則執(zhí)行步驟2.3); . 2.3)計(jì)算數(shù)據(jù)幀在存儲(chǔ)單元中首地址:所述數(shù)據(jù)幀在存儲(chǔ)單元中的首地址是雙端口存儲(chǔ)器在邏輯上構(gòu)成一個(gè)數(shù)據(jù)幀環(huán)形隊(duì)列的尾地址QueueTailPtr ; .2.4)將數(shù)據(jù)幀的長(zhǎng)度和內(nèi)容寫(xiě)入數(shù)據(jù)幀首地址對(duì)應(yīng)的存儲(chǔ)單元中;.2.5)將數(shù)據(jù)幀首地址寫(xiě)入到FIFO中: 2.6)調(diào)整隊(duì)列尾地址 QueueTailPtr,所述 QueueTailPtr 是 QueueTailPtr 與 Frame_Len之和,判斷新的QueueTailPtr后續(xù)存儲(chǔ)區(qū)域是否還能存放一個(gè)最大數(shù)據(jù)幀,當(dāng)(QueueTailPtr+Frame_MAXLen) %QueueLength 小于 QueueTailPtr 成立,表不隊(duì)列尾地址QueueTailPtr已到雙端口存儲(chǔ)器的尾端,則設(shè)置隊(duì)列尾地址QueueTailPtr為零。
7.根據(jù)權(quán)利要求6所述的控制方法,其特征在于:所述步驟2.1)中雙端口存儲(chǔ)器在邏輯上構(gòu)成一個(gè)數(shù)據(jù)幀環(huán)形隊(duì)列,所述數(shù)據(jù)幀環(huán)形隊(duì)列判斷為滿的條件是:(QueueTai lPtr+2*Frame_MAXLen) %QueueLength>=QueueHeadPtr。
8.根據(jù)權(quán)利要求7所述的控制方法,其特征在于:所述步驟3)的具體實(shí)現(xiàn)方式是: .3.1)判斷FIFO的狀態(tài),若FIFO為空,則雙端口存儲(chǔ)器無(wú)新的數(shù)據(jù)幀,直接返回;若否,則執(zhí)行步驟3.2); .3.2)從FIFO中讀取數(shù)據(jù)幀首地址Frame_Addr ; .3.3)根據(jù)數(shù)據(jù)幀首地址,從雙口存儲(chǔ)器的數(shù)據(jù)幀首地址處讀取前四字節(jié)作為數(shù)據(jù)幀的長(zhǎng)度Frame_Len,根據(jù)數(shù)據(jù)幀的長(zhǎng)度,從雙口存儲(chǔ)器的數(shù)據(jù)幀首地址Frame_Addr+4處讀取數(shù)據(jù)幀的內(nèi)容; . 3.4)調(diào)整環(huán)形隊(duì)列的隊(duì) 列首地址QueueHeadPtr,將QueueHeadPtr設(shè)置為Frame_Addr。
【文檔編號(hào)】G06F5/01GK103902249SQ201210574664
【公開(kāi)日】2014年7月2日 申請(qǐng)日期:2012年12月26日 優(yōu)先權(quán)日:2012年12月26日
【發(fā)明者】王紅春, 牛文生, 黃韜, 邱征 申請(qǐng)人:中國(guó)航空工業(yè)集團(tuán)公司第六三一研究所