会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑零配件 / 多核处理器 / 一种满足SystemC语法的多核处理器的先进先出队列单元组

一种满足SystemC语法的多核处理器的先进先出队列单元组

阅读:187发布:2021-02-27

IPRDB可以提供一种满足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语法单元所定义的功能。实现了支持SystemC语法单元sc_fifo到芯片内资源映射,使得先进先出队列可以用于任何多个处理单元之间、处理单元和外设之间的资源共享与同步。,下面是一种满足SystemC语法的多核处理器的先进先出队列单元组专利的具体信息内容。

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()操作在 所述先进先出队列单元中被如下翻译:处理器核读取所述非阻塞读寄存器和非 阻塞读端口状态寄存器,非阻塞读端口状态寄存器的值表示非阻塞读寄存器的 数据是否有效。

说明书全文

技术领域

本发明涉及一种多核处理器,更具体地,本发明涉及一种满足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中但本地FIFO H6210非满时,数据接收引擎通知数据发送引擎向请求远端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是SystemC库中已经实现好的FIFO通道, 其中T为FIFO中存储的数据类型。FIFO的中文名字叫做先进先出队列,在软 件和硬件设计中都较为常用。sc_fifo.write(&T)代表写FIFO的方法, sc_fifo.read()是读FIFO的方法,返回队头单元的数据。sc_fifo.Num_free() 用于查询FIFO还有多少空单元,sc_fifo.num_available()查询FIFO还有多少 个数据可以读。
sc_fifo.read(T &)和sc_fifo.read()是阻塞型读方法,如果读的时候 FIFO为空,则它们等到FIFO有数据写入时才返回数据,它们的读操作永远是 成功的。sc_fifo.nb_read(T&)是非阻塞型读操作,它总是立刻返回。如果FIFO 非空,则读FIFO成功,否则读失败。sc_fifo.num_available()返回当前还有 多少数据单元可以读出。sc_fifo.data_written_event()用于返回数据写事件。
sc_fifo.write(T &)和sc_fifo.write()是阻塞型写方法,如果写的时候 FIFO为满,则它们等到FIFO有空单元时才将数据写入并返回,它们的写操作 永远是成功的。sc_fifo.nb_write(T&)是非阻塞型写操作,它总是立刻返回。 如果FIFO非满,则写FIFO成功,否则写失败。sc_fifo.num_free()返回当前 还有多少空单元。sc_fifo.data_read_event()用于返回数据读事件。
sc_fifo的构造函数有两个,如下:
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_event H624发送数据读事件。
下面以一个例子,说明基于本发明的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优化的多核处理器,也可以 用于任何形式的多核处理器中。
最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技 术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应用和实施 例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和 教导范围内。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用