APP下载

MPNoC设计中的面向对象层次化建模思想

2009-06-22

新媒体研究 2009年20期
关键词:层次化面向对象多态性

刘 赢 王 易 周 健

[摘要]通过对大量现有多处理器片上网络结构(MPNoC)的研究,提出将面向对象的思想引入NoC的设计中,并进一步将面向对象程序设计的三大特点:封装性,继承性和多态性应用到NoC设计当中,不仅提高Noc设计的灵活性,可重用性和可扩展性,而且大量缩短NoC模块的设计时间。

[关键词]面向对象MPNoC建模思想

中图分类号:TP311文献标识码:A文章编号:1671—7597(2009)1020100--01

一、引言

在多处理器片上系统(MPSoC)飞速发展的今天,多处理器片上网络结构(MPNoC)的设计优化慢慢成为MPSoC发展的瓶颈,随着片上网络(Network on Chip)的多样化,现今没有一个统一的成熟的平台和技术来评价和优化片上网络结构,使得NoC的设计结构不清晰。可重用性差,设计周期长,所以近年来,对片上网络设计的优化慢慢的引起了大家的重视,其中引入面向对象思想到片上网络设计相信将成为下一代片上网络设计的一个趋势,早在1994年Kumar[1]就点明了面向对象建模技术对提高硬件设计性能的重要性,如,提高模型的可更改性,新模块的结合性,提高模块划分,复用的能力和加速通用模块的专业化等,随后1996年w,Nebel和G,Schumacher[2]将面向对象的技术作为一种可以提高硬件设计生产力的手段来分析。前人的研究表明,将面向对象的思想应用于硬件设计是可能的,并且也是硬件设计发展的一个方向。

下面将首先介绍一种用于NoC设计的面向对象层次化模型[3],然后分别从其封装性,继承性和多态性对其进行分析,最后进行总结。

二、NoC的面向对象层次化建模

片上网络系统通常都包含多个不同功能的硬件单元模块,这些单元模块间通过复杂的交互来完成片上系统的通信,下面讲解怎样通过面向对象的思想来设计出常用的片上网络基础模块,然后通过面向对象思想的继承性和多态性对其进行扩展,这样,不仅能将面向对象设计的优点应用到硬件设计中,而且能很大程度的缩短片上网络系统的开发时间。

为了使片上网络的面向对象建模有较高的重用性,基础类库的设计是关键,本节的重点将在使用面向对象思想建立NoC设计的基础类痒。有了这个基础的类库,许多经典的片上网络模型都能建立,如经典的单总线结构。

图1中首先表示出了4种基本的片上网络模块类型——连接(Link),数据缓冲(Buffer),接口(Interface),控制器(Scheduler),使用它们和它们的子类,可以组建现今一些经典的片上网络系统,比如单总线结构。连接(Link)用于将片上网络的各功能单元模块连接到一起;数据缓冲(Buffer)用于暂时的存储数据;接口(Interface)用于将单纯的数据交换转换成相应的具体操作,比如总线请求,封装数据包i控制器(Scheduler)用于决定哪个模块享有对共享资源的使用权,以保证整个系统有序的执行。

不难发现上述4个基础模块类包含一些共同的特性,比如时钟信号,数据位宽,所以使它们实现了同一个接口类(ClockModule),该接口提供了cycleProcess()方法,该方法在接口中只有声明没有定义,需要在4个基础模块类中给出实现,通常该方法表示在一个时钟周期内接收数据,改变模块状态或者输出数据。4个基础模块类在继承同一接口类的同时,每个模块类都有自己的独有的属性,比如连接(Link)需要有更复杂的功能,需要位宽(bitWidth),时延(latency)属性和配置这些属性的公有方法(1inkConfig())。

下面将分别从面向对象的三大特点:封装性,继承性和多态性来分析上述片上网络的面向对象层次化模型,上述面向对象的设计方法是独立于编程语言的,它可以应用于各种面向对象语言和平台,但为了表述清楚,下面的伪代码结构使用SystemC 2.0。

