CN101329702A - 一种满足SystemC语法的多核处理器的先进先出队列单元组 - Google Patents
一种满足SystemC语法的多核处理器的先进先出队列单元组 Download PDFInfo
- Publication number
- CN101329702A CN101329702A CNA2008101170165A CN200810117016A CN101329702A CN 101329702 A CN101329702 A CN 101329702A CN A2008101170165 A CNA2008101170165 A CN A2008101170165A CN 200810117016 A CN200810117016 A CN 200810117016A CN 101329702 A CN101329702 A CN 101329702A
- Authority
- CN
- China
- Prior art keywords
- fifo
- data
- local
- write
- unit
- 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.)
- Pending
Links
Images
Landscapes
- Multi Processors (AREA)
Abstract
本发明提出一种满足systemC语法的先进先出队列组,包括多个先进先出队列单元,所述先进先出队列单元向对应的事件处理单元组输出数据写入事件信号和数据读出事件信号,并且包括按照SystemC语法的sc_fifo(name,size)、sc_fifo(size)、sc_fifo.read()、sc_fifo.nb_read()、sc_fifo.write()、sc_fifo.nb_write()、sc_fifo.num_available()、sc_fifo.num_free()函数代码实现的逻辑电路,所述逻辑电路允许软件开发工具的映射算法将位于不同处理单元的多个先进先出队列单元重新组合,共同完成sc_fifo语法单元所定义的功能。实现了支持SystemC语法单元sc_fifo到芯片内资源映射,使得先进先出队列可以用于任何多个处理单元之间、处理单元和外设之间的资源共享与同步。
Description
技术领域
本发明涉及一种多核处理器,更具体地,本发明涉及一种满足SystemC语法要求的多核处理器的先进先出队列单元组。
背景技术
近年来,多核处理器技术得到了蓬勃发展。究其原因,主要有以下几点:第一,设计需求;硅的成本越来越低,集成度越来越高,多核的规则结构可简单有效的利用更多的硅面积;第二,业务需求;多媒体业务越来越复杂,要求平台的灵活性和处理性能越来越高,同时还要求功耗保持在允许的范围内,多核处理器可潜在提供最高性能功耗比,可供更高性能的计算和灵活性;第三,上市时间(Time to market)需求;上市时间要求越来越短,多核处理器的并行开发可以满足所需上市时间。
通常,多核处理器有以下两种发展模式。
第一类多核处理器不改变现有顺序执行的设计流程和编程模式,只是采用更先进的编译技术来适应多核的架构。
多核在这里起的作用仅是代替单核而提供更多的计算功能。目前多数的处理器,无论是单核还是多核,都采用顺序执行的编程模型。在这种模型下,为了支持多任务,引入了支持多任务的操作系统。操作系统可以为进行多任务编程和并行执行代码提供途径。但是,在存在操作系统和多个任务并行存在的情况下,整个嵌入式系统又变得相对十分复杂,调试难度与单核单任务相比大大增加。一种调试方式为断点调试,当处理器在断点处暂停执行时,外部输入条件仍然可能发生变化,因为处理器的暂停,错误发生的条件可能不能再现。另外一种调试方式为打印输出,将可能出错的地方打印出来,由于打印的结果可能非常繁多,错误难以定位。而且一旦处理器执行出错,可能在错误发生前打印本身已经不能工作。引入了操作系统后的另外一个问题是处理器的空闲运转导致的电量浪费。由于有多个任务,虽然外设可以根据需要进行停止,但处理器在什么时候应该进入节电模式以及何时从节电模式中恢复变得难以确定,从而导致电量浪费。据统计,由于上述原因,造成大约一半的嵌入式系统项目失败。
(2)第二类多核处理器采用并行语言和编程模式,根据并行语言和编程模式的需要来设计处理器的物理架构。采用这种方式设计的多核处理器能够与并行语言紧密配合,并期望克服第一类处理器调试困难和电量浪费的缺点。
目前的多核处理器都属于第一类,而第二类处理器仍然处于发展初期,没有成熟的设计应用。
发明内容
为克服现有多核处理器调试困难并且不支持并行语言的缺陷,本发明提出一种满足SystemC语法要求的多核处理器的先进先出队列单元组。
根据本发明的一个方面,提出了一种满足systemC语法的先进先出队列组,包括多个先进先出队列单元,所述先进先出队列单元向对应的事件处理单元组输出数据写入事件信号和数据读出事件信号,并且包括按照SystemC语法的sc_fifo(name,size)、sc_fifo(size)、sc_fifo.read()、sc_fifo.nb_read()、sc_fifo.write()、sc_fifo.nb_write()、sc_fifo.num_available()、sc_fifo.num_free()、sc_fifo.data_written_event()、sc_fifo.data_read_event()函数代码实现的逻辑电路,所述逻辑电路用于向处理器核运行时控制器发送激活和暂停处理器的信号,并使得软件开发工具的映射算法将位于不同处理单元的多个先进先出队列单元重新组合,共同实现SystemC sc_fifo语法所定义的功能。
其中,所述先进先出队列包括:
本地FIFO;
数据发送引擎,与所述交换单元适配器相连,用于发送数据包;
数据接收引擎,与所述交换单元适配器相连,用于接收数据包;
FIFO访问控制器,与所述数据发送引擎、所述数据接收引擎、所述本地FIFO相连,用于根据本地FIFO的状态控制数据包的发送和接收,输出处理器暂停或运行信号到处理器运行时控制器,输出写操作和读操作事件通知到事件处理单元组;
SC_FIFO寄存器组,与本地总线接口和FIFO访问控制器相连接,包括非阻塞读寄存器和非阻塞读端口状态寄存器。
其中,处理器核中运行的用户代码中的函数sc_fifo.read()、sc_fifo.nb_read()、sc_fifo.write()、sc_fifo.nb_write()、sc_fifo.num_available()、sc_fifo.num_free()对应于对所述SC_FIFO寄存器组中的对应寄存器的操作。
其中,所述先进先出队列的工作模式包括:
模式0,读写本地,本地SC_FIFO单元由本地处理单元控制,该模式下SC_FIFO单元成为一个基本FIFO;
模式1,读本地,表示数据被存储于本地,本地进程只读取FIFO;
模式2,写远程,表示数据被存储于远程,本地进程只写FIFO,并将写数据发送到远端的SC_FIFO单元;
模式3,写本地,表示数据存储于本地,位于其它处理单元的SC_FIFO进行远程读操作;
模式4,读远程,表示数据存储于远程位于其它处理单元的SC_FIFO。
其中,所述数据发送引擎根据所述数据接收引擎的ACK通知、RTY通知或者重传通知,通过交换单元适配器向远端SC_FIFO发送应ACK和RTY应答以及重新发送上一次发送的数据请求帧。
其中,当SC_FIFO单元工作在所述模式2,当本地FIFO非空时,所述数据发送引擎将存储的数据封装成写请求包发送到发送远端SC_FIFO单元;当SC_FIFO单元工作在模式4,当接收到来自FIFO访问控制器的数据读通知时,所述数据发送引擎发送数据读请求给远端SC_FIFO单元。
其中,数据写入和读出事件只反映本地FIFO中发生的事件;
其中,在模式2下,本地处理器核的写操作先写在本地FIFO,然后由本地FIFO送到接收该数据的远端FIFO。
其中,所述FIFO访问控制器为SC_FIFO寄存器组,包括:
SC_FIFO识别寄存器,用于存储SC_FIFO的名称;
控制寄存器,用于区分该SC_FIFO单元的工作模式;
SC_FIFO阻塞写寄存器,当处理器核写该寄存器时,SC_FIFO寄存器组将数据写入到本地FIFO中,输出暂停或者执行信号;
SC_FIFO非阻塞写寄存器,当处理器核写该寄存器,则SC_FIFO寄存器组将数据写入到本地FIFO中,若此时本地SC_FIFO已满,则该寄存器被更新为写操作失败;
SC_FIFO非阻塞写端口状态寄存器,用于存储上一次非阻塞写寄存器操作的结果;
SC_FIFO剩余空间计数寄存器,通过本地FIFO的剩余空间计数表示整个SC_FIFO的剩余空间计数;
SC_FIFO占用单元计数寄存器,通过本地FIFO的占用单元计数表示整个SC_FIFO的占用单元计数。
其中,所述SC_FIFO寄存器组还包括:
SC_FIFO阻塞读寄存器,处理器核通过该寄存器阻塞读取SC_FIFO;
SC_FIFO非阻塞读寄存器,处理器核通过该寄存器非阻塞读取SC_FIFO;
SC_FIFO非阻塞读端口状态寄存器,用于纪录上一次非阻塞读操作的状态;
本地SC_FIFO地址寄存器,用于纪录本地SC_FIFO单元的全局地址,数据发送引擎以所述全局地址为数据包的源地址;
远端SC_FIFO地址寄存器,用于纪录本地SC_FIFO单元所对应的远程SC_FIFO单元的地址,数据发送引擎K2以该地址为数据包的目的地址。
等待时间寄存器,记录RTY应答中所携带的等待时间长度。
其中,当远端SC_FIFO单元请求读取本地SC_FIFO单元中的数据但本地FIFO为空时,数据接收引擎通知数据发送引擎通过交换单元适配器向请求远端SC_FIFO单元发送一个至少携带等待时长信息的RTY应答;当远端SC_FIFO单元请求读取本地SC_FIFO中的数据但本地FIFO为非空时,数据接收引擎通知数据发送引擎通过交换单元适配器向远端SC_FIFO单元发送一个至少携带一个本地FIFO宽度单位的数据和本地FIFO占用计数信息的ACK应答。
其中,当远端SC_FIFO单元请求写本地SC_FIFO但本地FIFO为满时,数据接收引擎通知数据发送引擎向请求远端SC_FIFO单元发送一个至少携带等待时长信息RTY应答;当远端SC_FIFO单元请求写本地SC_FIFO中但本地FIFOH6210非满时,数据接收引擎通知数据发送引擎向请求远端SC_FIFO单元发送一个至少携带本地FIFO的剩余空间计数信息的RTY应答。
其中,所述本地FIFO包括FIFO读写控制器,用于控制可能来自数据发送引擎、数据接收引擎和SC_FIFO寄存器组对所述本地FIFO的读写操作,并返回读写应答数据包,其中,读应答数据包中包括占用单元计数信息,写应答数据包中包括剩余单元计数信息。
其中,用户代码的sc_fifo.nb_read()操作在所述先进先出队列单元中被如下翻译:处理器核读取所述非阻塞读寄存器和非阻塞读端口状态寄存器,非阻塞读端口状态寄存器的值表示非阻塞读寄存器的数据是否有效。
通过应用本发明,实现了支持SystemC语法单元到芯片内资源映射,使得本地资源可以用于任何多个处理单元之间、处理单元和外设之间的资源共享与同步。
附图说明
图1已有的基于二维阵列的8核处理器的示意图;
图2为根据本发明的实施例的改进的多核处理器示意图;
图3为根据本发明的实施例的用于SystemC优化的多核处理器的处理单元示意图;
图4为根据本发明的实施例的先进先出队列单元组成与内部连接示意图;
图5为根据本发明的实施例的SC_FIFO共享资源的过程示意图。
具体实施方式
下面结合附图和具体实施例对本发明提供的一种满足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所示,根据本发明的实施例的一种改进的StstemC优化的多核处理器。所述多核处理器包括多个交换单元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。
先进先出队列单元组的具体设计实例
根据IEEE Std P1666,sc_fifo<T>是SystemC库中已经实现好的FIFO通道,其中T为FIFO中存储的数据类型。FIFO的中文名字叫做先进先出队列,在软件和硬件设计中都较为常用。sc_fifo<T>.write(&T)代表写FIFO的方法,sc_fifo<T>.read()是读FIFO的方法,返回队头单元的数据。sc_fifo<T>.Num_free()用于查询FIFO还有多少空单元,sc_fifo<T>.num_available()查询FIFO还有多少个数据可以读。
sc_fifo<T>.read(T &)和sc_fifo<T>.read()是阻塞型读方法,如果读的时候FIFO为空,则它们等到FIFO有数据写入时才返回数据,它们的读操作永远是成功的。sc_fifo<T>.nb_read(T&)是非阻塞型读操作,它总是立刻返回。如果FIFO非空,则读FIFO成功,否则读失败。sc_fifo<T>.num_available()返回当前还有多少数据单元可以读出。sc_fifo<T>.data_written_event()用于返回数据写事件。
sc_fifo<T>.write(T &)和sc_fifo<T>.write()是阻塞型写方法,如果写的时候FIFO为满,则它们等到FIFO有空单元时才将数据写入并返回,它们的写操作永远是成功的。sc_fifo<T>.nb_write(T&)是非阻塞型写操作,它总是立刻返回。如果FIFO非满,则写FIFO成功,否则写失败。sc_fifo<T>.num_free()返回当前还有多少空单元。sc_fifo<T>.data_read_event()用于返回数据读事件。
sc_fifo<T>的构造函数有两个,如下:
sc_fifo(int size_=16)
sc_fifo(const char*name_,int size_=16)
其中,size定义FIFO的深度,name定义的是FIFO的通道名,它们都有缺省值。
与一般的FIFO相比,SC_FIFO增加了尝试读、尝试写以及剩余空闲单元的数量,以及增加了data_written_event()和data_read_event()。在支持SC_FIFO全部语法的基础上,在多核的情况下,还需要本质上解决多处理器核同时对同一FIFO的操作时的事件效率和片上资源问题。
一个容易想到的解决方法是用一个标准的FIFO,比如标准FIFO的宽度可以设计为32,深度设计为16,增加允许剩余空闲单元的数量计数,而尝试读、尝试写则由软件通过读取剩余空闲单元的数量和占用单元的数量计数分多次操作完成。这个标准的FIFO允许所在处理单元的处理器核直接访问,以及其它处理单元的处理器核通过片上网络进行访问。这样做的缺点是:
(1)所支持SC_FIFO的data_written_event()和data_read_event()只能用于FIFO所在的处理单元的处理器核。然而,对于使用SystemC的最终用户,data_written_event()和data_read_event()对于提高代码效率以及降低处理器功耗非常有用,他们希望data_written_event()和data_read_event()在任何时候都可用。
(2)在当多个处理器核同时访问同一个FIFO的情况下,位于FIFO所在处理单元以外的处理器核难以得到FIFO的确切剩余空闲单元的数量和占用单元的数量,其尝试读、尝试写操作具有很大的不确定性。对于一些性能要求严格的应用,可能造成系统失败。
为克服以上问题,根据本发明的实施例提出了以下解决方案:
一个SystemC优化的先进先出队列单元组,包括至少一个SystemC优化的先进先出队列(SC_FIFO)单元H627。多个SC_FIFO单元共同完成一个用户代码中的sc_fifo实例的功能。在任何一个SC_FIFO单元看来,共同完成一个用户代码中的sc_fifo实例功能的其它SC_FIFO单元都是远端SC_FIFO单元,而自己则为本地SC_FIFO单元。
所述StstemC优化的先进先出队列单元H627的对外连接关系:连接到交换单元适配器E与外界通信,连接到处理单元本地总线H2与所在单元处理器核H1通信;输出一个停止/继续执行信号H625到处理单元的处理器运行时控制器H8。
所述SystemC优化的先进先出队列单元的功能:具有多种工作模式:
(1)模式0:读写本地,该SC_FIFO单元完全由本地处理单元控制。该模式下SC_FIFO单元成为一个基本FIFO。
(2)模式1:读本地,表示数据被存储于本地,本地进程只读取FIFO。
(3)模式2:写远程,表示数据被存储于远程,本地进程只写FIFO,并将写数据发送到远端的SC_FIFO单元。
(4)模式3:写本地,表示数据存储于本地。位于其它处理单元的SC_FIFO进行远程读操作。
(5)模式4:读远程。表示数据存储于远程位于其它处理单元的SC_FIFO。
如图4所示,所述SystemC优化的先进先出队列单元H627内部组成和连接关系如下所述。
连接到交换单元适配器E、数据发送引擎H621和本地FIFO H6210的数据接收处理引擎H622,它的功能及运行如下所述:
通过交换单元适配器E接收来自远端SC_FIFO单元的读写FIFO请求,当远端SC_FIFO单元请求读取本地SC_FIFO单元中的数据但本地FIFO为空时,数据接收处理引擎H622通知数据发送引擎H621通过交换单元适配器E向请求远端SC_FIFO单元发送一个至少携带等待时长信息的RTY应答,等待时长通常为后文所述SC_FIFO_CWTH 62013的值;当远端SC_FIFO单元请求读取本地SC_FIFO中的数据但本地FIFO为非空时,数据接收处理引擎H622通知数据发送引擎H621通过交换单元适配器E向远端SC_FIFO单元发送一个至少携带一个本地FIFO H6210宽度单位的数据和本地FIFO占用计数信息H62010的ACK应答。当远端SC_FIFO单元请求写本地SC_FIFO H6210但本地FIFO为满时,数据接收引擎H622通知数据发送引擎向请求远端SC_FIFO单元发送一个至少携带等待时长信息RTY应答,等待时长通常为后文所述SC_FIFO_CWT H62013的值。当远端SC_FIFO单元请求写本地SC_FIFO中但本地FIFO H6210非满时,数据接收处理引擎H622通知数据发送引擎H621向请求远端SC_FIFO单元发送一个至少携带本地FIFO的剩余空间计数信息H62011的RTY应答。
通过交换单元适配器E接收来自其它SC_FIFO单元的读写FIFO ACK和RTY应答。当本地SC_FIFO单元工作于模式2和4,接收到RTY应答,根据RTY应答中携带的等待时常信息等待超时后,通知数据发送引擎H621重新发送请求。当数据接收处理引擎H622接收到ACK应答,通知数据发送引擎H621接收到ACK应答。若ACK应答中包括数据,则通知本地FIFO H6210将数据存储。
连接到交换单元适配器E、数据接收处理引擎H622和本地FIFO的数据发送引擎H621,其功能如下所述:
根据数据接收处理引擎H622的{ACK通知、RTY通知、重传通知}通过交换单元适配器向远端SC_FIFO发送应ACK和RTY应答以及重新发送上一次发送的数据请求帧。
当SCF_IFO单元工作在模式2,当本地FIFO K14中非空时,将存储的数据封装成写请求包发送到发送远端SCF_IFO单元。
当SC_FIFO单元工作在模式4,当接收到来自SC_FIFO寄存器组K24的数据读通知时,发送数据读请求给远端SC_FIFO单元。
连接到SC_FIFO寄存器组和本地总线的接口模块,完成与所在处理单元的处理器核的通讯。
连接到所有其它单元的SC_FIFO寄存器组H620,完成SC_FIFO单元寄存器的读写,由以下寄存器组成:
SC_FIFO识别寄存器SC_FIFO_ID H6201,用于存储SC_FIFO的名字。
控制寄存器SC_FIFO_CTRL H62012,用于区分该SC_FIFO单元的工作模式,如前文所述。
SC_FIFO阻塞写寄存器SC_FIFO_BW H6207。当处理器核写该寄存器,则SC_FIFO寄存器组将数据写入到本地FIFO中,直到写操作完成才返回。在此过程中暂停/执行信号K15输出{暂停},操作返回后输出{执行}。
SC_FIFO非阻塞写寄存器SC_FIFO_NBW H6208。当处理器核写该寄存器,则SC_FIFO寄存器组将数据写入到本地FIFO中,若此时本地SC_FIFO已满,则SC_FIFO_NBWS H6209被更新为{写操作失败}。
SC_FIFO非阻塞写端口状态寄存器SC_FIFO_NBWS H6209。存储上一次非阻塞写寄存器操作的结果{写操作失败、写操作成功}。
SC_FIFO剩余空间计数寄存器SC_FIFO_NF H62011,通过本地FIFO的剩余空间计数代表整个SC_FIFO的剩余空间计数。
SC_FIFO占用单元计数寄存器SC_FIFO_NA H62012,通过本地FIFO的占用单元计数代表整个SC_FIFO的占用单元计数。
SC_FIFO阻塞读寄存器SC_FIFO_BR。所在处理单元的处理器核通过该寄存器阻塞读取SC_FIFO。在模式1下,操作一直进行,直到本地FIFO中存在数据并将数据读出返回给处理器核。在模式4下,SC_FIFO寄存器组H620将通知数据发送引擎H621发送数据请求包,操作一直进行,直到数据接收引擎接收到ACK应答,ACK应答中所携带的数据通过SC_FIFO寄存器组H620返回给处理器核。在此过程中暂停/执行信号H625输出{暂停},操作返回后输出{执行}。
SC_FIFO非阻塞读寄存器SC_FIFO_NBR H6205。所在处理单元的处理器核通过该寄存器非阻塞读取SC_FIFO。在模式1下,若本地FIFO中存在数据,则SC_FIFO寄存器组H620将数据读出返回给处理器核,否则更新SC_FIFO_NBRS为{读操作失败}。在模式4下,SC_FIFO寄存器组H620将通知数据发送引擎H621发送数据请求包,如果数据接收处理引擎H622接收到ACK应答,ACK应答中所携带的数据通过SC_FIFO寄存器组H620返回给处理器核H1,如果数据接收处理引擎H622接收到ACK应答,SC_FIFO寄存器组H620更新SC_FIFO_NBRS为{读操作失败}。
SC_FIFO非阻塞读端口状态寄存器SC_FIFO_NBRS H6206,上一次非阻塞读操作的状态,可为{读操作失败、读操作成功}。
本地SC_FIFO地址寄存器SC_FIFO_ADDR H6203,本SC_FIFO单元的全局地址,数据发送引擎K2以该地址为数据包的源地址。
远端SC_FIFO地址寄存器SC_FIFO_RMT_ADDR H6203。本SC_FIFO单元所对应的远程SC_FIFO单元的地址。数据发送引擎K2以该地址为数据包的目的地址。
等待时间寄存器SC_FIFOC_WT H62013。RTY应答中所携带的等待时间长度,典型值为2。
连接到所有其它单元的本地FIFO H6210,内部包括一个常见的FIFO读写控制器,控制FIFO的读写操作。数据读写请求可能来自数据发送引擎H621、数据接收处理引擎H622和SC_FIFO寄存器组H620。当被写入,通过信号Data_written_event H623发送数据写事件;当被读出,通过信号Data_read_eventH624发送数据读事件。
下面以一个例子,说明基于本发明的SC_FIFO共享资源的过程。
假设用户程序中的进程sct_producer向一个SC_FIFO sc_fifo0写入数据,而另外两个进程sct_comsumer1和sct_comsumer2从sc_fifo0读取数据。如图5所示,三个进程分别被映射到PE(0,0)、PE(1,0)和PE(1,1),而sc_fifo0被映射到PE(0,0)、PE(1,0)和PE(1,1)的SC_FIFO单元组的第一个SC_FIFO单元M1、M2、M3,共同构成sc_fifo0的功能。M1工作于模式3,数据存储于本地;M2和M3工作于模式4。sct_producer向M1写入数据,并存储于M1。当进程sct_comsumer1和sct_comsumer2需要数据,才会通过M2和M3向M1读取数据,在读取数据的过程中,进程sct_comsumer1或sct_comsumer2所在的处理器核处于暂停状态。当M1的数据接收处理引擎H622接收到来自M2或者M3的数据读请求,它向本地FIFO H6210读取数据。当数据被读出,本地FIFO H6210的FIFO读写控制器向信号H624输出一个脉冲表示“数据读出”事件发生。数据接收处理引擎H622通知数据发送引擎H621将读取的数据发送到请求读取数据的M2或者M3。进一步假设用户程序中的进程sct_producer从SC_FIFO sc_fifo1中读取数据,而另外两个进程sct_comsumer1和sct_comsumer2向sc_fifo0写入数据。如图8所示,sc_fifo1被映射到PE(0,0)、PE(1,0)和PE(1,1)的SC_FIFO单元组的第二个SC_FIFO单元M4、M5、M6,它们共同构成sc_fifo1的功能。M4工作于模式1,M5、M6工作于模式2。当进程sct_comsumer1向M5或者和sct_comsumer2向M6写入数据,数据被首先存储于M5或者M6中,由M5和M6的数据发送引擎H621将数据送到M4。当M4的数据接收处理引擎H622接收到数据,则将数据写入本地FIFO H6210,H6210内部的FIFO读写控制器向信号H623输出一个脉冲表示“数据写入事件发生”。
本发明的先进先出单元不仅可以用于SystemC优化的多核处理器,也可以用于任何形式的多核处理器中。
最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。
Claims (12)
1、一种满足systemC语法的先进先出队列组,包括多个先进先出队列单元,所述先进先出队列单元向对应的事件处理单元组输出数据写入事件信号和数据读出事件信号,并且包括按照SystemC语法的sc_fifo(name,size)、sc_fifo(size)、sc_fifo.read()、sc_fifo.nb_read()、sc_fifo.write()、sc_fifo.nb_write()、sc_fifo.num available()、sc_fifo.num_free()、sc_fifo.data_written_event()、sc_fifo.data_read_event()函数代码实现的逻辑电路,所述逻辑电路用于向处理器核运行时控制器发送激活和暂停处理器的信号,并使得软件开发工具的映射算法将位于不同处理单元的多个先进先出队列单元重新组合,共同实现sc_fifo语法单元所定义的功能。
2、权利要求1的先进先出队列组,其中,所述先进先出队列包括:
本地FIFO;
数据发送引擎,与所述交换单元适配器相连,用于发送数据包;
数据接收引擎,与所述交换单元适配器相连,用于接收数据包;
FIFO访问控制器,与所述数据发送引擎、所述数据接收引擎、所述本地FIFO分别相连,用于根据本地FIFO的状态控制数据包的发送和接收,输出处理器暂停或运行信号到处理器运行时控制器,输出写操作和读操作事件通知到事件处理单元组;
SC_FIFO寄存器组,与本地总线接口和FIFO访问控制器相连接;
其中,处理器核中运行的用户代码中的函数sc_fifo.read()、sc_fifo.nb_read()、sc_fifo.write()、sc_fifo.nb_write()、sc_fifo.num_available()、sc_fifo.num_free()对应于对所述SC_FIFO寄存器组中的对应寄存器的操作。
3、权利要求2的先进先出队列组,其中,所述先进先出队列的工作模式包括:
模式0,读写本地,本地SC_FIFO单元由本地处理单元控制,该模式下SC_FIFO单元成为一个基本FIFO;
模式1,读本地,表示数据被存储于本地,本地进程只读取FIFO;
模式2,写远程,表示数据被存储于远程,本地进程只写FIFO,并将写数据发送到远端的SC_FIFO单元;
模式3,写本地,表示数据存储于本地,位于其它处理单元的SC_FIFO进行远程读操作;
模式4,读远程,表示数据存储于远程位于其它处理单元的SC_FIFO。
4、权利要求3的先进先出队列组,其中,所述数据发送引擎根据所述数据接收引擎的ACK通知RTY通知或者重传通知,通过交换单元适配器向远端SC_FIFO发送应ACK和RTY应答以及重新发送上一次发送的数据请求帧。
5、权利要求3的先进先出队列组,其中,当SC_FIFO单元工作在所述模式2,当本地FIFO非空时,所述数据发送引擎将存储的数据封装成写请求包发送到发送远端SC_FIFO单元;当SC_FIFO单元工作在模式4,当接收到来自FIFO访问控制器的数据读通知时,所述数据发送引擎发送数据读请求给远端SC_FIFO单元。
6、权利要求3的先进先出队列组,其中,在模式2下,本地处理器核的写操作先写在本地FIFO,然后由本地FIFO送到接收该数据的远端FIFO。
7、权利要求3的先进先出队列组,其中,所述SC_FIFO寄存器组包括:
SC_FIFO识别寄存器,用于存储SC_FIFO的名称;
控制寄存器,用于区分该SC_FIFO单元的工作模式;
SC_FIFO阻塞写寄存器,当处理器核写该寄存器时,SC_FIFO寄存器组将数据写入到本地FIFO中,输出暂停或者执行信号;
SC_FIFO非阻塞写寄存器,当处理器核写该寄存器,则SC_FIFO寄存器组将数据写入到本地FIFO中,若此时本地SC_FIFO已满,则该寄存器被更新为写操作失败;
SC_FIFO非阻塞写端口状态寄存器,用于存储上一次非阻塞写寄存器操作的结果;
SC_FIFO剩余空间计数寄存器,通过本地FIFO的剩余空间计数表示整个SC_FIFO的剩余空间计数;
SC_FIFO占用单元计数寄存器,通过本地FIFO的占用单元计数表示整个SC_FIFO的占用单元计数。
8、权利要求3的先进先出队列组,其中,所述SC_FIFO寄存器组还包括:
SC_FIFO阻塞读寄存器,处理器核通过该寄存器阻塞读取SC_FIFO;
SC_FIFO非阻塞读寄存器,处理器核通过该寄存器非阻塞读取SC_FIFO;
SC_FIFO非阻塞读端口状态寄存器,用于纪录上一次非阻塞读操作的状态;
本地SC_FIFO地址寄存器,用于纪录本地SC_FIFO单元的全局地址,数据发送引擎以所述全局地址为数据包的源地址;
远端SC_FIFO地址寄存器,用于纪录本地SC_FIFO单元所对应的远程SC_FIFO单元的地址,数据发送引擎K2以该地址为数据包的目的地址;
等待时间寄存器,记录RTY应答中所携带的等待时间长度。
9、权利要求8的先进先出队列组,其中,当远端SC_FIFO单元请求读取本地SC_FIFO单元中的数据但本地FIFO为空时,数据接收引擎通知数据发送引擎通过交换单元适配器向请求远端SC_FIFO单元发送一个至少携带等待时长信息的RTY应答;当远端SC_FIFO单元请求读取本地SC_FIFO中的数据但本地FIFO为非空时,数据接收引擎通知数据发送引擎通过交换单元适配器向远端SC_FIFO单元发送一个至少携带一个本地FIFO宽度单位的数据和本地FIFO占用计数信息的ACK应答。
10、权利要求8的先进先出队列组,其中,当远端SC_FIFO单元请求写本地SC_FIFO但本地FIFO为满时,数据接收引擎通知数据发送引擎向请求远端SC_FIFO单元发送一个至少携带等待时长信息RTY应答;当远端SC_FIFO单元请求写本地SC_FIFO中但本地FIFO H6210非满时,数据接收引擎通知数据发送引擎向请求远端SC_FIFO单元发送一个至少携带本地FIFO的剩余空间计数信息的RTY应答。
11、权利要求2的先进先出队列组,其中,所述本地FIFO包括FIFO读写控制器,用于控制可能来自数据发送引擎、数据接收引擎和SC_FIFO寄存器组对所述本地FIFO的读写操作,并返回读写应答数据包,其中,读应答数据包中包括占用单元计数信息,写应答数据包中包括剩余单元计数信息。
12、权利要求2的多核处理器,其中,用户代码的sc_fifo.nb_read()操作在所述先进先出队列单元中被如下翻译:处理器核读取所述非阻塞读寄存器和非阻塞读端口状态寄存器,非阻塞读端口状态寄存器的值表示非阻塞读寄存器的数据是否有效。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008101170165A CN101329702A (zh) | 2008-07-22 | 2008-07-22 | 一种满足SystemC语法的多核处理器的先进先出队列单元组 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008101170165A CN101329702A (zh) | 2008-07-22 | 2008-07-22 | 一种满足SystemC语法的多核处理器的先进先出队列单元组 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101329702A true CN101329702A (zh) | 2008-12-24 |
Family
ID=40205509
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008101170165A Pending CN101329702A (zh) | 2008-07-22 | 2008-07-22 | 一种满足SystemC语法的多核处理器的先进先出队列单元组 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101329702A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012110445A1 (fr) | 2011-02-15 | 2012-08-23 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Dispositif pour accélérer l'exécution d'une simulation system c |
WO2014124852A2 (fr) | 2013-02-15 | 2014-08-21 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Dispositif et procédé pour accélérer la phase de mise à jour d'un noyau de simulation |
CN104182373A (zh) * | 2014-09-10 | 2014-12-03 | 中国兵器工业集团第二一四研究所苏州研发中心 | 一种分布式数据驱动交点队列型片上通信结构 |
CN104657145A (zh) * | 2015-03-09 | 2015-05-27 | 上海兆芯集成电路有限公司 | 用于微处理器的重发停靠的系统和方法 |
CN108614799A (zh) * | 2016-12-13 | 2018-10-02 | 通用汽车环球科技运作有限责任公司 | 实时操作系统中在主核和次核之间进行数据交换的方法 |
CN111274068A (zh) * | 2020-01-19 | 2020-06-12 | 合肥工大高科信息科技股份有限公司 | 一种热备计算机联锁系统的通信机双cpu数据同步方法 |
-
2008
- 2008-07-22 CN CNA2008101170165A patent/CN101329702A/zh active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012110445A1 (fr) | 2011-02-15 | 2012-08-23 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Dispositif pour accélérer l'exécution d'une simulation system c |
US9612863B2 (en) | 2011-02-15 | 2017-04-04 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Hardware device for accelerating the execution of a systemC simulation in a dynamic manner during the simulation |
WO2014124852A2 (fr) | 2013-02-15 | 2014-08-21 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Dispositif et procédé pour accélérer la phase de mise à jour d'un noyau de simulation |
CN104182373A (zh) * | 2014-09-10 | 2014-12-03 | 中国兵器工业集团第二一四研究所苏州研发中心 | 一种分布式数据驱动交点队列型片上通信结构 |
CN104657145A (zh) * | 2015-03-09 | 2015-05-27 | 上海兆芯集成电路有限公司 | 用于微处理器的重发停靠的系统和方法 |
CN104657145B (zh) * | 2015-03-09 | 2017-12-15 | 上海兆芯集成电路有限公司 | 用于微处理器的重发停靠的系统和方法 |
CN108614799A (zh) * | 2016-12-13 | 2018-10-02 | 通用汽车环球科技运作有限责任公司 | 实时操作系统中在主核和次核之间进行数据交换的方法 |
CN108614799B (zh) * | 2016-12-13 | 2021-10-08 | 通用汽车环球科技运作有限责任公司 | 实时操作系统中在主核和次核之间进行数据交换的方法 |
CN111274068A (zh) * | 2020-01-19 | 2020-06-12 | 合肥工大高科信息科技股份有限公司 | 一种热备计算机联锁系统的通信机双cpu数据同步方法 |
CN111274068B (zh) * | 2020-01-19 | 2022-07-12 | 合肥工大高科信息科技股份有限公司 | 一种热备计算机联锁系统的通信机双cpu数据同步方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100565472C (zh) | 一种适用于多处理器核系统芯片的调试方法 | |
US6539500B1 (en) | System and method for tracing | |
US7778815B2 (en) | Method for the fast exploration of bus-based communication architectures at the cycle-count-accurate-at-transaction-boundaries (CCATB) abstraction | |
US6223265B1 (en) | Single-chip microcomputer synchronously controlling external synchronous memory responsive to memory clock signal and clock enable signal | |
CN102339343B (zh) | 产生系统模型的方法与在此系统模型中传输数据的方法 | |
US7849441B2 (en) | Method for specifying stateful, transaction-oriented systems for flexible mapping to structurally configurable, in-memory processing semiconductor device | |
US20050039174A1 (en) | Apparatus and method for co-simulating processors and DUT modules | |
CN103348333B (zh) | 用于分级高速缓存设计中的高速缓存之间的高效通信的方法和装置 | |
CN101187908A (zh) | 单芯片多处理器共享数据存储空间的访问方法 | |
CN103221937A (zh) | 用于处理集群的加载/存储电路 | |
CN101329702A (zh) | 一种满足SystemC语法的多核处理器的先进先出队列单元组 | |
CN101000597A (zh) | 一种基于AMBA总线的嵌入式Java处理器IP核 | |
CN103034454A (zh) | 柔性闪存命令 | |
CN101635006B (zh) | 一种满足SystemC语法的多核处理器的互斥和信号量单元组 | |
US7788078B1 (en) | Processor/memory co-exploration at multiple abstraction levels | |
CN101436171B (zh) | 模块化通信控制系统 | |
CN101634979B (zh) | 一种满足SystemC语法的多核处理器 | |
CN100568247C (zh) | 一种满足systemC语法的多核处理器的事件处理单元组 | |
CN100580630C (zh) | 满足SystemC语法要求的多核处理器及获得其执行代码的方法 | |
CN101770362B (zh) | 满足SystemC的处理器中的分布式动态进程生成单元 | |
US7478027B2 (en) | Systems, methods, and media for simulation of integrated hardware and software designs | |
CN1017837B (zh) | 具有单比特置位和复位功能的主存储器插板 | |
US6735683B2 (en) | Single-chip microcomputer with hierarchical internal bus structure having data and address signal lines coupling CPU with other processing elements | |
CN105893036A (zh) | 一种嵌入式系统的兼容式加速器扩展方法 | |
Yu et al. | Transaction level platform modeling in systemc for multi-processor designs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20081224 |