一种满足SystemC语法的多核处理器的互斥和信号量单元组的制作方法

文档序号:6464589阅读:165来源:国知局
专利名称:一种满足SystemC语法的多核处理器的互斥和信号量单元组的制作方法
技术领域
本发明涉及一种多核处理器,更具体地,本发明涉及一种满足SystemC语 法要求的多核处理器的互斥和信号量单元组。
背景技术
近年来,多核处理器技术得到了蓬勃发展。究其原因,主要有以下几点 第一,设计需求;硅的成本越来越低,集成度越来越高,多核的规则结构可简 单有效的利用更多的硅面积;第二,业务需求;多媒体业务越来越复杂,要求 平台的灵活性和处理性能越来越高,同时还要求功耗保持在允许的范围内,多 核处理器可潜在提供最高性能功耗比,可供更高性能的计算和灵活性;第三, 上市时间(Timetomarket)需求;上市时间要求越来越短,多核处理器的并行开发 可以满足所需上市时间。
通常,多核处理器有以下两种发展模式。
第一类多核处理器不改变现有顺序执行的设计流程和编程模式,只是采用 更先进的编译技术来适应多核的架构。
多核在这里起的作用仅是代替单核而提供更多的计算功能。目前多数的处 理器,无论是单核还是多核,都采用顺序执行的编程模型。在这种模型下,为 了支持多任务,引入了支持多任务的操作系统。操作系统可以为进行多任务编 程和并行执行代码提供途径。但是,在存在操作系统和多个任务并行存在的情 况下,整个嵌入式系统又变得相对十分复杂,调试难度与单核单任务相比大大 增加。 一种调试方式为断点调试,当处理器在断点处暂停执行时,外部输入条 件仍然可能发生变化,因为处理器的暂停,错误发生的条件可能不能再现。另 外一种调试方式为打印输出,将可能出错的地方打印出来,由于打印的结果可 能非常繁多,错误难以定位。而且一旦处理器执行出错,可能在错误发生前打 印本身已经不能工作。引入了操作系统后的另外一个问题是处理器的空闲运转 导致的电量浪费。由于有多个任务,虽然外设可以根据需要进行停止,但处理 器在什么时候应该进入节电模式以及何时从节电模式中恢复变得难以确定,从而导致电量浪费。据统计,由于上述原因,造成大约一半的嵌入式系统项目失败。
(2)第二类多核处理器采用并行语言和编程模式,冲艮据并行语言和编程模 式的需要来设计处理器的物理架构。采用这种方式设计的多核处理器能够与并 行语言紧密配合,并期望克服第一类处理器调试困难和电量浪费的缺点。
目前的多核处理器都属于第一类,而第二类处理器仍然处于发展初期,没 有成熟的设计应用。
在已有处理器中,互斥和信号量一般采用操作系统进行模拟,在维护资源 计数器的时候,关闭处理器中断,即可实现简单的信号量和互斥。但对于复杂 的互斥和信号量以及针对特定语法的处理, 一般无能为力。