(一)封装性

面向对象编程思想中,封装指的是使对象成为黑盒的概念,这样使用者使用对象时只需要知道其公有接口(公有函数),使用它们来操作对象属性,而不能随意修改对象的私有属性,增加了程序的安全性。在模式方面。这一概念就变成了创建一个类型:类型是预先定义的,并且只要引用该类型就可以很容易地在任何地方创建和交换数据,完成该类型模块功能。

现在创建一个连接(Link)类型,它指明了连接必须包含输入端口(portIn),输出端口(portOut),位宽(bitWidth)和时延(1atency)属性,并且位宽和时延是私有成员,只能通过公有方法来对它们操作。由此可见连接(Link)类封装了与连接有关的信息,并提供公用的配置连接方法(1inkConflg())来配置这些参数。

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~

);

以上便实现了一个Link类,该类封装了连接(Link)的基本特性,但需要说明的是连接(Link)类型只是一个基础类,不宜直接使用,需要其它类来继承它,比如多路选择器(MUX),交叉总线(CrossBar)以实现需要的功能。

(二)继承性

重用是面向对象设计的另一个重要特性,可以通过继承来实现设计重用,在编程语言中,通过子类来提供这一能力。为了寻求一种片上网络设计的灵活的可重用的面向对象层次结构,这种层次结构需要包含扩展能力,用来满足新的设计和需求,类的继承性就实现了这一能力,通过继承所需的基础类,添加自己所需的特定元素来构造新的类型,这样给设计工作带来了极大的方便,使编码时间大大缩短。不仅如此,现今各大IP核厂商都提供特定功能的类库和IP核,但是往往IP核不能满足所有的特定需求,使用这种有继承特性的层次化面向对象结构,继承IP核,添加所需功能,使得IP核的灵活性增加。最后尽管厂商提供的IP核会面向不同的应用,功能特性也会有相应差别,例如速度,功耗,但对于有特定功耗要求的系统,我们可以通过“白盒”重用来构造自己所需的类,更方便的是通过不断丰富这个类库,以后我们将有更多的类库可以直接使用,使得片上网络设计更加方便,发展更加迅速。

(三)多态性

多态性意味着在不同的上下文中对某对象赋予不同的意义或用法的能力,具体而言,就是允许对象有多种形式。在面向对象语言中,具体的说,它是子类对相同操作做出不同反映的能力。例如首先定义了控制器(Scheduler)类,它包含控制模块所具有的基本功能,请求和允许方法,仲裁器(Arbiter)和分配器(Allocator)同时继承控制器(Scheduler),并且都定义了冲裁(arbitrate())方法,冲裁器的arbitrate方法是用来冲裁哪个模块能够使用当前资源,而分配器的arbitrate方法是用来给不同模块分配不同的系统资源,多态性在此例中就表现为当控制器指向不同子类时,程序就调用相应该子类的arbitrate方法。

三、总结

由以上分析可以看出,在硬件NoC设计中,使用面向对象设计思想,模块的属性得到了封装,使得硬件设计结构更加清晰,同时提高了硬件模块设计的灵活性和可扩展性,使得很多硬件模块都不需要重头开始设计,只需要继承相关的类,稍作修改后成为所需的模块,这样大大的缩短硬件模块的开发周期。

猜你喜欢

层次化面向对象多态性
差异化教学在幼儿健康教育中的应用
APOE基因多态性与老年动脉粥样硬化性脑梗死严重程度及预后相关性分析
基因多态性与老年高血压的研究进展
基础层建设对建立大学生社会主义核心价值观的影响
面向对象的计算机导论课程教学
基于Web的科研项目管理系统的设计与实现
物理复习课堂中复习内容的设计*
应力波反射法测锚索长度的数据处理软件设计与实现
语文有效作业的设计策略探研
从面向过程到面向对象思维方式的教学引导