專利名稱:通信系統(tǒng)消息分類輸出方法及控制器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)硬件技術(shù),涉及交換機(jī)和通信節(jié)點(diǎn)中消息隊(duì)列管理的硬件電路 實(shí)現(xiàn)方法。
背景技術(shù):
在高速通信系統(tǒng)設(shè)計(jì)中,為了保證系統(tǒng)的傳輸效率、通信服務(wù)質(zhì)量、消息通信傳輸 確定性、帶寬隔離以及消息傳輸效率,需要在通信節(jié)點(diǎn)中構(gòu)建多優(yōu)先級(jí)隊(duì)列,交換機(jī)中則需 要構(gòu)建虛擬輸出隊(duì)列,而這些隊(duì)列的實(shí)現(xiàn)需要大量的存儲(chǔ)器資源。通信調(diào)度管理必須基于消息的分類存儲(chǔ)實(shí)現(xiàn),而在傳統(tǒng)通信系統(tǒng)中為每個(gè)消息固 定分配存儲(chǔ)空間,存儲(chǔ)資源利用率不夠。在交換機(jī)和通信節(jié)點(diǎn)的硬件往往受限于FPGA的存 儲(chǔ)資源,難以實(shí)現(xiàn)大規(guī)模交換和消息確定性調(diào)度,F(xiàn)PGA的存儲(chǔ)資源已經(jīng)成為制約通信系統(tǒng) 規(guī)模和通信帶寬的瓶頸。傳統(tǒng)的消息隊(duì)列存儲(chǔ)管理中每個(gè)隊(duì)列采用獨(dú)立存儲(chǔ)器分配,每個(gè)隊(duì)列需要分配固 定的存儲(chǔ)器資源。例如交換機(jī)設(shè)計(jì)時(shí),為了避免鏈頭堵塞,滿足線速傳輸要求,每個(gè)輸入端 口需要針對(duì)每一個(gè)輸出端口建立一組FIFO隊(duì)列。通信節(jié)點(diǎn)設(shè)計(jì)中,需要為每個(gè)優(yōu)先級(jí)分配 一組FIFO。該方法對(duì)存儲(chǔ)資源需求量大,且利用率不高,F(xiàn)PGA實(shí)現(xiàn)難度大,成本高。
發(fā)明內(nèi)容
本發(fā)明提供一種通信系統(tǒng)消息分類輸出方法及控制器,主要解決了現(xiàn)有方法及控 制器對(duì)存儲(chǔ)資源需求量大、利用率低、實(shí)現(xiàn)難度大、成本高的問(wèn)題。本發(fā)明的技術(shù)解決方案如下該通信系統(tǒng)消息分類輸出方法包括以下步驟1]系統(tǒng)初始化1. 1]存儲(chǔ)單元?jiǎng)澐?. 1. 1]存儲(chǔ)單元為用于存放消息的一片存儲(chǔ)區(qū)域,邏輯上劃分為多個(gè)等長(zhǎng)的消息 存儲(chǔ)塊,每個(gè)消息存儲(chǔ)塊區(qū)可存放一條消息;1. 1. 2]每個(gè)消息存儲(chǔ)塊按照順序從0開(kāi)始編號(hào);1. 1. 3]每個(gè)消息存儲(chǔ)塊編號(hào)與消息存儲(chǔ)單元地址建立對(duì)應(yīng)關(guān)系;1.2]消息屬性表初始化建立一個(gè)內(nèi)容關(guān)聯(lián)存儲(chǔ)器CAM表,提供消息屬性表用以構(gòu)建消息標(biāo)識(shí)到消息輸出 隊(duì)列索引的映射關(guān)系;1. 3]空閑消息塊索引表初始化1.3. 1]建立一個(gè)空閑索引隊(duì)列,隊(duì)列深度與消息存儲(chǔ)塊數(shù)目相等,隊(duì)列中單元用 于存放消息編號(hào),隊(duì)列支持?jǐn)?shù)據(jù)讀、寫(xiě)操作,并提供隊(duì)列空、滿標(biāo)記;1. 3. 2]將所有的消息存儲(chǔ)塊編號(hào)加入到空閑消息緩沖塊索引隊(duì)列;1.4]消息查找表初始化
消息查找表為一個(gè)二維索引表,二維索引表地址和內(nèi)容分別對(duì)應(yīng)當(dāng)前消息存儲(chǔ)塊 編號(hào)和下一個(gè)消息存儲(chǔ)塊編號(hào),以當(dāng)前消息存儲(chǔ)塊編號(hào)作為地址查找二維索引表的內(nèi)容即 為下一個(gè)消息存儲(chǔ)塊編號(hào),而當(dāng)某個(gè)消息的下一個(gè)消息塊與該消息存儲(chǔ)塊編號(hào)相同,則標(biāo) 識(shí)該消息塊為消息虛擬輸出隊(duì)列的隊(duì)尾;1. 5]輸出控制表初始化輸出控制表分別記錄所有輸出隊(duì)列的消息塊個(gè)數(shù)和隊(duì)頭消息存儲(chǔ)塊編號(hào),系統(tǒng)初 始化時(shí)將每個(gè)輸出隊(duì)列的消息塊個(gè)數(shù)置0,代表輸出隊(duì)列為空;2]消息的寫(xiě)入過(guò)程將消息寫(xiě)入到空閑的消息存儲(chǔ)塊中,并根據(jù)消息的標(biāo)識(shí),更新輸出控制表中對(duì)應(yīng) 輸出隊(duì)列信息以及消息查找表;3]消息讀取過(guò)程從虛擬輸出隊(duì)列中讀取消息,輸出控制可采取公平輪轉(zhuǎn)調(diào)度算法或,輸出控制主 要按照輸出鏈表實(shí)現(xiàn)分類輸出訪問(wèn),輸出隊(duì)列個(gè)數(shù)可配置,典型個(gè)數(shù)為2-256個(gè)。輸出控 制輸出隊(duì)列深度可配置,典型值為4、8、16。以上所述步驟2具體是a接收到消息,判斷空閑索引隊(duì)列是否空,如果空閑索引隊(duì)列為空,表示沒(méi)有空閑 的存儲(chǔ)塊,則直接丟棄該消息返回,否則進(jìn)入b ;b.從空閑消息塊索引表預(yù)取第一個(gè)空閑的存儲(chǔ)塊編號(hào)MsgBlockNo ;c.計(jì)算空閑存儲(chǔ)塊的存儲(chǔ)單元地址,計(jì)算公式=MsgBlockAddr = MsgMaxLen^MsgBlockNo ;d.空閑存儲(chǔ)塊中預(yù)留前4個(gè)字節(jié)用于存放消息長(zhǎng)度,從MsgBlockAddr+4的地址存 放消息的內(nèi)容,將消息寫(xiě)入到空閑存儲(chǔ)塊中,并進(jìn)行消息長(zhǎng)度計(jì)數(shù),待消息接收完后,將消 息長(zhǎng)度寫(xiě)入到空閑存儲(chǔ)塊前4個(gè)字節(jié)處;e.解析消息標(biāo)識(shí),根據(jù)消息標(biāo)識(shí)查消息屬性表,如果命中,則獲取輸出隊(duì)列編號(hào), 否則丟棄該消息,進(jìn)入a;f.根據(jù)輸出隊(duì)列編號(hào)查找控制表對(duì)應(yīng)消息個(gè)數(shù),Π如果消息個(gè)數(shù)等于系統(tǒng)設(shè)置的輸出隊(duì)列的消息塊最大個(gè)數(shù)時(shí),則進(jìn)入丟棄該消 息,進(jìn)入a ;f2如果消息個(gè)數(shù)為0,則將消息個(gè)數(shù)置1,從空閑消息塊索引表取出該空閑的存 儲(chǔ)塊編號(hào)MsgBlockNo,將存儲(chǔ)塊編號(hào)MsgBlockNo作為該輸出隊(duì)列的隊(duì)頭;將消息查找表 MsgBlockNo 處寫(xiě)入 MsgBlockNo,代表 MsgBlockNo 為隊(duì)尾;f3如果消息個(gè)數(shù)不為0,則將消息個(gè)數(shù)加1,從該輸出隊(duì)列隊(duì)頭存儲(chǔ)塊編號(hào),通過(guò) 消息查找表獲取下一個(gè)存儲(chǔ)塊編號(hào),直到找到隊(duì)尾MsgTailBlockNo ;h.經(jīng)f2與f3步驟處理后,從空閑消息塊索引表取出該空閑的存儲(chǔ)塊編號(hào) MsgBlockNo,將消息查找表 MsgBlockNo 處寫(xiě)入 MsgBlockNo,代表 MsgBlockNo 為隊(duì)尾; 將MsgTailBlockNo處寫(xiě)入MsgBlockNo,代表MsgTailBlockNo存儲(chǔ)塊的下一個(gè)存儲(chǔ)塊為 MsgBlockNo,從而將消息加入到該輸出隊(duì)列的隊(duì)尾。以上所述的步驟2的f,查找下一個(gè)存儲(chǔ)塊編號(hào)是以當(dāng)前存儲(chǔ)塊編號(hào)作為地址讀 取消息查找表內(nèi)容MsgNextBlockNo,MsgNextBlockNo為下一個(gè)存儲(chǔ)塊編號(hào);判斷隊(duì)尾的依
6據(jù)是當(dāng)前消息塊編號(hào)的下一個(gè)存儲(chǔ)塊編號(hào)為其本身,即消息查找表的內(nèi)容與其地址相等。以上所述所述步驟3具體是判斷虛擬輸出隊(duì)列中消息個(gè)數(shù)是否為0,如果為0,則 退出;從虛擬輸出隊(duì)列中獲取隊(duì)頭存儲(chǔ)塊編號(hào)MsgBlockNo ;根據(jù)隊(duì)頭存儲(chǔ)塊編號(hào)計(jì)算存儲(chǔ) 塊的存儲(chǔ)單元地址,計(jì)算公式:MsgBlockaddr = MsgMaxLen^MsgBlockNo ;從 MsgBlockaddr 前4個(gè)字節(jié)用于存放消息長(zhǎng)度;從MsgBlockaddr+4的地址讀取消息的內(nèi)容;從消息查找表 查找MsgBlockNo的下一個(gè)存儲(chǔ)塊編號(hào)MsgNextBlockNo ;將虛擬輸出隊(duì)列的消息個(gè)數(shù)減1, 將下一個(gè)存儲(chǔ)塊編號(hào)MsgNextBlockNo置為當(dāng)前虛擬輸出隊(duì)列的隊(duì)頭。以上所述所述步驟1. 1. 1中,消息存儲(chǔ)塊區(qū)大小(MsgMaxLen)取值為2η字節(jié), 64到4Κ字節(jié);所述步驟1. 1. 2中,消息存儲(chǔ)塊編號(hào)標(biāo)記為MsgBlockNo ;所述步驟1. 1. 3 中,消息存儲(chǔ)塊地址MsgBlockAddr是根據(jù)消息存儲(chǔ)塊編號(hào)MsgBlockNo以及消息最大長(zhǎng)度 MsgMaxLen確定;所述步驟1. 5中,輸出隊(duì)列的消息塊最大個(gè)數(shù)由系統(tǒng)設(shè)置,典型值為4、8、 16。該通信系統(tǒng)消息分類輸出控制器,包括輸入控制單元、存儲(chǔ)器單元、輸出控制單 元、消息屬性表單元、空閑消息塊索引表單元、消息查找表單元、輸出控制表單元;所述輸入 控制單元的輸入端分別與輸入信號(hào)、消息屬性表單元的輸出端、空閑消息塊索引表單元的 輸出端連接,輸入控制單元的輸出端分別與存儲(chǔ)器單元、消息查找表單元的輸入端、輸出控 制表單元的輸入端連接;所述存儲(chǔ)器單元的輸入端與輸入控制單元的輸出端連接,存儲(chǔ)器 單元的輸出端與輸出控制單元的輸入端連接;所述輸出控制單元的輸入端分別與存儲(chǔ)器單 元的輸出端、消息屬性表單元、輸出控制表單元的輸出端連接;輸出控制單元的輸出端與輸 出信號(hào)連接;所述消息屬性表的輸入端與輸入信號(hào)連接。以上所述存儲(chǔ)器單元為雙端口存儲(chǔ)器。本發(fā)明的優(yōu)點(diǎn)如下本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器,采用鏈?zhǔn)浇Y(jié)構(gòu)共享存儲(chǔ)管理 機(jī)制,有效地提高了存儲(chǔ)器資源利用率,降低硬件設(shè)計(jì)難度和成本,提升了單芯片設(shè)計(jì)規(guī) 模,保證了通信系統(tǒng)具有很好傳輸服務(wù)質(zhì)量。本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器,基于有限存儲(chǔ)資源,采用共 享存儲(chǔ)資源的消息隊(duì)列管理機(jī)制,實(shí)現(xiàn)消息分類輸出控制器,有效地解決存儲(chǔ)資源的瓶頸 問(wèn)題,有利于在現(xiàn)有FPGA芯片基礎(chǔ)上實(shí)現(xiàn)更大規(guī)模交換以及更確定性的消息調(diào)度。本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器傳輸效率高,采用硬件電路實(shí) 現(xiàn)消息隊(duì)列管理控制、滿足通信高速傳輸要求。本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器資源開(kāi)銷小在共享存儲(chǔ)器基 礎(chǔ)上,采用鏈?zhǔn)焦芾砉芾恚岣吡舜鎯?chǔ)資源利用率,減少系統(tǒng)設(shè)計(jì)對(duì)存儲(chǔ)資源需求。本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器調(diào)度算法靈活,消息隊(duì)列管理 控制器采用消息的分類輸出,可支持各種調(diào)度算法實(shí)現(xiàn)。本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器設(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ì)難度。本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器靈活性好,消息隊(duì)列管理控制 器分類的輸出端口個(gè)數(shù)可配置,輸出隊(duì)列深度可配置,具有很好的靈活性。
圖1是消息分類輸出控制器功能框圖;圖2是消息鏈?zhǔn)焦芾硎疽鈭D。
具體實(shí)施例方式本發(fā)明的原理如下在網(wǎng)絡(luò)交換機(jī)或通信節(jié)點(diǎn)硬件設(shè)計(jì)中,通信系統(tǒng)消息分類輸出控制器采用共享存 儲(chǔ)和鏈表管理方式,實(shí)現(xiàn)消息分類存儲(chǔ)和檢索。采用共享存儲(chǔ)單元用作消息存儲(chǔ),用于存放消息共享存儲(chǔ)單元為一片連續(xù)的存儲(chǔ) 區(qū)域,邏輯上劃分為多個(gè)等長(zhǎng)的消息存儲(chǔ)塊,按照順序進(jìn)行編號(hào),每個(gè)消息存儲(chǔ)塊區(qū)可存放 一條消息。在系統(tǒng)初始化時(shí),將所有的消息存儲(chǔ)塊索引放入到一個(gè)空閑消息索引表中;消息 寫(xiě)入時(shí),從空閑消息塊索引表中獲取消息存儲(chǔ)塊索引,計(jì)算消息存儲(chǔ)塊地址,將消息內(nèi)容寫(xiě) 入到對(duì)應(yīng)的消息存儲(chǔ)塊,根據(jù)消息標(biāo)識(shí)查找消息屬性表獲取輸出隊(duì)列索引,將消息塊索引 更新到輸出控制表,輸出控制表記錄每個(gè)輸出隊(duì)列隊(duì)頭消息塊索引,消息鏈表記錄消息索 引的先后關(guān)系;消息讀取時(shí),輸出控制單元主要按照輸出控制表和消息鏈表實(shí)現(xiàn)消息分類 輸出訪問(wèn),從輸出控制表中可獲取消息隊(duì)列的第一個(gè)消息塊,查找消息查找表獲取后續(xù)消 息塊。從消息存儲(chǔ)塊中讀取消息后將消息存儲(chǔ)塊索引放回空閑消息索引表中用于接收新的 消息。該通信系統(tǒng)消息分類輸出方法,包括以下步驟1]系統(tǒng)初始化1. 1]存儲(chǔ)單元?jiǎng)澐?. 1. 1]存儲(chǔ)單元為用于存放消息的一片存儲(chǔ)區(qū)域,邏輯上劃分為多個(gè)等長(zhǎng)的消息 存儲(chǔ)塊,每個(gè)消息存儲(chǔ)塊區(qū)可存放一條消息;消息存儲(chǔ)塊區(qū)大小(MsgMaxLen)取值為2n字 節(jié),64到4K字節(jié);1. 1.2]每個(gè)消息存儲(chǔ)塊按照順序從0開(kāi)始編號(hào);消息存儲(chǔ)塊編號(hào)標(biāo)記為 MsgBlockNo ;1. 1. 3]每個(gè)消息存儲(chǔ)塊編號(hào)與消息存儲(chǔ)單元地址建立對(duì)應(yīng)關(guān)系;消息存儲(chǔ)塊地 址MsgBlockAddr是根據(jù)消息存儲(chǔ)塊編號(hào)MsgBlockNo以及消息最大長(zhǎng)度MsgMaxLen確定;1. 2]消息屬性表初始化建立一個(gè)內(nèi)容關(guān)聯(lián)存儲(chǔ)器CAM表,提供消息屬性表用以構(gòu)建消息標(biāo)識(shí)到消息輸出 隊(duì)列索引的映射關(guān)系;1. 3]空閑消息塊索引表初始化1. 3. 1]建立一個(gè)空閑索引隊(duì)列,隊(duì)列深度與消息存儲(chǔ)塊數(shù)目相等,隊(duì)列中單元用 于存放消息編號(hào),隊(duì)列支持?jǐn)?shù)據(jù)讀、寫(xiě)操作,并提供隊(duì)列空、滿標(biāo)記;1. 3. 2]將所有的消息存儲(chǔ)塊編號(hào)加入到空閑消息緩沖塊索引隊(duì)列;1. 4]消息查找表初始化消息查找表為一個(gè)二維索引表,二維索引表地址和內(nèi)容分別對(duì)應(yīng)當(dāng)前消息存儲(chǔ)塊編號(hào)和下一個(gè)消息存儲(chǔ)塊編號(hào),以當(dāng)前消息存儲(chǔ)塊編號(hào)作為地址查找二維索引表的內(nèi)容即 為下一個(gè)消息存儲(chǔ)塊編號(hào),而當(dāng)某個(gè)消息的下一個(gè)消息塊與該消息存儲(chǔ)塊編號(hào)相同,則標(biāo) 識(shí)該消息塊為消息虛擬輸出隊(duì)列的隊(duì)尾;其具體是二維表地址和內(nèi)容分別對(duì)應(yīng)當(dāng)前消息存儲(chǔ)塊編號(hào)和下一個(gè)消息存儲(chǔ)塊 編號(hào),以當(dāng)前消息存儲(chǔ)塊編號(hào)作為地址查找二維表的內(nèi)容,即為下一個(gè)消息存儲(chǔ)塊編號(hào),通 過(guò)消息鏈表建立消息的先后關(guān)系;在系統(tǒng)初始化過(guò)程中,將消息查找表地址的值作為內(nèi)容 寫(xiě)入到相對(duì)應(yīng)的地址,表示每個(gè)消息塊的下一個(gè)為其本身,即該消息塊為隊(duì)尾;1. 5]輸出控制表初始化輸出控制表分別記錄所有輸出隊(duì)列的消息塊個(gè)數(shù)和隊(duì)頭消息存儲(chǔ)塊編號(hào),系統(tǒng)初 始化時(shí)將每個(gè)輸出隊(duì)列的消息塊個(gè)數(shù)置0,代表輸出隊(duì)列為空;輸出隊(duì)列的消息塊最大個(gè) 數(shù)由系統(tǒng)設(shè)置,典型值為4、8、16 ;2]消息的寫(xiě)入過(guò)程將消息寫(xiě)入到空閑的消息存儲(chǔ)塊中,并根據(jù)消息的標(biāo)識(shí),更新輸出控制表中對(duì)應(yīng) 輸出隊(duì)列信息以及消息查找表;其具體是a接收到消息同步頭,判斷空閑索引隊(duì)列是否空,如果空閑索引隊(duì)列為空,表示沒(méi) 有空閑的存儲(chǔ)塊,則直接丟棄該消息返回,否則進(jìn)入b ;b.從空閑消息塊索引表預(yù)取第一個(gè)空閑的存儲(chǔ)塊編號(hào)MsgBlockNo ;c.計(jì)算空閑存儲(chǔ)塊的存儲(chǔ)單元地址,計(jì)算公式=MsgBlockAddr = MsgMaxLen^MsgBlockNo ;d.空閑存儲(chǔ)塊中預(yù)留前4個(gè)字節(jié)用于存放消息長(zhǎng)度,從MsgBlockAddr+4的地址存 放消息的內(nèi)容,將消息寫(xiě)入到空閑存儲(chǔ)塊中,并進(jìn)行消息長(zhǎng)度計(jì)數(shù),待消息接收完后,將消 息長(zhǎng)度寫(xiě)入到空閑存儲(chǔ)塊前4個(gè)字節(jié)處;e.解析消息標(biāo)識(shí),根據(jù)消息標(biāo)識(shí)查消息屬性表,如果命中,則獲取輸出隊(duì)列編號(hào), 否則丟棄該消息,進(jìn)入a;f.根據(jù)輸出隊(duì)列編號(hào)查找控制表對(duì)應(yīng)消息個(gè)數(shù),Π如果消息個(gè)數(shù)等于系統(tǒng)設(shè)置的輸出隊(duì)列的消息塊最大個(gè)數(shù)時(shí),則進(jìn)入丟棄該消 息,進(jìn)入a ;f2如果消息個(gè)數(shù)為0,則將消息個(gè)數(shù)置1,從空閑消息塊索引表取出該空閑的存 儲(chǔ)塊編號(hào)MsgBlockNo,將存儲(chǔ)塊編號(hào)MsgBlockNo作為該輸出隊(duì)列的隊(duì)頭;將消息查找表 MsgBlockNo 處寫(xiě)入 MsgBlockNo,代表 MsgBlockNo 為隊(duì)尾;f3如果消息個(gè)數(shù)不為0,則將消息個(gè)數(shù)加1,從該輸出隊(duì)列隊(duì)頭存儲(chǔ)塊編號(hào),通過(guò) 消息查找表獲取下一個(gè)存儲(chǔ)塊編號(hào),直到找到隊(duì)尾MsgTailBlockNo ;查找下一個(gè)存儲(chǔ)塊編號(hào)是以當(dāng)前存儲(chǔ)塊編號(hào)作為地址讀取消息查找表內(nèi)容 MsgNextBlockNo, MsgNextBlockNo為下一個(gè)存儲(chǔ)塊編號(hào);判斷隊(duì)尾的依據(jù)是當(dāng)前消息塊編 號(hào)的下一個(gè)存儲(chǔ)塊編號(hào)為其本身,即消息查找表的內(nèi)容與其地址相等;h.經(jīng)f2與f3步驟處理后,從空閑消息塊索引表取出該空閑的存儲(chǔ)塊編號(hào) MsgBlockNo,將消息查找表 MsgBlockNo 處寫(xiě)入 MsgBlockNo,代表 MsgBlockNo 為隊(duì)尾; 將MsgTailBlockNo處寫(xiě)入MsgBlockNo,代表MsgTailBlockNo存儲(chǔ)塊的下一個(gè)存儲(chǔ)塊為 MsgBlockNo,從而將消息加入到該輸出隊(duì)列的隊(duì)尾。
3]消息讀取過(guò)程從虛擬輸出隊(duì)列中讀取消息,可采用輸出控制采用公平輪轉(zhuǎn)調(diào)度算法或優(yōu)先級(jí)調(diào) 度算法,輸出控制主要按照輸出鏈表實(shí)現(xiàn)分類輸出訪問(wèn),輸出隊(duì)列個(gè)數(shù)可配置,典型個(gè)數(shù) 為2-256個(gè)。輸出控制輸出隊(duì)列深度可配置,典型值為4、8、16,其具體是判斷虛擬輸出隊(duì)列中消息個(gè)數(shù)是否為0,如果為0,則退出;從虛擬輸出隊(duì)列中獲 取隊(duì)頭存儲(chǔ)塊編號(hào)MsgBlockNo ;根據(jù)隊(duì)頭存儲(chǔ)塊編號(hào)計(jì)算存儲(chǔ)塊的存儲(chǔ)單元地址,計(jì)算 公式:MsgBlockaddr = MsgMaxLen^MsgBlockNo ;從 MsgBlockaddr 前 4 個(gè)字節(jié)用于存放消 息長(zhǎng)度;從MsgBlockaddr+4的地址讀取消息的內(nèi)容;從消息查找表查找MsgBlockNo的下 一個(gè)存儲(chǔ)塊編號(hào)MsgNextBlockNo ;將虛擬輸出隊(duì)列的消息個(gè)數(shù)減1,將下一個(gè)存儲(chǔ)塊編號(hào) MsgNextBlockNo置為當(dāng)前虛擬輸出隊(duì)列的隊(duì)頭。該通信系統(tǒng)消息分類輸出控制器,包括輸入控制單元、存儲(chǔ)器單元、輸出控制單 元、消息屬性表單元、空閑消息塊索引表單元、消息查找表單元、輸出控制表單元;所述輸入 控制單元的輸入端分別與輸入信號(hào)、消息屬性表單元的輸出端、空閑消息塊索引表單元的 輸出端連接,輸入控制單元的輸出端分別與存儲(chǔ)器單元、消息查找表單元的輸入端、輸出控 制表單元的輸入端連接;所述存儲(chǔ)器單元的輸入端與輸入控制單元的輸出端連接,存儲(chǔ)器 單元的輸出端與輸出控制單元的輸入端連接;所述輸出控制單元的輸入端分別與存儲(chǔ)器單 元的輸出端、消息屬性表單元、輸出控制表單元的輸出端連接;輸出控制單元的輸出端與輸 出信號(hào)連接;所述消息屬性表的輸入端與輸入信號(hào)連接。輸入控制單元獲取空閑消息塊索引,將消息寫(xiě)入空閑消息存儲(chǔ)塊中,根據(jù)消息目 標(biāo)地址構(gòu)建輸出消息鏈表和輸出控制表。存儲(chǔ)器單元采用雙端口存儲(chǔ)器作為共享存儲(chǔ)資源,用于存放消息內(nèi)容;輸出控制單元可獲取多個(gè)輸出隊(duì)列狀態(tài),可按照一定策略選擇讀取任意輸出隊(duì)列 中的第一條消息;消息屬性表單元提供消息標(biāo)識(shí)到消息輸出隊(duì)列索引的映射關(guān)系。空閑消息塊索引表單元主要存放空閑消息存儲(chǔ)塊編號(hào)。消息查找表單元用于查找當(dāng)前消息存儲(chǔ)塊編號(hào)的下一個(gè)消息存儲(chǔ)塊編號(hào)。輸出控制表單元分別記錄消息隊(duì)列中的隊(duì)頭消息存儲(chǔ)塊編號(hào)和消息塊個(gè)數(shù)。當(dāng)消 息塊個(gè)數(shù)為0,代表隊(duì)列為空,當(dāng)消息塊個(gè)數(shù)不為0,代表隊(duì)列中有消息,隊(duì)頭消息存儲(chǔ)塊編 號(hào)為隊(duì)列中第一條消息,通過(guò)查找消息查找表可獲取消息隊(duì)列中的后續(xù)消息。
權(quán)利要求
1. 一種通信系統(tǒng)消息分類輸出方法,其特殊之處在于,包括以下步驟1]系統(tǒng)初始化1.1]存儲(chǔ)單元?jiǎng)澐?.1.1]存儲(chǔ)單元為用于存放消息的一片存儲(chǔ)區(qū)域,邏輯上劃分為至少一個(gè)等長(zhǎng)的消息 存儲(chǔ)塊,每個(gè)消息存儲(chǔ)塊區(qū)可存放一條消息;1. 1. 2]每個(gè)消息存儲(chǔ)塊按照順序從0開(kāi)始編號(hào);1. 1. 3]每個(gè)消息存儲(chǔ)塊編號(hào)與消息存儲(chǔ)單元地址建立對(duì)應(yīng)關(guān)系;1. 2]消息屬性表初始化建立一個(gè)內(nèi)容關(guān)聯(lián)存儲(chǔ)器CAM表,該表為消息屬性表,用以構(gòu)建消息標(biāo)識(shí)到消息輸出 隊(duì)列索引的映射關(guān)系;1.3]空閑消息塊索引表初始化1.3. 1]建立一個(gè)空閑索引隊(duì)列,隊(duì)列深度與消息存儲(chǔ)塊數(shù)目相等,隊(duì)列中單元用于存 放消息編號(hào),隊(duì)列支持?jǐn)?shù)據(jù)讀、寫(xiě)操作,并提供隊(duì)列空、滿標(biāo)記;1. 3. 2]將所有的消息存儲(chǔ)塊編號(hào)加入到空閑消息緩沖塊索引隊(duì)列;1. 4]消息查找表初始化消息查找表為一個(gè)二維索引表,二維索引表地址和內(nèi)容分別對(duì)應(yīng)當(dāng)前消息存儲(chǔ)塊編號(hào) 和下一個(gè)消息存儲(chǔ)塊編號(hào),以當(dāng)前消息存儲(chǔ)塊編號(hào)作為地址查找二維索引表的內(nèi)容即為下 一個(gè)消息存儲(chǔ)塊編號(hào),而當(dāng)某個(gè)消息的下一個(gè)消息塊與該消息存儲(chǔ)塊編號(hào)相同,則標(biāo)識(shí)該 消息塊為消息虛擬輸出隊(duì)列的隊(duì)尾;1.5]輸出控制表初始化輸出控制表分別記錄所有輸出隊(duì)列的消息存儲(chǔ)塊編號(hào)個(gè)數(shù)和隊(duì)頭消息存儲(chǔ)塊編號(hào),系 統(tǒng)初始化時(shí)將每個(gè)輸出隊(duì)列的消息塊個(gè)數(shù)置0,代表輸出隊(duì)列為空;2]消息的寫(xiě)入過(guò)程將消息寫(xiě)入到空閑的消息存儲(chǔ)塊中,并根據(jù)消息的標(biāo)識(shí),更新輸出控制表中對(duì)應(yīng)輸出 隊(duì)列信息以及消息查找表;3]消息讀取過(guò)程從虛擬輸出隊(duì)列中讀取消息。
2.根據(jù)權(quán)利要求1所述的通信系統(tǒng)消息分類輸出方法,其特征在于所述步驟2具體是a接收到消息后判斷空閑索引隊(duì)列是否空,如果空閑索引隊(duì)列為空,表示沒(méi)有空閑的存 儲(chǔ)塊,則直接丟棄該消息返回,否則進(jìn)入b ;b.從空閑消息塊索引表預(yù)取第一個(gè)空閑的存儲(chǔ)塊編號(hào)MsgBlockNo;c.計(jì)算空閑存儲(chǔ)塊的存儲(chǔ)單元地址,計(jì)算公式=MsgBlockAddr= MsgMaxLen^MsgBlockNo ;d.空閑存儲(chǔ)塊中預(yù)留前4個(gè)字節(jié)用于存放消息長(zhǎng)度,從MsgBlockAddr+4的地址存放消 息的內(nèi)容,將消息寫(xiě)入到空閑存儲(chǔ)塊中,并進(jìn)行消息長(zhǎng)度計(jì)數(shù),待消息接收完后,將消息長(zhǎng) 度寫(xiě)入到空閑存儲(chǔ)塊前4個(gè)字節(jié)處;e.解析消息標(biāo)識(shí),根據(jù)消息標(biāo)識(shí)查消息屬性表,如果命中,則獲取輸出隊(duì)列編號(hào),否則 丟棄該消息,進(jìn)入a;f.根據(jù)輸出隊(duì)列編號(hào)查找控制表對(duì)應(yīng)消息個(gè)數(shù);fl如果消息個(gè)數(shù)等于系統(tǒng)設(shè)置的輸出隊(duì)列的消息塊最大個(gè)數(shù)時(shí),則丟棄該消息,進(jìn)入a ;f2如果消息個(gè)數(shù)為0,則將消息個(gè)數(shù)置1,從空閑消息塊索引表取出該空閑的存儲(chǔ) 塊編號(hào)MsgBlockNo,將存儲(chǔ)塊編號(hào)MsgBlockNo作為該輸出隊(duì)列的隊(duì)頭;將消息查找表 MsgBlockNo 處寫(xiě)入 MsgBlockNo,代表 MsgBlockNo 為隊(duì)尾;f3如果消息個(gè)數(shù)不為0,則將消息個(gè)數(shù)加1,從該輸出隊(duì)列隊(duì)頭存儲(chǔ)塊編號(hào),通過(guò)消息 查找表獲取下一個(gè)存儲(chǔ)塊編號(hào),直到找到隊(duì)尾MsgTailBlockNo ;h.經(jīng)f2與f3步驟處理后,從空閑消息塊索引表取出該空閑的存儲(chǔ)塊編號(hào) MsgBlockNo,將消息查找表 MsgBlockNo 處寫(xiě)入 MsgBlockNo,代表 MsgBlockNo 為隊(duì)尾; 將MsgTailBlockNo處寫(xiě)入MsgBlockNo,代表MsgTailBlockNo存儲(chǔ)塊的下一個(gè)存儲(chǔ)塊為 MsgBlockNo,從而將消息加入到該輸出隊(duì)列的隊(duì)尾。
3.根據(jù)權(quán)利要求2所述的通信系統(tǒng)消息分類輸出方法,其特征在于所述步 驟2的f,查找下一個(gè)存儲(chǔ)塊編號(hào)是以當(dāng)前存儲(chǔ)塊編號(hào)作為地址讀取消息查找表內(nèi)容 MsgNextBlockNo, MsgNextBlockNo為下一個(gè)存儲(chǔ)塊編號(hào);判斷隊(duì)尾的依據(jù)是當(dāng)前消息塊編 號(hào)的下一個(gè)存儲(chǔ)塊編號(hào)為其本身,即消息查找表的內(nèi)容與其地址相等。
4.根據(jù)權(quán)利要求1至3任一所述的通信系統(tǒng)消息分類輸出方法,其特征在于所述步 驟3具體是判斷虛擬輸出隊(duì)列中消息個(gè)數(shù)是否為0,如果為0,則退出;從虛擬輸出隊(duì)列中 獲取隊(duì)頭存儲(chǔ)塊編號(hào)MsgBlockNo ;根據(jù)隊(duì)頭存儲(chǔ)塊編號(hào)計(jì)算存儲(chǔ)塊的存儲(chǔ)單元地址,計(jì)算 公式:MsgBlockaddr = MsgMaxLen^MsgBlockNo ;從 MsgBlockaddr 前 4 個(gè)字節(jié)用于存放消 息長(zhǎng)度;從MsgBlockaddr+4的地址讀取消息的內(nèi)容;從消息查找表查找MsgBlockNo的下 一個(gè)存儲(chǔ)塊編號(hào)MsgNextBlockNo ;將虛擬輸出隊(duì)列的消息個(gè)數(shù)減1,將下一個(gè)存儲(chǔ)塊編號(hào) MsgNextBlockNo置為當(dāng)前虛擬輸出隊(duì)列的隊(duì)頭。
5.根據(jù)權(quán)利要求4所述的通信系統(tǒng)消息分類輸出方法,其特征在于所述步驟3從虛 擬輸出隊(duì)列中讀取消息,其輸出控制采用公平輪轉(zhuǎn)調(diào)度算法或優(yōu)先級(jí)調(diào)度算法。
6.根據(jù)權(quán)利要求5所述的通信系統(tǒng)消息分類輸出方法,其特征在于所述步驟1.1. 1 中,消息存儲(chǔ)塊區(qū)大小(MsgMaxLen)取值為2n字節(jié),64到4K字節(jié);所述步驟1. 1. 2中,消息 存儲(chǔ)塊編號(hào)標(biāo)記為MsgBlockNo ;所述步驟1. 1. 3中,消息存儲(chǔ)塊地址MsgBlockAddr是根據(jù) 消息存儲(chǔ)塊編號(hào)MsgBlockNo以及消息最大長(zhǎng)度MsgMaxLen確定;所述步驟1. 5中,輸出隊(duì) 列的消息塊最大個(gè)數(shù)由系統(tǒng)設(shè)置,典型值為4、8、16。
7.一種通信系統(tǒng)消息分類輸出控制器,其特征在于包括輸入控制單元、存儲(chǔ)器單元、 輸出控制單元、消息屬性表單元、空閑消息塊索引表單元、消息查找表單元、輸出控制表單 元;所述輸入控制單元的輸入端分別與輸入信號(hào)、消息屬性表單元的輸出端、空閑消息塊索 引表單元的輸出端連接,輸入控制單元的輸出端分別與存儲(chǔ)器單元、消息查找表單元的輸 入端、輸出控制表單元的輸入端連接;所述存儲(chǔ)器單元的輸入端與輸入控制單元的輸出端 連接,存儲(chǔ)器單元的輸出端與輸出控制單元的輸入端連接;所述輸出控制單元的輸入端分 別與存儲(chǔ)器單元的輸出端、消息屬性表單元、輸出控制表單元的輸出端連接;輸出控制單元 的輸出端與輸出信號(hào)連接;所述消息屬性表的輸入端與輸入信號(hào)連接。
8.根據(jù)權(quán)利要求7所述通信系統(tǒng)消息分類輸出控制器,其特征在于所述存儲(chǔ)器單元為雙端口存儲(chǔ)器。
全文摘要
本發(fā)明提供一種通信系統(tǒng)消息分類輸出方法及控制器,主要解決了現(xiàn)有方法及控制器對(duì)存儲(chǔ)資源需求量大、利用率低、實(shí)現(xiàn)難度大、成本高的問(wèn)題。該通信系統(tǒng)消息分類輸出方法包括以下步驟1)系統(tǒng)初始化;2)消息的寫(xiě)入過(guò)程;3)消息讀取過(guò)程。該通信系統(tǒng)消息分類輸出控制器,包括輸入控制單元、存儲(chǔ)器單元、輸出控制單元、消息屬性表單元、空閑消息塊索引表單元、消息查找表單元、輸出控制表單元;本發(fā)明提供的通信系統(tǒng)消息分類輸出方法及控制器靈活性好,消息隊(duì)列管理控制器分類的輸出端口個(gè)數(shù)可配置,輸出隊(duì)列深度可配置,具有很好的靈活性。
文檔編號(hào)H04L12/56GK102111332SQ20101062012
公開(kāi)日2011年6月29日 申請(qǐng)日期2010年12月31日 優(yōu)先權(quán)日2010年12月31日
發(fā)明者王紅春 申請(qǐng)人:中國(guó)航空工業(yè)集團(tuán)公司第六三一研究所