劉 贏 王 易 周 健
[摘要]通過對大量現(xiàn)有多處理器片上網(wǎng)絡(luò)結(jié)構(gòu)(MPNoC)的研究,提出將面向?qū)ο蟮乃枷胍隢oC的設(shè)計中,并進一步將面向?qū)ο蟪绦蛟O(shè)計的三大特點:封裝性,繼承性和多態(tài)性應(yīng)用到NoC設(shè)計當(dāng)中,不僅提高Noc設(shè)計的靈活性,可重用性和可擴展性,而且大量縮短NoC模塊的設(shè)計時間。
[關(guān)鍵詞]面向?qū)ο驧PNoC建模思想
中圖分類號:TP311文獻標識碼:A文章編號:1671—7597(2009)1020100--01
一、引言
在多處理器片上系統(tǒng)(MPSoC)飛速發(fā)展的今天,多處理器片上網(wǎng)絡(luò)結(jié)構(gòu)(MPNoC)的設(shè)計優(yōu)化慢慢成為MPSoC發(fā)展的瓶頸,隨著片上網(wǎng)絡(luò)(Network on Chip)的多樣化,現(xiàn)今沒有一個統(tǒng)一的成熟的平臺和技術(shù)來評價和優(yōu)化片上網(wǎng)絡(luò)結(jié)構(gòu),使得NoC的設(shè)計結(jié)構(gòu)不清晰??芍赜眯圆?,設(shè)計周期長,所以近年來,對片上網(wǎng)絡(luò)設(shè)計的優(yōu)化慢慢的引起了大家的重視,其中引入面向?qū)ο笏枷氲狡暇W(wǎng)絡(luò)設(shè)計相信將成為下一代片上網(wǎng)絡(luò)設(shè)計的一個趨勢,早在1994年Kumar[1]就點明了面向?qū)ο蠼<夹g(shù)對提高硬件設(shè)計性能的重要性,如,提高模型的可更改性,新模塊的結(jié)合性,提高模塊劃分,復(fù)用的能力和加速通用模塊的專業(yè)化等,隨后1996年w,Nebel和G,Schumacher[2]將面向?qū)ο蟮募夹g(shù)作為一種可以提高硬件設(shè)計生產(chǎn)力的手段來分析。前人的研究表明,將面向?qū)ο蟮乃枷霊?yīng)用于硬件設(shè)計是可能的,并且也是硬件設(shè)計發(fā)展的一個方向。
下面將首先介紹一種用于NoC設(shè)計的面向?qū)ο髮哟位P蚚3],然后分別從其封裝性,繼承性和多態(tài)性對其進行分析,最后進行總結(jié)。
二、NoC的面向?qū)ο髮哟位?/p>
片上網(wǎng)絡(luò)系統(tǒng)通常都包含多個不同功能的硬件單元模塊,這些單元模塊間通過復(fù)雜的交互來完成片上系統(tǒng)的通信,下面講解怎樣通過面向?qū)ο蟮乃枷雭碓O(shè)計出常用的片上網(wǎng)絡(luò)基礎(chǔ)模塊,然后通過面向?qū)ο笏枷氲睦^承性和多態(tài)性對其進行擴展,這樣,不僅能將面向?qū)ο笤O(shè)計的優(yōu)點應(yīng)用到硬件設(shè)計中,而且能很大程度的縮短片上網(wǎng)絡(luò)系統(tǒng)的開發(fā)時間。
為了使片上網(wǎng)絡(luò)的面向?qū)ο蠼S休^高的重用性,基礎(chǔ)類庫的設(shè)計是關(guān)鍵,本節(jié)的重點將在使用面向?qū)ο笏枷虢oC設(shè)計的基礎(chǔ)類癢。有了這個基礎(chǔ)的類庫,許多經(jīng)典的片上網(wǎng)絡(luò)模型都能建立,如經(jīng)典的單總線結(jié)構(gòu)。
圖1中首先表示出了4種基本的片上網(wǎng)絡(luò)模塊類型——連接(Link),數(shù)據(jù)緩沖(Buffer),接口(Interface),控制器(Scheduler),使用它們和它們的子類,可以組建現(xiàn)今一些經(jīng)典的片上網(wǎng)絡(luò)系統(tǒng),比如單總線結(jié)構(gòu)。連接(Link)用于將片上網(wǎng)絡(luò)的各功能單元模塊連接到一起;數(shù)據(jù)緩沖(Buffer)用于暫時的存儲數(shù)據(jù);接口(Interface)用于將單純的數(shù)據(jù)交換轉(zhuǎn)換成相應(yīng)的具體操作,比如總線請求,封裝數(shù)據(jù)包i控制器(Scheduler)用于決定哪個模塊享有對共享資源的使用權(quán),以保證整個系統(tǒng)有序的執(zhí)行。
不難發(fā)現(xiàn)上述4個基礎(chǔ)模塊類包含一些共同的特性,比如時鐘信號,數(shù)據(jù)位寬,所以使它們實現(xiàn)了同一個接口類(ClockModule),該接口提供了cycleProcess()方法,該方法在接口中只有聲明沒有定義,需要在4個基礎(chǔ)模塊類中給出實現(xiàn),通常該方法表示在一個時鐘周期內(nèi)接收數(shù)據(jù),改變模塊狀態(tài)或者輸出數(shù)據(jù)。4個基礎(chǔ)模塊類在繼承同一接口類的同時,每個模塊類都有自己的獨有的屬性,比如連接(Link)需要有更復(fù)雜的功能,需要位寬(bitWidth),時延(latency)屬性和配置這些屬性的公有方法(1inkConfig())。
下面將分別從面向?qū)ο蟮娜筇攸c:封裝性,繼承性和多態(tài)性來分析上述片上網(wǎng)絡(luò)的面向?qū)ο髮哟位P停鲜雒嫦驅(qū)ο蟮脑O(shè)計方法是獨立于編程語言的,它可以應(yīng)用于各種面向?qū)ο笳Z言和平臺,但為了表述清楚,下面的偽代碼結(jié)構(gòu)使用SystemC 2.0。
(一)封裝性
面向?qū)ο缶幊趟枷胫?,封裝指的是使對象成為黑盒的概念,這樣使用者使用對象時只需要知道其公有接口(公有函數(shù)),使用它們來操作對象屬性,而不能隨意修改對象的私有屬性,增加了程序的安全性。在模式方面。這一概念就變成了創(chuàng)建一個類型:類型是預(yù)先定義的,并且只要引用該類型就可以很容易地在任何地方創(chuàng)建和交換數(shù)據(jù),完成該類型模塊功能。
現(xiàn)在創(chuàng)建一個連接(Link)類型,它指明了連接必須包含輸入端口(portIn),輸出端口(portOut),位寬(bitWidth)和時延(1atency)屬性,并且位寬和時延是私有成員,只能通過公有方法來對它們操作。由此可見連接(Link)類封裝了與連接有關(guān)的信息,并提供公用的配置連接方法(1inkConflg())來配置這些參數(shù)。
class Link:public clock Module
(
public:
sc_gort port in~
sc~ort port outI
int link_config(int bit_width,int latency);
private:
int bit widthl
int latency~
);
以上便實現(xiàn)了一個Link類,該類封裝了連接(Link)的基本特性,但需要說明的是連接(Link)類型只是一個基礎(chǔ)類,不宜直接使用,需要其它類來繼承它,比如多路選擇器(MUX),交叉總線(CrossBar)以實現(xiàn)需要的功能。
(二)繼承性
重用是面向?qū)ο笤O(shè)計的另一個重要特性,可以通過繼承來實現(xiàn)設(shè)計重用,在編程語言中,通過子類來提供這一能力。為了尋求一種片上網(wǎng)絡(luò)設(shè)計的靈活的可重用的面向?qū)ο髮哟谓Y(jié)構(gòu),這種層次結(jié)構(gòu)需要包含擴展能力,用來滿足新的設(shè)計和需求,類的繼承性就實現(xiàn)了這一能力,通過繼承所需的基礎(chǔ)類,添加自己所需的特定元素來構(gòu)造新的類型,這樣給設(shè)計工作帶來了極大的方便,使編碼時間大大縮短。不僅如此,現(xiàn)今各大IP核廠商都提供特定功能的類庫和IP核,但是往往IP核不能滿足所有的特定需求,使用這種有繼承特性的層次化面向?qū)ο蠼Y(jié)構(gòu),繼承IP核,添加所需功能,使得IP核的靈活性增加。最后盡管廠商提供的IP核會面向不同的應(yīng)用,功能特性也會有相應(yīng)差別,例如速度,功耗,但對于有特定功耗要求的系統(tǒng),我們可以通過“白盒”重用來構(gòu)造自己所需的類,更方便的是通過不斷豐富這個類庫,以后我們將有更多的類庫可以直接使用,使得片上網(wǎng)絡(luò)設(shè)計更加方便,發(fā)展更加迅速。
(三)多態(tài)性
多態(tài)性意味著在不同的上下文中對某對象賦予不同的意義或用法的能力,具體而言,就是允許對象有多種形式。在面向?qū)ο笳Z言中,具體的說,它是子類對相同操作做出不同反映的能力。例如首先定義了控制器(Scheduler)類,它包含控制模塊所具有的基本功能,請求和允許方法,仲裁器(Arbiter)和分配器(Allocator)同時繼承控制器(Scheduler),并且都定義了沖裁(arbitrate())方法,沖裁器的arbitrate方法是用來沖裁哪個模塊能夠使用當(dāng)前資源,而分配器的arbitrate方法是用來給不同模塊分配不同的系統(tǒng)資源,多態(tài)性在此例中就表現(xiàn)為當(dāng)控制器指向不同子類時,程序就調(diào)用相應(yīng)該子類的arbitrate方法。
三、總結(jié)
由以上分析可以看出,在硬件NoC設(shè)計中,使用面向?qū)ο笤O(shè)計思想,模塊的屬性得到了封裝,使得硬件設(shè)計結(jié)構(gòu)更加清晰,同時提高了硬件模塊設(shè)計的靈活性和可擴展性,使得很多硬件模塊都不需要重頭開始設(shè)計,只需要繼承相關(guān)的類,稍作修改后成為所需的模塊,這樣大大的縮短硬件模塊的開發(fā)周期。