CN101635006B - 一种满足SystemC语法的多核处理器的互斥和信号量单元组 - Google Patents

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

Info

Publication number
CN101635006B
CN101635006B CN2008101170184A CN200810117018A CN101635006B CN 101635006 B CN101635006 B CN 101635006B CN 2008101170184 A CN2008101170184 A CN 2008101170184A CN 200810117018 A CN200810117018 A CN 200810117018A CN 101635006 B CN101635006 B CN 101635006B
Authority
CN
China
Prior art keywords
semaphore
mutual exclusion
mutex
sem
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2008101170184A
Other languages
English (en)
Other versions
CN101635006A (zh
Inventor
陈曦
黄毅
刘祥
张金龙
任菲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Computing Technology of CAS
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CN2008101170184A priority Critical patent/CN101635006B/zh
Publication of CN101635006A publication Critical patent/CN101635006A/zh
Application granted granted Critical
Publication of CN101635006B publication Critical patent/CN101635006B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

本发明公开一种满足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语法单元单元的功能。通过应用本发明,使得本地资源可以用于任何多个处理单元之间、处理单元和外设之间的资源共享与同步。

Description

一种满足SystemC语法的多核处理器的互斥和信号量单元组
技术领域
本发明涉及一种多核处理器,更具体地,本发明涉及一种满足SystemC语法要求的多核处理器的互斥和信号量单元组。
背景技术
近年来,多核处理器技术得到了蓬勃发展。究其原因,主要有以下几点:第一,设计需求;硅的成本越来越低,集成度越来越高,多核的规则结构可简单有效的利用更多的硅面积;第二,业务需求;多媒体业务越来越复杂,要求平台的灵活性和处理性能越来越高,同时还要求功耗保持在允许的范围内,多核处理器可潜在提供最高性能功耗比,可供更高性能的计算和灵活性;第三,上市时间(Time to market)需求;上市时间要求越来越短,多核处理器的并行开发可以满足所需上市时间。
通常,多核处理器有以下两种发展模式。
第一类多核处理器不改变现有顺序执行的设计流程和编程模式,只是采用更先进的编译技术来适应多核的架构。
多核在这里起的作用仅是代替单核而提供更多的计算功能。目前多数的处理器,无论是单核还是多核,都采用顺序执行的编程模型。在这种模型下,为了支持多任务,引入了支持多任务的操作系统。操作系统可以为进行多任务编程和并行执行代码提供途径。但是,在存在操作系统和多个任务并行存在的情况下,整个嵌入式系统又变得相对十分复杂,调试难度与单核单任务相比大大增加。一种调试方式为断点调试,当处理器在断点处暂停执行时,外部输入条件仍然可能发生变化,因为处理器的暂停,错误发生的条件可能不能再现。另外一种调试方式为打印输出,将可能出错的地方打印出来,由于打印的结果可能非常繁多,错误难以定位。而且一旦处理器执行出错,可能在错误发生前打印本身已经不能工作。引入了操作系统后的另外一个问题是处理器的空闲运转导致的电量浪费。由于有多个任务,虽然外设可以根据需要进行停止,但处理器在什么时候应该进入节电模式以及何时从节电模式中恢复变得难以确定,从而导致电量浪费。据统计,由于上述原因,造成大约一半的嵌入式系统项目失败。
(2)第二类多核处理器采用并行语言和编程模式,根据并行语言和编程模式的需要来设计处理器的物理架构。采用这种方式设计的多核处理器能够与并行语言紧密配合,并期望克服第一类处理器调试困难和电量浪费的缺点。
目前的多核处理器都属于第一类,而第二类处理器仍然处于发展初期,没有成熟的设计应用。
在已有处理器中,互斥和信号量一般采用操作系统进行模拟,在维护资源计数器的时候,关闭处理器中断,即可实现简单的信号量和互斥。但对于复杂的互斥和信号量以及针对特定语法的处理,一般无能为力。
发明内容
为克服现有多核处理器互斥和信号量单元处理能力有限的缺陷,本发明提出一种满足SystemC语法的多核处理器的互斥和信号量单元组。
根据本发明的一个方面,提出了一种满足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)函数代码实现的逻辑电路,所述逻辑电路用于向处理器核运行时控制器发送激活和暂停处理器的信号,并使得软件开发工具的映射算法将位于不同处理单元的互斥和信号量单元组重新组合,实现sc_mutex或者sc_semaphore语法单元所定义的功能。
所述互斥和信号量单元组,包括:
资源计数器,与数据发送引擎和SC_MU_SEM寄存器组相连,用于资源计数;
数据发送引擎,与所述交换单元适配器相连,用于发送数据包;
数据接收引擎,与所述交换单元适配器相连,用于接收数据包;
SC_MU_SEM寄存器组,与所述数据发送引擎、所述数据接收引擎、所述资源计数器以及所述本地总线相连,用于根据资源计数器的状态控制数据包的发送和接收、资源的锁定和解锁以及更新资源计数。
所述互斥和信号量单元组,还包括:远端等待单元地址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时所携带的等待时间信息的值;信号量当前值寄存器,用于存储信号量计数器的当前值。
其中,所述互斥和信号量单元组的工作方式包括:互斥,本地维护资源计数;互斥,远程维护资源计数;信号量,本地维护资源计数;信号量,远程维护资源计数。
其中,在所述本地维护资源计数工作方式下,当处理器核写锁定/等待寄存器、尝试锁定/等待寄存器,数据发送引擎将本地互斥和信号量单元组地址寄存器和远端互斥和信号量单元地址寄存器的值及对应状态按照交换单元所要求的包格式封装并发送给交换单元适配器。
其中,在所述远程维护资源计数工作方式下,当数据接收引擎接收到请求数据包,将请求数据的远端互斥和信号量单元地址寄存器与本地互斥和信号量单元地址寄存器比较,若相同,则接收该请求数据包并进行对应的锁定、解锁、等待或者释放处理。
其中,当所述请求数据包是锁定/等待请求或者尝试锁定/等待请求,通知资源计数器将计数减1;若资源计数器通知成功,则数据接收引擎向发送该请求数据包的互斥和信号量单元发送成功应答;若资源计数器通知失败,则对于尝试锁定/等待请求,数据接收引擎向发送该请求数据包的互斥和信号量单元发送包含失败信息和自身消费者等待时间寄存器值的RTY应答,对于锁定/等待请求,数据接收引擎将接收到的请求包的本地互斥和信号量单元地址存储进远端等待单元地址FIFO。
其中,当所述请求数据包是释放/解锁请求时,通知资源计数器将计数增1,当SC_MU_SEM_OWNER与接收到的请求数据包的本地互斥和信号量单元地址寄存器匹配时,资源计数器增1。
其中,用户代码的sc_smaphore(init_value)操作在所述SC_MU_SEM单元中被如下翻译:处理器核将init_value写入初始化寄存器,从而初始化初始资源计数为init_value。
通过应用本发明,实现了支持SystemC语法单元到芯片内资源映射,使得本地资源可以用于任何多个处理单元之间、处理单元和外设之间的资源共享与同步。本发明的互斥和信号量单元SC_MU_SEM支持灵活的多个进程间基于sc_mutex、sc_semaphore的数据共享,支持所有的SystemC sc_mutex、sc_semaphore语法。
附图说明
图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)A1,也可以包括同步动态存储器接口(SDRAMC)A2、A5、A8和A12,还包括数字电视广播异步串行接口(DVB ASI)A3、数字电视广播同步串行接口(DVB SPI)A9、液晶显示器接口(LCDC)A4、闪存接口(Nand flashC)A6、外设互联接口(PCIH)A7、外部事件触发单元A11、高清视频输出接口(YCbCr)A10,这些外设构成整个片上网络的外围部分与外界通信。在图1所示的多核处理器中,分别标识为PE(0,0)、PE(0,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等语法单元只能为两个进程同时使用。因此,本地资源单元G使用效率较低。
如图2所示,根据本发明的实施例的一种改进的SystemC优化的多核处理器。所述多核处理器包括多个交换单元B及其连接线C构成片上网络,SystemC优化的处理单元H通过交换单元适配器E连接到交换单元S,与其它处理单元或者多个外设A1-A12进行通信。
处理单元不通过其具有的本地资源单元与其它处理单元直接连接,而是通过本地资源单元经交换单元适配器与总线相连接,并且通过下图3中所示的其它控制组件完成通信控制,实现一个本地资源单元可以为所连接的多个处理单元F所使用。
图3为根据本发明的实施例的用于SystemC优化的多核处理器的处理单元示意图。
多核处理器的处理单元包括一个处理器核H1,以及通过本地总线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可以不依赖于本地资源单元内的其它子模块而存在。也就是说,本地资源H6可以包括SystemC优化的事件处理单元组H61、SystemC优化的先进先出队列单元组H62和SYstemC优化的互斥和信号量单元组H63的其中一个或者多个。
定时器组H3包括多个定时器,每个定时器向事件处理单元组的对应单元输出一个超时通知信号,多个通知信号构成信号组M1。
互斥和信号量单元组H63包括多个独立的互斥和信号量单元。每一个互斥和信号量单元按照SystemC语法的sc_mutex.lock()、sc_mutex.trylock()、sc_mutex.unlock()、sc_semaphore.wait()、sc_semaphore.trywait()、sc_semaphore.post()、sc_semaphore.get_value()函数代码实现的逻辑电路函数代码实现的逻辑电路,用于向处理器核运行时控制器发送激活和暂停处理器的信号,并允许软件开发工具的映射算法将位于不同处理单元的多个互斥和信号量单元重新组合共同完成sc_mutex或者一个sc_semaphore语法单元所定义的功能。
互斥和信号量单元组的具体设计
在操作系统中,互斥(mutex)用来保护共享资源,以避免多个进程同时读写共享资源,导致系统行为的不确定。互斥具有锁定和非锁定两种状态。如果有进程需要使用由互斥保护的资源,而这时互斥没有被锁定,则该进程就可以将互斥锁定,这时它就可以唯一的获得由该互斥保护的资源,并允许对资源进行任何的合法操作。当互斥已经由另外的进程锁定,这时申请互斥的进程就会被阻塞,直到锁定互斥的进程将互斥解锁。
根据IEEE P1666 SystemC标准,通过sc_mutex.lock()进程可以锁定互斥,如果互斥已经被锁定,这时申请锁定的进程就被阻塞直到互斥被解锁。通过sc_mutex.trylock()进程可以查询互斥是否被锁定,以决定是否使用sc_mutex.lock()锁定互斥从而避免进程被阻塞。通过sc_mutex.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_是信号量的初始计数,必须大于0,没有缺省值,不能够完成隐含的类型转换。name_是通道名。
由于互斥和信号量的类似性,它们可以采用同一个硬件资源实现,因此互斥和信号量单元组H63成为本地资源H6的一个重要组成部分之一。
在已有处理器中,互斥和信号量一般采用操作系统进行模拟,在维护资源计数器的时候,关闭处理器中断,即可实现简单的信号量和互斥。
由于SystemC语法的特殊要求,以及从SystemC优化的多核处理器在节电和便于调试的角度考虑,在处理单元内设计了互斥和信号量单元组。
根据本发明的互斥和信号量单元组内部包括多个独立的SC_MU_SEM单元。每个SC_MU_SEM单元如图4所示。
SC_MU_SEM单元对外连接关系:连接到交换单元适配器E,从而实现与外界的通信;连接到处理单元本地总线H2,保证处理器核H1可以对其访问;连接到处理器核运行时控制器H8,从而对处理器的运行进行控制。
SC_MU_SEM单元组成与内部连接:连接处理器本地总线H2和SC_MU_SEM寄存器组H631的本地总线接口H637,处理器核H1通过该接口访问SC_MU_SEM寄存器组H631来控制整个SC_MU_SEM单元的工作;连接除远端等待单元地址FIFO H633外所有其它单元为所有其它单元提供状态和控制信息的SC_MU_SEM寄存器组H631;连接SC_MU_SEM寄存器组H631和交换单元适配器E的数据发送引擎H630;连接到交换单元适配器E的数据接收处理引擎H632;连接SC_MU_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的工作方式包括:
工作方式0:SC_MUTEX,本地维护资源计数;
工作方式1:SC_MUTEX,远程维护资源计数;
工作方式2:SC_SEMAPHORE,本地维护资源计数;
工作方式3:SC_SEMAPHORE,远程维护资源计数;
SC_MU_SEM寄存器组模块维护了SC_MU_SEM单元的所有寄存器,具体包括如图所示的以下各寄存器。
信号量和互斥量识别寄存器SC_MU_SEM_ID H6310,用于存储SC_MUTEX或者SC_SEMAPHORE的名字name_,比如sc_semaphore(constchar*name_,int init_value_)的name_。该寄存器是可选的,宽度可大于32比特。
SC_MU_SEM初始化寄存器SC_MU_SEM_INIT H6316,确定SC_MU_SEM的工作方式和资源计数器的初始值。资源计数器的初始值对应于sc_semaphore(int init_value_)的init_value_。
资源锁定等待寄存器SC_MU_SEM_LW H6313,用于释放和阻塞获取一个信号量,以及阻塞锁定和解锁一个互斥量。比如:向该寄存器写入0代表/阻塞获取/资源阻塞锁定,写入1代表资源释放/解锁。
资源尝试锁定/等待寄存器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_OWNER H6318。互斥量只对当前的拥有者的解锁请求产生响应,信号量只对信号量的生产者的增加信号量请求产生响应。当该寄存器为0,则对所有的解锁请求和增加信号量的请求产生响应。
信号量当前值寄存器SC_MU_SEM_VALUE H6315,存储信号量计数器的当前值。
SC_MU_SEM单元各个单元功能和信号流动如下:
在工作方式1和工作方式3下,当处理器核写SC_MU_SEM锁定/等待寄存器SC_MU_SEM_LW H6313、SC_MU_SEM尝试锁定/等待寄存器SC_MU_SEM_TLW H634,数据发送引擎H630将SC_MU_SEM_ADDR H6311、SC_MU_SEM_RMT_ADDR H6311、{锁定/等待请求(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时间,数据接收处理引擎将请求数据发送引擎重新发送上一次发送的请求数据包。
在工作方式0和工作方式2下,当数据接收处理单元H632接收到了请求数据包,则将请求数据的SC_MU_SEM_RMT_ADDR与自己的SC_MU_SEM_ADDR比较,若相同,则接收该数据包并进行后续处理,否则直接丢弃。
所述的后续处理包括:
当请求包是一个{锁定/等待请求(1),尝试锁定/等待请求(2)},则通知资源计数器将计数减少1;若资源计数器通知成功,则数据接收处理单元H632立刻向发送该请求数据包的SC_MU_SEM单元发送ACK应答,ACK应答数据包至少携带{锁定/等待请求成功(4)}或者{尝试锁定/等待请求成功(5)}信息;若资源计数器通知获取资源失败,则对于{尝试锁定/等待请求(2)},数据接收处理单元H632立刻向发送该请求数据包的SC_MU_SEM单元发送RTY应答,RTY应答数据包至少携带{尝试锁定/等待请求失败(6)}和自身SC_MU_SEM_CWT的值,而对于{锁定/等待请求(1)},则数据接收处理单元H632将接收到的请求包的SC_MU_SEM_ADDR存储进远端等待单元地址FIFO H633。但是,如果之前远端等待单元地址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,其工作原理是本地定时器Timer1每产生一次中断,则读取一帧音乐,进行解码;另外一个SC_THREAD进程是sct_jpeg,每解码10个音乐帧,解码一个JPEG图片并在屏幕上显示。顶层模块的伪代码如下:
SC_MODULE(mp3_mp4)
{
void scm_mp3;
sc_semaphore s1(“s1”);
sc_timer t1(“t1”);
SC_CTOR(mp3_mp4)
{
SC_METHOD(scm_mp3);
sensitive<<t1.event;
t1.start();
SC_THREAD(sct_jpeg)
}
};
SC_METHOD进程scm_mp3的伪代码如下:
Void mp3_mp4::scm_mp3()
{
   decode_music();
   if(count==10)s1.post();
}
Void mp3_mp4::sct_jpeg()
{
s1.wait();
decode_jpeg();
}
假设映射过程将上述两个进程分别映射到处理单元PE(0,0)和处理单元P(1,1)。
任何两个(或者多个)位于不同PE的SC_MU_SEM都可以构成一个SC_MU_SEM组合,完成用户代码中一个sc_memaphore或者sc_mutex的功能。在本例中,信号量s1由PE(0,0)的SC_MU_SEM0 Q2模块和PE(1,1)的SC_MU_SEM0 Q1模块构成的SC_MU_SEM对实现。
开发工具自动完成用户的SystemC到C翻译。该过程获得2个结果,一是PE(0,0)的进程scm_mp3的C代码,二是PE(1,1)的进程sct_jpeg。
scm_mp3的C语言表述如下:
void scm_mp3//处理器的一个中断
{
      decode_music();
    //分发一个资源,s1.post();
    //REG32(x)代表地址为x的32位寄存器
    REG32(PE_0_0_SC_MU_SEM_0_BASE+0x18=1;
    }
    PE(0,0)的外设初始化代码如下:
    int main()
    {
    WriteID(PE_0_0_SC_MU_SEM_0_BASE)=”PE1,1,S1”;
    REG32(PE_0_0_SC_MU_SEM_0_BASE+0x10)=0x001;//本地SEM
    REG32(PE_0_0_SC_MU_SEM_0_BASE+0x14)==0;//资源为0,Not used
    REG32(PE_0_0_SC_MU_SEM_0_BASE+0x20)=AddressofPE(0,0).SC_MU_S
EM0.本地地址寄存器;
    REG32(PE_0_0_SC_MU_SEM_0_BASE+0x24)=Addressof
PE(1,1).SC_MU_SEM0.本地地址寄存器;
    Start_timer(timer1,periodic,Interval)
    Enble_interrupt_and_stop();
    }
    PE(1,1)的代码如下:
    int main();//sct_jpeg
    {
    WriteID(PE_1_1_SC_MU_SEM_0_BASE)=”PE1,1,S1”;
    REG32(PE_1_1_SC_MU_SEM_0_BASE+0x10)=0x101;//本地SEM
    REG32(PE_1_1_SC_MU_SEM_0_BASE+0x14)==0;//资源为0,Not used
    REG32(PE_1_1_SC_MU_SEM_0_BASE+0x20)=Address    of
PE(0,0).SC_MU_SEM0.本地地址寄存器;
    REG32(PE_1_1_SC_MU_SEM_0_BASE+0x24)=Address    of
    PE(1,1).SC_MU_SEM0.本地地址寄存器;
    While(true)
    {
    REG32(PE_1_1_SC_MU_SEM_0_BASE+0x1)=0;//s1.wait
    decode_jpeg();
}
}
第二个实施例以一个4天线无线网状网接入点的实现来讲述如何使用SC_MU_SEM单元作为信号量和本发明的基于信号量的资源共享应用。本例描述了当信号量的消费者多于一个时,多个消费者进程同时请求信号量的情况。消费者进程的请求消息被存储在远端等待单元地址FIFO H633中。当该FIFO满时,后到来的消费者的获取信号量的请求被立刻应答TRY,在TRY应答中包括等待时长。等待时长由发送应答的SC_MU_SEM单元确定,在本例中采用固定等待时长应答,在更复杂的设计中,也可以根据一个算法采用可变时长应答。
如图6,图中的进程sct_eth0位于PE(0,0)L5,它与WiFi接口L1、L10的通信;进程sct_eth1位于PE(2,0)L13,管理与WiFi接口L3、L9的通信。进程sct_eth0和sct_eth1将接收到的数据包的净荷放在片外存储器L2中,而将包头存储于位于全局资源D的队列pkt_q中。进程sct_route1 L15和sct_route2 L16分别运行路由算法,将存储的数据包转发到相应的WiFi接口。进程sct_route1L15和sct_route2 L16同时访问pkt_q的队列头,因此需要一个信号量sem2保护队列头;进程sct_eth0和sct_eth1同时访问pkt_q的队尾,需要一个sem1保护队列尾。此外,在全局资源D中还包括一个rx_cnt变量,它采用互斥量mu1进行保护,记录从四个WiFi接口收到的数据包的总数。
如图7,sem1由位于PE(0,0)的SC_MU_SEM单元J1、位于GR的SC_MU_SEM单元J3和位于PE(2,0)的SC_MU_SEM单元J6共同构成。J3维护信号量的值,且该值被初始化为1。当sct_eth0(或sct_eth1)调用sem1.wait(),一个信号量锁定请求被从J1(或J6)发到J3。当J3检测到信号量的值不为0,则将信号量的值减少1,并发送ACK应答给J1(或者J6),从而,进程sct_eth0获得了信号量,将接收的数据包的包头信息加入到pkt_q队列尾部。若J3检测到信号量的值为0,则将来自J1(或J6)的锁定请求中本地地址加入到J3的远端等待单元地址FIFO G16。当信号量的值重新为1,则远端等待单元地址FIFO G16的请求地址被取出,J3发送ACK给请求地址对应的SC_MU_SEM单元J1(或J6)。
类似的,进程sct_route1和sct_route1通过sem2访问pkt_q的队头。
当sct_eth0(或sct_eth1)接收到一个数据包,它还需要修改rx_cnt,该变量通过mu1进行保护。mu1由位于PE(0,0)的SC_MU_SEM单元J2、位于GR的SC_MU_SEM单元J4和位于PE(2,0)的SC_MU_SEM单元J7共同构成。进程sct_eth0(或sct_eth1)通过J1(或者J7)请求锁定mu1,则一个锁定请求被发送给J4。当J4检测到信号量的状态为非锁定,则将该信号量锁定,并发送ACK应答给J2(或者J7),从而,进程sct_eth0获得了rx_cnt的访问权,进程sct_eth0将rx_cnt加1。若J4检测到信号量为锁定,则将来自J2(或J7)的锁定请求中本地地址加入到J3的远端等待单元地址FIFO G16。当互斥量被解锁,则远端等待单元地址FIFO G16的请求地址被取出,J3发送ACK给请求地址对应的SC_MU_SEM单元J1(或J6),完成锁定。进程sct_eth0(或sct_eth1)通过J1(或者J7)请求解锁mu1,一个解锁请求被发送给J4。当J4检测到当前互斥量的所有者为J2(或者J7),则完成信号量解锁,并发送ACK给J2。若当前当前互斥量的所有者不是J2(或者J7),则发送TRY通知给J2(或者J7)解锁失败。
本发明的互斥和信号量单元SC_MU_SEM支持灵活的多个进程间基于sc_mutex、sc_semaphore的数据共享,支持所有的SystemC sc_mutex、sc_semaphore语法。
本发明的互斥和信号量单元SC_MU_SEM不仅可以用于SystemC优化的多核处理器,也可以用于任何形式的多核处理器中。
最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。

Claims (12)

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语法单元所定义的功能;
所述逻辑电路,包括:
资源计数器,与数据接收引擎和SC_MU_SEM寄存器组分别相连,用于资源计数;
数据发送引擎,与交换单元适配器相连,用于发送数据包;
数据接收引擎,与所述交换单元适配器相连,用于接收数据包;
SC_MU_SEM寄存器组,与所述数据发送引擎、所述数据接收引擎、所述资源计数器以及本地总线分别相连,用于根据资源计数器的状态控制数据包的发送和接收、资源的锁定和解锁以及更新资源计数。
2.权利要求1的互斥和信号量单元组,还包括:远端等待单元地址FIFO。
3.权利要求1的互斥和信号量单元组,其中,当处理器核调用sc_mutex.lock()或者sc_semaphore.wait()且所述资源计数器的计数为零时,SC_MU_SEM寄存器组输出“暂停”信号,暂停处理器的执行;当非本地处理器核调用sc_mutex.lock()或者sc_semaphore.wait()且所述资源计数器的计数为零时,所述SC_MU_SEM寄存器组向远端处理器核发送重试应答包。
4.权利要求1的互斥和信号量单元组,其中,所述SC_MU_SEM寄存器组包括:
信号量和互斥量识别寄存器,用于存储互斥或者信号量的名称;
初始化寄存器,用于存储互斥和信号量单元的工作方式和资源计数器的初始值;
资源锁定等待寄存器,用于释放和阻塞获取一个信号量,以及阻塞锁定和解锁一个互斥量;
资源尝试锁定等待寄存器,用于尝试获取一个信号量,以及尝试锁定一个互斥量,当处理器核读取该寄存器,表示尝试获取信号量或者资源尝试锁定互斥量;
本地互斥和信号量单元地址寄存器,用于给出本互斥和信号量单元区别于所有芯片内其它单元的地址;
远端互斥和信号量单元地址寄存器,用于给出远端互斥和信号量单元区别于所有芯片内其它单元的地址。
5.权利要求4的互斥和信号量单元组,其中,所述SC_MU_SEM寄存器组还包括:消费者等待时间寄存器,用于决定当本地互斥和信号量单元向远端互斥和信号量单元发送重试RTY应答时所携带的等待时间信息的值,产生等待时间的方法是给出一个固定值。
6.权利要求4的互斥和信号量单元组,其中,所述SC_MU_SEM寄存器组还包括:SC_MU_SEM_OWNER寄存器,用于互斥量对当前的拥有者的解锁请求产生响应,信号量对信号量的生产者的增加信号量请求产生响应;当SC_MU_SEM_OWNER寄存器的值为0,用于对所有的解锁请求和增加信号量的请求产生响应。
7.权利要求4的互斥和信号量单元组,其中,所述互斥和信号量单元组的工作方式包括:互斥,本地维护资源计数;互斥,远程维护资源计数;信号量,本地维护资源计数;信号量,远程维护资源计数。
8.权利要求7的互斥和信号量单元组,其中,在所述远程维护资源计数工作方式下,当处理器核写锁定/等待寄存器、尝试锁定/等待寄存器,数据发送引擎将本地互斥和信号量单元地址寄存器和远端互斥和信号量单元地址寄存器的值及对应状态按照交换单元所要求的包格式封装并发送给交换单元适配器。
9.权利要求7的互斥和信号量单元组,其中,在所述本地维护资源计数工作方式下,当数据接收引擎接收到请求数据包,将请求数据的远端互斥和信号量单元地址寄存器与本地互斥和信号量单元地址寄存器比较。
10.权利要求9的互斥和信号量单元组,其中,当所述请求数据包是锁定/等待请求或者尝试锁定/等待请求,通知资源计数器将计数减1;若资源计数器通知成功,则数据接收引擎向发送该请求数据包的互斥和信号量单元发送成功应答;若资源计数器通知失败,则对于尝试锁定/等待请求,数据接收引擎向发送该请求数据包的互斥和信号量单元发送包含失败信息和自身消费者等待时间寄存器值的重试RTY应答,对于锁定/等待请求,数据接收引擎将接收到的请求包的本地互斥和信号量单元地址存储进远端等待单元地址FIFO。
11.权利要求9的互斥和信号量单元组,其中,所述SC_MU_SEM寄存器组还包括:SC_MU_SEM_OWNER寄存器,用于互斥量对当前的拥有者的解锁请求产生响应,当所述请求数据包是释放/解锁请求时,通知资源计数器将计数增1,当SC_MU_SEM_OWNER寄存器与接收到的请求数据包的本地互斥和信号量单元地址寄存器匹配时,资源计数器增1。
12.权利要求1的互斥和信号量单元组,其中,用户代码的sc_smaphore(init_value)操作在所述SC_MU_SEM寄存器组中被如下翻译:处理器核将init_value写入初始化寄存器,从而初始化初始资源计数为init_value。
CN2008101170184A 2008-07-22 2008-07-22 一种满足SystemC语法的多核处理器的互斥和信号量单元组 Active CN101635006B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101170184A CN101635006B (zh) 2008-07-22 2008-07-22 一种满足SystemC语法的多核处理器的互斥和信号量单元组

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101170184A CN101635006B (zh) 2008-07-22 2008-07-22 一种满足SystemC语法的多核处理器的互斥和信号量单元组

Publications (2)

Publication Number Publication Date
CN101635006A CN101635006A (zh) 2010-01-27
CN101635006B true CN101635006B (zh) 2012-02-29

Family

ID=41594192

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101170184A Active CN101635006B (zh) 2008-07-22 2008-07-22 一种满足SystemC语法的多核处理器的互斥和信号量单元组

Country Status (1)

Country Link
CN (1) CN101635006B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980544A (zh) * 2017-03-31 2017-07-25 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101840351A (zh) * 2010-04-20 2010-09-22 深圳市融创天下科技发展有限公司 一种基于多平台的自动互斥量运行方法
FR2971596B1 (fr) 2011-02-15 2016-01-01 Commissariat Energie Atomique Dispositif pour accelerer l'execution d'une simulation systemc
FR3002342B1 (fr) 2013-02-15 2015-02-27 Commissariat Energie Atomique Dispositif et procede pour accelerer la phase de mise a jour d'un noyau de simulation
CN104268105B (zh) * 2014-09-23 2017-06-30 天津国芯科技有限公司 处理器局部总线互斥存取的扩展结构及操作方法
CN110832570B (zh) * 2017-05-05 2022-01-25 罗杰·密德茂尔 使用四值逻辑的交互式故事系统
CN116048824B (zh) * 2023-03-30 2023-08-18 井芯微电子技术(天津)有限公司 一种多核处理器信号量系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1904873A (zh) * 2005-07-28 2007-01-31 大唐移动通信设备有限公司 嵌入式实时操作系统中多核处理器的核间通信方法及装置
CN101196826A (zh) * 2007-12-29 2008-06-11 中国科学院计算技术研究所 满足SystemC语法要求的多核处理器及获得其执行代码的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1904873A (zh) * 2005-07-28 2007-01-31 大唐移动通信设备有限公司 嵌入式实时操作系统中多核处理器的核间通信方法及装置
CN101196826A (zh) * 2007-12-29 2008-06-11 中国科学院计算技术研究所 满足SystemC语法要求的多核处理器及获得其执行代码的方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980544A (zh) * 2017-03-31 2017-07-25 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统
CN106980544B (zh) * 2017-03-31 2020-03-03 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统

Also Published As

Publication number Publication date
CN101635006A (zh) 2010-01-27

Similar Documents

Publication Publication Date Title
CN101635006B (zh) 一种满足SystemC语法的多核处理器的互斥和信号量单元组
US5577213A (en) Multi-device adapter card for computer
CN100565472C (zh) 一种适用于多处理器核系统芯片的调试方法
CN103221937B (zh) 用于处理集群的加载/存储电路
CN103150279B (zh) 一种主机与基板管理控制器共享设备的方法
US20040199716A1 (en) Single-chip microcomputer
CN101634979B (zh) 一种满足SystemC语法的多核处理器
US20040230771A1 (en) Reconfigurable signal processing IC with an embedded flash memory device
CN104714907B (zh) 一种pci总线转换为isa和apb总线设计方法
KR101733203B1 (ko) 아이디 컨버터를 포함하는 버스 시스템 및 그것의 변환 방법
Mitić et al. An overview of on-chip buses
CN108132910A (zh) 系统互连以及具有系统互连的片上系统
CN101329702A (zh) 一种满足SystemC语法的多核处理器的先进先出队列单元组
WO2021113778A1 (en) Data transfers between a memory and a distributed compute array
CN100580630C (zh) 满足SystemC语法要求的多核处理器及获得其执行代码的方法
CN101770362B (zh) 满足SystemC的处理器中的分布式动态进程生成单元
CN101315648A (zh) 一种满足systemC语法的多核处理器的事件处理单元组
JPH0710067B2 (ja) ディジタルデータ通信システム
US6529979B1 (en) Method and apparatus for a high-speed serial communications bus protocol with positive acknowledgement
Yu et al. Transaction level platform modeling in systemc for multi-processor designs
US7305633B2 (en) Distributed configuration of integrated circuits in an emulation system
CN107168867A (zh) 一种实现微控制器芯片的用户debug模式的方法
US6378019B1 (en) Method and system for interfacing a plurality of peripheral devices in a slave group interface device to a bus and a slave group interface device
Jeřábek Open-source and Open-hardware CAN FD Protocol Support
CN106598873A (zh) 一种实现mcu芯片的用户调试模式的方案

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant