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