发明内容
为克服现有多核处理器互斥和信号量单元处理能力有限的缺陷,本发明提
出 一种满足SystemC语法的多核处理器的互斥和信号量单元组。
根据本发明的一个方面,提出了一种满足systemC语法的多核处理器的互 斥和信号量单元组,所述互斥和信号量单元组包括按照SystemC语法的 sc一mutex(name) 、 sc—mutex.lock() 、 sc—mutex.trylock() 、 sc一mutex.unlock()、 sc—semaphore.waitO 、 sc—semaphore.trywaitO 、 sc一semaphore.postO 、 sc_semaphore(init_value) 、 sc—semaphore(name,init—value)函凄K戈石马实现的還丰專电 路,所述逻辑电路用于向处理器核运行时控制器发送激活和暂停处理器的信号,
新组合,实现sc—mutex或者sc_semaphore语法单元所定义的功能。 所述互斥和信号量单元组,包括
资源计数器,与数据发送引擎和SC^MU一SEM寄存器组相连,用于资源计
数;
数据发送引擎,与所述交换单元适配器相连,用于发送数据包; 数据接收引擎,与所述交换单元适配器相连,用于接收数据包; SC_MU—SEM寄存器组,与所述数据发送引擎、所述数据接收引擎、所述
资源计数器以及所述本地总线相连,用于4艮据资源计数器的状态控制数据包的
发送和接收、资源的锁定和解锁以及更新资源计数。
所述互斥和信号量单元组,还包括远端等待单元地址FIFO。
其中,当处理器核调用sc^mutex.lock()或者sc^semaphore.wait()且所述资源计数器的计数为零时,SC—MU—SEM寄存器组输出"暂停"信号,暂停处理器 的执行;当非本地处理器核调用sc—mutex.lock()或者sc—semaphore.wait()且所述 资源计数器的计数为零时,所述SC—MU一SEM寄存器组向远端处理器核发送重 试应答包。
其中,所述SC—MU一SEM寄存器组为互斥和信号量单元寄存器组,包括 信号量和互斥量识别寄存器,用于存储互斥或者信号量的名称; 初始化寄存器,用于存储互斥和信号量单元的工作方式和资源计数器的初 始值;
资源锁定等待寄存器,用于释放和阻塞获取一个信号量,以及阻塞锁定和 解锁一个互斥量;
资源尝试锁定等待寄存器,用于尝试获取一个信号量,以及尝试锁定一个 互斥量,当处理器核读取该寄存器,表示尝试获取信号量或者资源尝试锁定互 斥量;
本地互斥和信号量单元地址寄存器,用于给出本互斥和信号量单元区别于 所有芯片内其它单元的地址;
远端互斥和信号量单元地址寄存器,用于给出远端互斥和信号量单元区别 于所有芯片内其它单元的地址。
其中,所述互斥和信号量单元寄存器组还包括消费者等待时间寄存器, 用于决定当本地互斥和信号量单元向远端互斥和信号量单元发送RTY时所携带 的等待时间信息的值,典型的产生等待时间的方法是给出一个固定值;当 SC—MU—SEM—CWT寄存器的值为0,用于对所有的解锁请求和增加信号量的请 求产生响应。
其中,所述互斥和信号量单元寄存器组还包括SC—MU—SEM—OWNER寄 存器,用于决定当本地互斥和信号量单元向远端互斥和信号量单元发送RTY时 所携带的等待时间信息的值;信号量当前值寄存器,用于存储信号量计数器的 当前值。
其中,所述互斥和信号量单元组的工作方式包括互斥,本地维护资源计 数;互斥,远程维护资源计数;信号量,本地维护资源计数;信号量,远程维 护资源计数。
其中,在所述本地维护资源计数工作方式下,当处理器核写锁定/等待寄存 器、尝试锁定/等待寄存器,数据发送引擎将本地互斥和信号量单元组地址寄存 器和远端互斥和信号量单元地址寄存器的值及对应状态按照交换单元所要求的包格式封装并发送给交换单元适配器。
其中,在所述远程维护资源计数工作方式下,当数据接收引擎接收到请求 数据包,将请求数据的远端互斥和信号量单元地址寄存器与本地互斥和信号量 单元地址寄存器比较,若相同,则接收该请求数据包并进行对应的锁定、解锁、 等待或者释放处理。
其中,当所述请求数据包是锁定/等待请求或者尝试锁定/等待请求,通知资
源计数器将计数减l;若资源计数器通知成功,则数据接收引擎向发送该请求数 据包的互斥和信号量单元发送成功应答;若资源计数器通知失败,则对于尝试 锁定/等待请求,数据接收引擎向发送该请求数据包的互斥和信号量单元发送包 含失败信息和自身消费者等待时间寄存器值的RTY应答,对于锁定/等待请求, 数据接收引擎将接收到的请求包的本地互斥和信号量单元地址存储进远端等待 单元地址FIFO。
其中,当所述请求数据包是释放/解锁请求时,通知资源计数器将计数增1, 当SC一MU一SEM—OWNER与接收到的请求数据包的本地互斥和信号量单元地址 寄存器匹配时,资源计数器增l。
其中,用户代码的sc—smaphore(init—value)操作在所述SC—MU—SEM单元中 被如下翻译处理器核将init一value写入初始化寄存器,从而初始化初始资源计 数为init—value 。
通过应用本发明,实现了支持SystemC语法单元到芯片内资源映射,使得 本地资源可以用于任何多个处理单元之间、处理单元和外设之间的资源共享与 同步。本发明的互斥和信号量单元SC—MU_SEM支持灵活的多个进程间基于 sc—mutex 、 sc—semaphore 的数据共享,支持所有的 SystemC sc_mutex 、 sc—ssmaphore语法。


图1已有的基于二维阵列的8核处理器的示意图; 图2为根据本发明的实施例的改进的多核处理器示意图; 图3为根据本发明的实施例的用于SystemC优化的多核处理器的处理单元 示意图4为根据本发明的实施例的SC—MU—SEM单元组成与内部连接示意图; 图5为根据本发明的多核处理器编写的MP3+运动JPEG解码播放器示意图; 图6为根据本发明的多核处理器编写的无线网状网接入点示意图;图7为图13的无线网状网接入点数据处理示意图。
具体实施例方式
下面结合附图和具体实施例对本发明提供的一种满足SystemC语法要求的 多核处理器进行详细描述。
针对SystemC优化的多核处理器希望采用SystemC作为多核的软件开发语 言。SystemC是C++的扩展库,1999年,EDA业界的Cadence 、 Synopsys、 ARM 等公司共同组织开发基于C十+的EDA语言,从而诞生了 SystemC。在2006年, SystemC正式成为IEEE标准,成为所有EDA软件支持的VHDL、 Verilog之后 的第三种自然语言。
SystemC能够提供更高的设计效率、更有效的设计流程,从而可以帮助解决 集成电路产业面临的爆炸性的复杂度、上市压力、成本上升等问题。
SystemC语言本身是C+十的扩展,因此,虽然SystemC目前被广泛应用于 集成电路设计中的系统验证,它实际上也可以用来做多核嵌入式开发软件。如 果多核处理器支持SystemC语言中的特定语法,那么基于SystemC的多核嵌入 式开发将有效筒化嵌入式系统的开发难度,增加开发效率,并实现更加有效的 处理器功耗管理。
图1是与本申请为同一申请人提出的申请号为200710308574.5的专利申请 中的一个满足SystemC的基于二维阵列的8核处理器的示意图。在所述多核处 理器中,包括由多个交换单元B及其连接线C构成的片上网络。片上处理单元 F和外设单元A1-A12通过交换单元适配器E连接到交换单元,从而通过片上网 络进行通信。所有的外设A1-A12是处理器与外部通信的接口,外设可以包括通 用串行接口和通用异步串行接口 (USB&2XUARTS) Al,也可以包括同步动态 存储器接口(SDRAMC)A2、 A5、 A8和A12,还包括数字电视广播异步串行接口 (DVB ASI)A3、数字电视广播同步串行接口(DVB SPI)A9、液晶显示器接口 (LCDC)A4、闪存接口(NandflashC)A6、外设互联接口 (PCIH)A7、外部事件触发 单元All、高清视频输出接口(YCbCr)AlO,这些外设构成整个片上网络的外围 部分与外界通信。在图l所示的多核处理器中,分别标识为PE(O, 0)、 PE(O, 1 ) 、 PE (0, 2) 、 PE ( 1, 0) , PE ( 1, 2) 、 PE (2, 0) 、 PE (2, 1 )和PE (2, 2)的八个处理单元F通过片上网络进行通信。D是一个全局资源(GR) 单元,用于距离较远的处理器核间的同步和数据共享。在任意两个相邻的处理 单元F之间还包括一个本地资源单元G。SystemC优化的多核处理器的与常见多核处理器相比,不同之处在于具有本 地资源单元和全局资源。本地资源单元和全局资源单元是根据SystemC的语法 要求而设计,保证SystemC的事务处理级代码能够与硬件资源——对应。
在该申请中公开的SystemC优化的多核处理器具有常见的二维阵列结构, 多个交换单元B及其连接线C构成的片上网络。处理单元F通过交换单元适配 器连接E到交换单元S与其它处理单元或者外设A1-A12用于通信。此外,此 多核处理器还包括连接在相邻的所述处理单元F之间的用于相邻处理单元之 间同步和数据共享的本地资源单元G,和与所述交换单元B连接的至少一个用 于所有处理单元之间同步和数据共享的全局资源单元D。由于本地资源单元G 位于相邻的处理单元F之间, 一个本地资源单元G只能为所连接的两个处理单 元F所使用,实际上约束了被映射到本地资源的用户代码中的sc一mutex、 sc—event、 sc—semaphore、 sc一event一queue、 sc—fifo等i吾法单元只能为两个进禾呈同 时使用。因此,本地资源单元G使用效率较低。
如图2所示,才艮据本发明的实施例的一种改进的SystemC优化的多核处理 器。所述多核处理器包括多个交换单元B及其连接线C构成片上网络,SystemC 优化的处理单元H通过交换单元适配器E连接到交换单元S,与其它处理单元 或者多个外设A1-A12进行通信。
处理单元不通过其具有的本地资源单元与其它处理单元直接连接,而是通 过本地资源单元经交换单元适配器与总线相连接,并且通过下图3中所示的其 它控制组件完成通信控制,实现一个本地资源单元可以为所连接的多个处理单 元F所使用。
图3为根据本发明的实施例的用于SystemC优化的多核处理器的处理单元 示意图。
多核处理器的处理单元包括一个处理器核Hl,以及通过本地总线H2与处 理器核相连接的可选的定时器组H3、可选的片上存储器H4、可选的处理器核 与交换单元适配器桥H5。处理器交换单元适配器桥H5与本地总线H2和交换单 元适配器E相连接,是处理器核H1直接与外界通信的通道,用于处理器核直接 访问片上其它处理单元和外设单元,并用于处理器核指令和数据总线接口与交 换单元适配器之间的通信。交换单元适配器E与处理单元内的片上存储器H4 相连接,允许外界访问处理单元内的片上存储器。
所述多核处理器的SystemC优化的处理单元,还包括一个由SystemC优化 的事件处理单元组H61、 SystemC优化的先进先出队列单元组H62和SystemC优化的互斥和信号量单元组H63构成的处理器核本地资源单元H6。 SystemC优 化的事件处理单元组H61、 SystemC优化的先进先出队列单元组H62和SystemC 优化的互斥和信号量单元组H63分别连接到交换单元适配器E,用于和外界通 信。处理器核本地资源单元H6、片上存储器H4、定时器组H3还分别连接到处 理器核运行时控制器H8,并通过信号H71、 H72、 H731、 H74、 H75向处理器 核运行时控制器H8发送处理器暂停和继续执行通知。处理器核运行时控制器 H8将这些通知合并后向处理器核输出运行/停止信号H9。
本地资源单元H6的SystemC优化的事件处理单元组H61 、 SystemC优化的 先进先出队列单元组H62和SystemC优化的互斥和信号量单元组H63可以不依 赖于本地资源单元内的其它子;f莫块而存在。也就是说,本地资源H6可以包括 SystemC优化的事件处理单元组H61 、 SystemC优化的先进先出队列单元组H62 和SystemC优化的互斥和信号量单元组H63的其中一个或者多个。
定时器组H3包括多个定时器,每个定时器向事件处理单元组的对应单元输 出 一个超时通知信号,多个通知信号构成信号组Ml。
互斥和信号量单元组H63包括多个独立的互斥和信号量单元。每一个互斥 和信号量单元按照 SystemC语法的 sc_mutex.lock() 、 sc—mutex.trylock()、 sc一mutex.unlock() 、 sc_semaphore.waitO 、 sc— semaphore.trywaitO 、 sc— semaphore.post()、 sc_semaphore.get—value()函数 码实现的逻辑电路函数代码实 现的逻辑电路,用于向处理器核运行时控制器发送激活和暂停处理器的信号, 并允许软件开发工具的映射算法将位于不同处理单元的多个互斥和信号量单元 重新组合共同完成sc_mutex或者一个sc_semaphore语法单元所定义的功能。
互斥和信号量单元组的具体设计
在操作系统中,互斥(mutex)用来保护共享资源,以避免多个进程同时读写 共享资源,导致系统行为的不确定。互斥具有锁定和非锁定两种状态。如果有 进程需要使用由互斥保护的资源,而这时互斥没有被锁定,则该进程就可以将 互斥锁定,这时它就可以唯一的获得由该互斥保护的资源,并允许对资源进行 任何的合法操作。当互斥已经由另外的进程锁定,这时申请互斥的进程就会被 阻塞,直到锁定互斥的进程将互斥解锁。
根据IEEE P1666 SystemC标准,通过sc—mutex.lock()进程可以锁定互斥, 如果互斥已经被锁定,这时申请锁定的进程就被阻塞直到互斥被解锁。通过 sc—mutex.trylock()进程可以查询互斥是否裙:锁定,以决定是否使用sc_mutex.lock() 锁定互斥从而避免进程被阻塞。通过stmutex.unlock()函数进程可以解锁互斥。互斥SC—MUTEX用来保护独占资源。由于SOPA采用SystemC作为程序 开发语言,因此,所有的成员变量几乎都是需要使用sc^mutex来保护的互斥资源。
信号量用来传递多份共享资源的同步信息。sc一semaphore是SystemC定义 的又一个重要的基本通道,在操作系统原理的中文教材中,通常将semaphore 翻译为信号量。信号量和互斥都用来保护共享资源,但它们又有所不同。信号 量是操作系统提供的管理公有资源的有效手段。信号量代表可用资源实体的数 量,所以可以认为信号量就是一个资源计数器,它限制的是同时使用某共享资 源(也称为临界资源)的进程的数量。信号量计数的值代表的就是当前仍然可 用的共享资源的数量。
sc^semaphore.wait()方法获得一个信号量,其作用效果是获得一份资源的使 用权,使信号量计数减一。这是一个阻塞函数,当信号量的计数已经为0 (代表 没有可用资源可以分配)的时候,这个函数就会被阻塞。sc一semaphore.trywait() 是对应的非阻塞函数;sc—semaphore.post()是释放资源的函数; sc—semaphore.get—value()返回的是当前的信号量计数。
sc—semaphore的构造函凄史有两个
explicit sc—semaphore( int init—value—);
sc一semaphore( const char* name—, int init—value—》
其中init—value—是信号量的初始计数,必须大于O,没有缺省值,不能够完 成隐含的类型转换。name一是通道名。
由于互斥和信号量的类似性,它们可以采用同一个硬件资源实现,因此互 斥和信号量单元组H63成为本地资源H6的一个重要组成部分之一。
在已有处理器中,互斥和信号量一般采用操作系统进行模拟,在维护资源 计数器的时候,关闭处理器中断,即可实现简单的信号量和互斥。
由于SystemC语法的特殊要求,以及从SystemC优化的多核处理器在节电 和便于调试的角度考虑,在处理单元内设计了互斥和信号量单元组。
根据本发明的互斥和信号量单元组内部包括多个独立的SC—MU—SEM单 元。每个SC_MU—SEM单元如图4所示。
SC—MU—SEM单元对外连接关系连接到交换单元适配器E,从而实现与 外界的通信;连接到处理单元本地总线H2,保证处理器核HI可以对其访问; 连接到处理器核运行时控制器H8,从而对处理器的运行进行控制。
SC—MU—SEM单元组成与内部连接连接处理器本地总线H2和SC—MU—SEM寄存器组H631的本地总线接口 H637,处理器核HI通过该接口 访问SC—MU_SEM寄存器组H631来控制整个SC—MU—SEM单元的工作;连接 除远端等待单元地址FIFO H633外所有其它单元为所有其它单元提供状态和控 制信息的SC—MU—SEM寄存器组H631;连接SC_MU—SEM寄存器組H631和 交换单元适配器E的数据发送引擎H630;连接到交换单元适配器E的数据接收 处理引擎H632;连接SC一Ml^SEM寄存器组H631、处理器核运行时控制器H8 和数据接收处理引擎H632的资源计数器H634,连接数据接收处理引擎H632 的远端等待单元地址FIFO H633。.
SC_MU—SEM初始化寄存器H6316的内容为SC—MU—SEM的工作方式和资 源计数器的初始值。工作方式至少2个比特,也可以更多,比如SC一MU一SEM 初始化寄存器的高8位为SC_MU_SEM的工作方式,低24位为资源计数器初 始值。
SC—MU_SEM的工作方式包括 工作方式O: SC_MUTEX,本地维护资源计数; 工作方式1: SC_MUTEX,远程维护资源计数; 工作方式2: SC—SEMAPHORE,本地维护资源计凄史; 工作方式3: SC_SEMAPHORE,远程维护资源计数;
SC—MLLSEM寄存器组模块维护了 SC—MLLSEM单元的所有寄存器,具体 包括如图所示的以下各寄存器。
信号量和互斥量识别寄存器SC一MU—SEMJD H6310 ,用于存储 SC_MUTEX或者SC_SEMAPHORE的名字name_,比如sc_semaphore(const char* name—, int init—value—)的name_。该寄存器是可选的,宽度可大于32比特。
SC—MU_SEM初始化寄存器SC_MU—SEMJNIT H6316,确定SC—MU_SEM 的工作方式和资源计数器的初始值。资源计数器的初始值对应于
sc_semaphore( int init_value_ )的init—value_。
资源锁定等待寄存器SC—MU—SEM一LW H6313,用于释放和阻塞获取一个 信号量,以及阻塞锁定和解锁一个互斥量。比如向该寄存器写入0代表/阻塞 获取/资源阻塞锁定,写入l代表资源释放/解锁。
资源尝试锁定/等待寄存器SC—MU—SEM_TLW H6314,用于尝试获取一个 信号量,以及尝试锁定一个互斥量。当处理器核读取该寄存器,就代表尝试获 取信号量或者资源尝试锁定互斥量。
本地SC—MU_SEM地址寄存器SC_MU—SEM_ ADDR H6311 ,用于给出本SC一MU一SEM单元区别于所有芯片内其它单元的地址。
远端SC_MU—SEM地址寄存器SC_MU_SEM_RMT_ADDR H6311,用于给 出远端SC_MU_SEM单元区别于所有芯片内其它单元的地址。当向远端 SC—MU一SEM发送应答时,需要该地址。
可选的消费者等待时间寄存器SC_MU_SEM—CWT H6317。该寄存器决定当 本地SC_MU_SEM单元向远端SC—MU—SEM单元发送RTY时所携带的等待时 间信息的值。典型的产生等待时间的方法是给出一个固定值,比如2微秒。
互斥量的所有者/信号量的生产者寄存器SC_MU_SEM_OWNERH6318。互 斥量只对当前的拥有者的解锁请求产生响应,信号量只对信号量的生产者的增 加信号量请求产生响应。当该寄存器为O,则对所有的解锁请求和增加信号量的 请求产生响应。
信号量当前值寄存器SC_MU_SEM—VALUE H6315,存储信号量计数器的 当前值。
SC_MU—SEM单元各个单元功能和信号流动如下
在工作方式1和工作方式3下,当处理器核写SC—MLLSEM锁定/等待寄存 器SC_MU—SEM—LW H6313 、 SC—MU—SEM尝试锁定/等待寄存器 SC—MU_SEM—TLW H634,数据发送引擎H630将SC—MU—SEM_ADDR H6311 、 SC—MU_SEM—RMT_ADDRH6311、 {锁定/等待请求(1)、尝试锁定/等待请求(2)、 释放/解锁请求识别(3) }按照交换单元所要求的包格式封装成请求数据包并发 送给交换单元适配器E;
在工作方式1和工作方式3下,由于可用资源计数在远端SC—MU—SEM单 元。在远端SC_MU_SEM单元没有可用资源的并且远端等待单元FIFO H633满 情况下,远端SC一MU一SEM单元的数据接收处理引擎H632将为请求数据包返 回一个重试RTY应答。RTY应答中携带的等待时间信息的值是远端 SC_MU—SEM单元的SC—MU_SEM—CWT H6317。在接收到RTY应答后等待 SC—MU_SEM_CWT时间,数据接收处理引擎将请求数据发送引擎重新发送上一 次发送的请求数据包。
在工作方式o和工作方式2下,当数据接收处理单元H632接收到了请求数 据包,则将请求数据的 SC—MU—SEM—RMT—ADDR 与自己的 SC—MU—SEM—ADDR比较,若相同,则接收该数据包并进4亍后续处理,否则直 接丟弃。
所述的后续处理包括当请求包是一个{锁定/等待请求(1),尝试锁定/等待请求(2)},则通知资源计
数器将计数减少1;若资源计数器通知成功,则数据接收处理单元H632立刻向 发送该请求数据包的SC—Ml^SEM单元发送ACK应答,ACK应答数据包至少 携带{锁定/等待请求成功(4)}或者{尝试锁定/等待请求成功(5)}信息;若资源计数 器通知获取资源失败,则对于{尝试锁定/等待请求(2)},数据接收处理单元H632 立刻向发送该请求数据包的SC—MU一SEM单元发送RTY应答,RTY应答数据 包至少携带{尝试锁定/等待请求失败(6)}和自身SC_MU—SEM—CWT的值,而 对于{锁定/等待请求(1)},则数据接收处理单元H632将接收到的请求包的 SC—MU—SEM一ADDR存储进远端等待单元地址FIFOH633。但是,如果之前远 端等待单元地址FIFO H633已满,则数据接收处理单元H632立刻向发送该请求 数据包的SC—MU—SEM单元发送RTY应答,RTY应答数据包至少携带{锁定/ 等待请求失败(7)}和自身SC—MU—SEM—CWT的值。当任何时刻资源重新可用, 则数据接收处理单元H632取出远端等待单元地址FIFO H633的队头 SC—MU—SEM—ADDR,并向该SC—MU—SEM_ADDR所代表的SC—MU—SEM单 元发送ACK应答,ACK应答数据包至少携带{锁定/等待请求成功(4)}。
当请求包是一个{释放/解锁请求}时,通知资源计数器将计数增加1。互斥 量只对当前的拥有者的解锁请求产生响应,用户也可以设定信号量只对信号量 的生产者的增加信号量请求产生响应。互斥量的所有者/信号量的生产者由寄存 器SC—MU—SEM—OWNER标识。当SC—MU_SEM—OWNER与接收到的请求数 据包的SC—MU一SEM—ADDR匹配时,资源计数器才会实际增加1,否则资源计 数器会忽略来自数据接收处理引擎的计数增加通知。
下面以两个实施例,说明基于本发明互斥和信号量的共享资源的应用。
第一个实例示出SC—MU—SEM单元的基本使用,包括SC_MU—SEM单元的 各个寄存器在实际使用中如何进行初始化。
在本例中,用户基于图2的多核处理器编写一个MP3+运动JPEG解码播放 器,如图5所示。该系统需要两个进程, 一个是SC—METHOD进程scm一mp3, 它解码Mp3,其工作原理是本地定时器Timer 1每产生一次中断,则读耳又一帧音 乐,进行解码;另外一个SCJTHREAD进程是sctJpeg,每解码10个音乐帧, 解码一个JPEG图片并在屏幕上显示。顶层模块的伪代码如下
SC—MODULE(mp3—mp4)
void scm_mp3;sc—semaphore sl("sl,,); sc—timer tl("tl"); SC—CTOR(mp3—mp4)
{
SC—METHOD(scm一mp3); sensitive《t 1. event; tl.start();
SC—THREAD(sct」peg)
};
SC—METHOD进程scm一mp3的伪代码如下 Void mp3一mp4:: scm—mp3 ()
decode—music(); if(count== 10) s 1 .post();
Void mp3_mp4::sct」peg() {
sl,wait(); decodejpeg(》
}
假设映射过程将上述两个进程分别映射到处理单元PE(0,0)和处理单元
P(U)。
任何两个(或者多个)位于不同PE的SC—MU—SEM都可以构成一个 SC—MU—SEM组合,完成用户代码中 一个sc—memaphore或者sc—mutex的功能。 在本例中,信号量si由PE(0,0)的SC—MU_SEM0 Q2模块和PE(l,l)的 SC_MU_SEM0 Ql模块构成的SC—MU—SEM对实现。
开发工具自动完成用户的SystemC到C翻译。该过程获得2个结果, 一是 PE(0,0)的进程scm—mp3的C代码,二是PE(1,1)的进程sctjpeg。
scm—mp3的C语言表述如下
void scm—mp3 〃处理器的 一个中断decode一music(); 〃分发一个资源,sl.post(); //REG32 (x)代表地址为x的32位寄存器 REG32(PE_0—0—SC_MU—SEM—0—BASE+0x 18=1;
}
PE(0,0)的外设初始化代码如下 int main()
WriteID(PE 0—0—SC一MU SEM—0_BASE)=,,PE1,1 ,Sl";
REG32(PE—0_0_SC—MU—SEM—0_BASE+0x 10)=0x001 ;〃本地SEM
REG32(PE—0—0—SC_MU_SEM—0—BASE+0xl4)—0;〃资源为O,Not used
REG32(PE—0_0—SC—MU—SEM—0_BASE+0x20)=AddressoffE(0,0).SC—MU—S EMO.本地地址寄存器;
REG32(PE—0—0—SC—MU—SEM—0—BASE+0x24)=Addressof PE( 1,1). SC—MU—SEMO.本地地址寄存器;
Start—timer(timer 1 'periodic, Interval)
Enble—interrupt—and—stop();
PE(l,l)的代码如下 int main() ;〃 sct」peg
WriteID(PE_l—l_SC—MU—SEM—O—BASE)="PE 1,1 ,S 1"; REG3 2(PE— 1 _ 1 —SC—MU—SEM—0—B ASE+Ox 10)=0x 101 ;〃本地SEM REG32(PE—1_1—SC—MU—SEM—0—BASE+0xl4"i;〃资源为O,Not used REG32(PE—l—l—SC—MU—SEM_0—BASE+0x20)=Address of
PE(0,0).SC^MLLSEMO.本地地址寄存器;
REG32(PE一1丄SC一MU—SEM—O—BASE+0x24)=Address of
PE(l, 1 ).SC—MU—SEMO.本地地址寄存器; While(true)
REG32(PE—1—1_SC_MU—SEM—0—B ASE+Ox 1 )=0;〃s 1 .wait decodejpeg();第二个实施例以一个4天线无线网状网接入点的实现来讲述如何使用 SC—MU—SEM单元作为信号量和本发明的基于信号量的资源共享应用。本例描 述了当信号量的消费者多于一个时,多个消费者进程同时请求信号量的情况。 消费者进程的请求消息被存储在远端等待单元地址FIFO H633中。当该FIFO满 时,后到来的消费者的获取信号量的请求被立刻应答TRY,在TRY应答中包括 等待时长。等待时长由发送应答的SC_MU—SEM单元确定,在本例中釆用固定等 待时长应答,在更复杂的设计中,也可以根据一个算法采用可变时长应答。
如图6,图中的进程sct_eth0位于PE(O,O) L5,它与WiFi接口 Ll、 L10的 通信;进程set—ethl位于PE(2,0) L13,管理与WiFi接口 L3、 L9的通信。进程 sct一eth0和set—ethl将接收到的数据包的净荷放在片外存储器L2中,而将包头 存储于位于全局资源D的队列pkt—q中。进程set—routel L15和set—route2 L16 分别运行路由算法,将存储的数据包转发到相应的WiFi接口。进程set—routel L15和sct_route2 L16同时访问pkt—q的队列头,因此需要一个信号量sem2保护 队列头;进程set—eth0和set—ethl同时访问pkt—q的队尾,需要一个semi保护 队列尾。此外,在全局资源D中还包括一个rx一cnt变量,它采用互斥量mul 进行保护,记录从四个WiFi接口收到的数据包的总数。
如图7, semi由位于PE(O,O)的SC—MU_SEM单元Jl 、位于GR的 SC—MU—SEM单元J3和位于PE(2,0)的SC—MU—SEM单元J6共同构成。J3维护 信号量的值,且该值;陂初始化为1。当set—ethO(或set—ethl)调用semi.wait(), — 个信号量锁定请求被从Jl(或J6)发到J3。当J3检测到信号量的值不为0,则将 信号量的值减少l,并发送ACK应答给J1 (或者J6),从而,进程sct—eth0获 得了信号量,将接收的数据包的包头信息加入到pkt一q队列尾部。若J3检测到 信号量的值为0,则将来自Jl(或J6)的锁定请求中本地地址加入到J3的远端等 待单元地址FIFOG16。当信号量的值重新为1,则远端等待单元地址FIFOG16 的请求地址被取出,J3发送ACK给请求地址对应的SC—MU—SEM单元Jl(或 J6)。
类似的,进禾呈set—routel和set—routel通过sem2 i方问pkt_q的队头。 当sct一eth0(或sct一ethl)接收到一个数据包,它还需要修改rx—cnt,该变量通 过mul进行保护。mul由位于PE(0,0)的SC_MU—SEM单元J2、位于GR的 SC—MU—SEM单元J4和位于PE(2,0)的SC—MU—SEM单元J7共同构成。进程set—eth0(或set—ethl)通过Jl(或者J7)请求锁定mul ,则 一个锁定请求被发送给J4。 当J4检测到信号量的状态为非锁定,则将该信号量锁定,并发送ACK应答给 J2(或者J7 ),从而,进程set—eth0获得了 rx—cnt的访问权,进程set—eth0将rx—cnt 加1。若J4检测到信号量为锁定,则将来自J2(或J7)的锁定请求中本地地址加 入到J3的远端等待单元地址FIFOG16。当互斥量#1解锁,则远端等待单元地址 FIFO G16的请求地址被取出,J3发送ACK给请求地址对应的SC—MU—SEM单 元Jl(或J6),完成锁定。进程set—eth0(或set—ethl)通过Jl(或者J7)请求解锁mul, 一个解锁请求被发送给J4。当J4检测到当前互斥量的所有者为J2(或者J7),则 完成信号量解锁,并发送ACK给J2。若当前当前互斥量的所有者不是J2(或者 J7),则发送TRY通知给J2(或者J7)解锁失败。
本发明的互斥和信号量单元SC_MU—SEM支持灵活的多个进程间基于 sc—mutex 、 sc—semaphore 的凄t氺居共享,支持声斤有的 SystemC sc—mutex 、 sc_semaphore语法。
本发明的互斥和信号量单元SC_MU—SEM不^又可以用于SystemC优化的多 核处理器,也可以用于任何形式的多核处理器中。
最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技 术方法进行限制,本发明在应用上可以延伸为其它的》务改、变化、应用和实施 例,并且因此认为所有这样的^^改、变化、应用、实施例都在本发明的精神和 教导范围内。
权利要求
1、一种满足systemC语法的多核处理器的互斥和信号量单元组,所述互斥和信号量单元组包括按照SystemC语法的sc_mutex(name)、sc_mutex.lock()、sc_mutex.trylock()、sc_mutex.unlock()、sc_semaphore.wait()、sc_semaphore.trywait()、sc_semaphore.post()、sc_semaphore(init_value)、sc_semaphore(name,init_value)函数代码实现的逻辑电路,所述逻辑电路用于向处理器核运行时控制器发送激活和暂停处理器的信号,并使得软件开发工具的映射算法将位于不同处理单元的互斥和信号量单元组重新组合,实现SystemC的sc_mutex或者sc_semaphore语法单元所定义的功能。
2、 权利要求1的互斥和信号量单元组,包括资源计数器,与数据发送引擎和SCUMU—SEM寄存器组分别相连,用于 资源计数;数据发送引擎,与所述交换单元适配器相连,用于发送数据包; 数据接收引擎,与所述交换单元适配器相连,用于接收数据包; SC_MU—SEM寄存器组,与所述数据发送引擎、所述数据接收引擎、所 述资源计数器以及所述本地总线分别相连,用于根据资源计数器的状态控制 数据包的发送和接收、资源的锁定和解锁以及更新资源计数。
3、 权利要求2的互斥和信号量单元组,还包括远端等待单元地址FIFO。
4、 权利要求2的互斥和信号量单元组,其中,当处理器核调用 scjnutex.lock()或者sc—semaphore.wait()且所述资源计数器的计数为零时, SC_MU—SEM寄存器组输出"暂停"信号,暂停处理器的执行;当非本地处 理器核调用sc—mutex.lock()或者sc—semaphore.wait()且所述资源计数器的计数 为零时,所述SC一MU一SEM寄存器组向远端处理器核发送重试应答包。
5、 权利要求2的互斥和信号量单元组,其中,所述SC_MU_SEM寄存器 组包括信号量和互斥量识别寄存器,用于存储互斥或者信号量的名称; 初始化寄存器,用于存储互斥和信号量单元的工作方式和资源计数器的 初始值;资源锁定等待寄存器,用于释放和阻塞获取一个信号量,以及阻塞锁定 和解锁一个互斥量;资源尝试锁定等待寄存器,用于尝试获取一个信号量,以及尝试锁定一 个互斥量,当处理器核读取该寄存器,表示尝试获取信号量或者资源尝试锁定互斥量;本地互斥和信号量单元地址寄存器,用于给出本互斥和信号量单元区别于所有芯片内其它单元的地址;远端互斥和信号量单元地址寄存器,用于给出远端互斥和信号量单元区 别于所有芯片内其它单元的地址。
6、 权利要求5的互斥和信号量单元组,其中,所述互斥和信号量单元寄 存器组还包括消费者等待时间寄存器,用于决定当本地互斥和信号量单元 向远端互斥和信号量单元发送RTY时所携带的等待时间信息的值,典型的产 生等待时间的方法是给出一个固定值;当SC—MU—SEM—CWT寄存器的值为 0,用于对所有的解锁请求和增加信号量的请求产生响应。
7、 权利要求5的互斥和信号量单元组,其中,所述互斥和信号量单元寄 存器组还包括SC—MU—SEM—OWNER寄存器,用于决定当本地互斥和信号 量单元向远端互斥和信号量单元发送RTY时所携带的等待时间信息的值;信 号量当前值寄存器,用于存储信号量计数器的当前值。
8、 权利要求5的互斥和信号量单元组,其中,所述互斥和信号量单元组 的工作方式包括互斥,本地维护资源计数;互斥,远程维护资源计数;信 号量,本地维护资源计数;信号量,远程维护资源计数。
9、 权利要求8的互斥和信号量单元组,其中,在所述本地维护资源计数工作方式下,当处理器核写锁定/等待寄存器、尝试锁定/等待寄存器,数据发 送引擎将本地互斥和信号量单元组地址寄存器和远端互斥和信号量单元地址寄存器的值及对应状态按照交换单元所要求的包格式封装并发送给交换单元 适配器。
10、 权利要求8的互斥和信号量单元组,其中,在所述远程维护资源计数工作方式下,当数据接收引擎接收到请求数据包,将请求数据的远端互斥 和信号量单元地址寄存器与本地互斥和信号量单元地址寄存器比较,若相同,则接收该请求数据包并进行对应的锁定、解锁、等待或者释放处理。
11、 权利要求IO的互斥和信号量单元组,其中,当所述请求数据包是锁定/等待请求或者尝试锁定/等待请求,通知资源计数器将计数减l;若资源计 数器通知成功,则数据接收引擎向发送该请求数据包的互斥和信号量单元发 送成功应答;若资源计数器通知失败,则对于尝试锁定/等待请求,数据接收引擎向发送该请求数据包的互斥和信号量单元发送包含失败信息和自身消费者等待时间寄存器值的RTY应答,对于锁定/等待请求,数据接收引擎将接收 到的请求包的本地互斥和信号量单元地址存储进远端等待单元地址FIFO。
12、 权利要求IO的互斥和信号量单元组,其中,当所述请求数据包是释 放/解锁请求时,通知资源计数器将计数增1,当SC—MU—SEM—OWNER与接 收到的请求数据包的本地互斥和信号量单元地址寄存器匹配时,资源计数器 增1。
13、 权利要求2的多核处理器,其中,用户代码的sc_smaphore(init_value) 操作在所述SC—MU一SEM单元中被如下翻译处理器核将init—value写入初始 化寄存器,从而初始化初始资源计数为init—value。
全文摘要
本发明公开一种满足systemC语法的多核处理器的互斥和信号量单元组,包括按照SystemC语法的sc_mutex(name)、sc_mutex.lock()、sc_mutex.trylock()、sc_mutex.unlock()、sc_semaphore.wait()、sc_semaphore.trywait()、sc_semaphore.post()、sc_semaphore(init_value)、sc_semaphore(name,init_value)函数代码实现的逻辑电路,所述逻辑电路用于向处理器核运行时控制器发送激活和暂停处理器的信号,并允许软件开发工具的映射算法将位于不同处理单元的多个互斥和信号量单元重新组合,完成SystemC语言所定义的sc_mutex或者sc_semaphore语法单元单元的功能。通过应用本发明,使得本地资源可以用于任何多个处理单元之间、处理单元和外设之间的资源共享与同步。
文档编号G06F17/50GK101635006SQ200810117018
公开日2010年1月27日 申请日期2008年7月22日 优先权日2008年7月22日
发明者菲 任, 祥 刘, 张金龙, 曦 陈, 毅 黄 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1