一种CPU给硬件电路下发命令描述符的方法及装置与流程

文档序号:17441328发布日期:2019-04-17 04:48阅读:248来源:国知局
一种CPU给硬件电路下发命令描述符的方法及装置与流程

本发明涉及一种数据处理方法,更具体地说是一种cpu给硬件电路下发命令描述符的方法及装置。



背景技术:

现有技术中,cpu给硬件电路下发命令描述符通常有两种方式,一种是单命令下发方式,另一种为命令链表方式。单命令下发方式:

单命令下发方式,如图1所示,针对cmd0,cpu需要将cmd0在memory中存放的地址下发给circuitblock0,同样的cpu还需要将cmd1,cmd2的存放地址下发给circuitblock0,有多少个命令就要下发多少个地址。cpu属于高速电路,通过总线频繁访问低速电路会拖慢cpu性能。

命令链表方式,如图2所示,针对cmd0,cpu需要将cmd0在memory中存放的地址下发给circuitblock0,但是cpu不需要将cmd1,cmd2的存放地址下发给circuitblock0,因为在cmd0的命令描述符中已经给出了cmd1的存放地址,而cmd1的命令描述符中存放了cmd2的地址,所以cpu只需要将链表的第一个命令描述符地址发给硬件电路即可。所以每条链表只需下发一次地址,相对于单命令下发方式,大大减少了cpu访问低速电路的次数,提高cpu运行效率,但是命令描述符会增加一个指向下一个命令描述符的指针,对于4gb的memory空间,这个指针一般需要32bits,因此增加了memory资源的耗费。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种cpu给硬件电路下发命令描述符的方法及装置。

为实现上述目的,本发明采用以下技术方案:一种cpu给硬件电路下发命令描述符的方法,所述方法包括:

读取环形先进先出命令槽中的命令描述符;

根据当前命令描述符执行对应的指令操作;

判断当前命令描述符是否标记有下一个待执行的命令描述符;

若是,则返回所述读取环形先进先出命令槽中的命令描述符的步骤;

若否,则进入查询等待期;

经过查询等待期后查询当前命令描述符是否有新的待执行的命令描述符;

若是,则返回所述读取环形先进先出命令槽中的命令描述符的步骤;

若否,则判断硬件电路是否被cpu停止;

若是,则结束读取命令描述符;

若否,则返回所述进入查询等待期的步骤。

其进一步技术方案为:所述读取环形先进先出命令槽中的命令描述符的步骤之前,包括以下步骤:

配置memory中的环形先进先出命令槽的起始地址和结束地址,并将起始地址和结束地址的地址信息写入硬件电路内部寄存器中;

配置硬件电路查询等待期,将查询等待时间写入硬件电路内部寄存器中;

cpu在memory中从环形先进先出命令槽的起始地址写入待执行的命令描述符;

判断当前命令描述符是否写到了结束地址;

若是,则将当前命令描述符之后的一个命令描述符环回到起始地址写入。

其进一步技术方案为:所述命令描述符包括三个部分,分别为命令字段、完成状态字段以及链表标记字段;所述命令字段由cpu填写,用于表征命令信息,供硬件电路获取和解析,所述完成状态字段由硬件电路填写,用于表征硬件电路执行结果,所述链表标记字段由cpu填写,用于表征当前命令描述符之后是否还有待执行的命令描述符。

其进一步技术方案为:所述根据当前命令描述符执行对应的指令操作的步骤,具体包括以下步骤:

获取当前命令描述符的命令字段;

根据命令字段执行指定的命令操作;

将执行结果写回当前命令描述符的完成状态字段中。

其进一步技术方案为:所述判断当前命令描述符是否标记有下一个待执行的命令描述符的步骤,具体包括以下步骤:

获取当前命令描述符的链表标记字段;

判断链表标记字段是否存在标记;

若是,则判定环形先进先出命令槽中存在下一个待执行的命令描述符;

若否,则判定环形先进先出命令槽中不存在下一个待执行的命令描述符。

一种cpu给硬件电路下发命令描述符的装置,所述装置包括读取单元、执行单元、第一判断单元、等待单元、查询单元、第二判断单元以及结束单元;

所述读取单元,用于读取环形先进先出命令槽中的命令描述符;

所述执行单元,用于根据当前命令描述符执行对应的指令操作;

所述第一判断单元,用于判断当前命令描述符是否标记有下一个待执行的命令描述符;

所述等待单元,用于进入查询等待期;

所述查询单元,用于经过查询等待期后查询当前命令描述符是否有新的待执行的命令描述符;

所述第二判断单元,判断硬件电路是否被cpu停止;

所述结束单元,用于结束读取命令描述符。

其进一步技术方案为:所述装置还包括第一配置单元、第二配置单元、第一写入单元、第三判断单元以及环回单元;

所述第一配置单元,用于配置memory中的环形先进先出命令槽的起始地址和结束地址,并将起始地址和结束地址的地址信息写入硬件电路内部寄存器中;

所述第二配置单元,用于配置硬件电路查询等待期,将查询等待时间写入硬件电路内部寄存器中;

所述第一写入单元,用于cpu在memory中从环形先进先出命令槽的起始地址写入待执行的命令描述符;

所述第三判断单元,用于判断当前命令描述符是否写到了结束地址;

所述环回单元,用于将当前命令描述符之后的一个命令描述符环回到起始地址写入。

其进一步技术方案为:所述命令描述符包括三个部分,分别为命令字段、完成状态字段以及链表标记字段;所述命令字段由cpu填写,用于表征命令信息,供硬件电路获取和解析,所述完成状态字段由硬件电路填写,用于表征硬件电路执行结果,所述链表标记字段由cpu填写,用于表征当前命令描述符之后是否还有待执行的命令描述符。

其进一步技术方案为:所述执行单元包括第一获取模块、执行模块以及写回模块;

所述第一获取模块,用于获取当前命令描述符的命令字段;

所述执行模块,用于根据命令字段执行指定的命令操作;

所述写回模块,用于将执行结果写回当前命令描述符的完成状态字段中。

其进一步技术方案为:所述第一判断单元包括第二获取模块以及判断模块;

所述第二获取模块,用于获取当前命令描述符的链表标记字段;

所述判断模块,用于判断链表标记字段是否存在标记。

本发明与现有技术相比的有益效果是:本发明一种cpu给硬件电路下发命令描述符的方法及装置中采用的环形先进先出命令槽具备命令链表的优势,启动一次硬件电路可以依次执行一串命令,从而减小了cpu与硬件电路的交互,提高了cpu的运行效率。而且采用环形先进先出命令槽无需使用链表指针,从而节约了memory的资源。另外,当cpu计算生成了新命令后,不需要触发硬件电路执行新命令,硬件电路会根据设定的查询等待期会定期查询链表标记,若发现新命令会自动执行,从而进一步减少了cpu与硬件电路的交互,提高了cpu的运行效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明技术手段,可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征及优点能够更明显易懂,以下特举较佳实施例,详细说明如下。

附图说明

图1为现有技术中单命令下发方式的示意图;

图2为现有技术中命令链表方式的示意图;

图3为本发明一种cpu给硬件电路下发命令描述符的方法具体实施例的示意图;

图4为本发明一种cpu给硬件电路下发命令描述符的方法具体实施例中环线先进先出命令槽示意图;

图5为本发明一种cpu给硬件电路下发命令描述符的方法具体实施例中命令描述符生成示意图;

图6为本发明一种cpu给硬件电路下发命令描述符的方法具体实施例的流程图一;

图7为本发明一种cpu给硬件电路下发命令描述符的方法具体实施例的流程图二;

图8为本发明一种cpu给硬件电路下发命令描述符的方法具体实施例的流程图三;

图9为本发明一种cpu给硬件电路下发命令描述符的方法具体实施例的流程图四;

图10为本发明一种cpu给硬件电路下发命令描述符的装置具体实施例结构图一;

图11为本发明一种cpu给硬件电路下发命令描述符的装置具体实施例结构图二;

图12为本发明一种cpu给硬件电路下发命令描述符的装置具体实施例中执行单元的结构图;

图13为本发明一种cpu给硬件电路下发命令描述符的装置具体实施例中第一判断单元的结构图。

具体实施方式

为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。

应当理解,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体/操作/对象与另一个实体/操作/对象区分开来,而不一定要求或者暗示这些实体/操作/对象之间存在任何这种实际的关系或者顺序。

还应当理解,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

如图3~9所示,本发明提供了一种cpu给硬件电路下发命令描述符的方法,该方法包括:

s10、读取环形先进先出命令槽中的命令描述符;

s20、根据当前命令描述符执行对应的指令操作;

s30、判断当前命令描述符是否标记有下一个待执行的命令描述符;若是,则返回步骤s10;若否,s40、则进入查询等待期;

s50、经过查询等待期后查询当前命令描述符是否有新的待执行的命令描述符;若是,则返回步骤s10;若否,s60、则判断硬件电路是否被cpu停止;

若是,s70、则结束读取命令描述符;

若否,则返回步骤s40。

具体的,环形fifo(先进先出)命令槽的含义是:cpu在程序指导下从起始地址开始写入命令描述符,一个接一个,中间没有空隙,写到结束地址后又环回,重新从起始地址写;硬件电路从起始地址开始取命令描述符,一个接一个,取到结束地址后又环回,重新从起始地址取。命令描述符包括三个部分,分别为命令字段、完成状态字段以及链表标记字段;命令字段由cpu填写,用于表征命令信息,供硬件电路获取和解析,完成状态字段由硬件电路填写,用于表征硬件电路执行结果,链表标记字段由cpu填写,用于表征当前命令描述符之后是否还有待执行的命令描述符。

环形fifo命令槽结构具备命令链表的优势,启动一次硬件电路可以依次执行一串命令,从而减小cpu与硬件电路的交互,提高cpu的运行效率。环形fifo命令槽结构相比传统的命令链表结构节省了链表指针,从而节约memory资源。

当cpu计算生成了新命令后,不需要触发硬件电路执行新命令,硬件电路自己定期查询链表标记,发现有新命令会自动执行,从而进一步减少了cpu与硬件电路的交互,提高cpu的运行效率。

对于步骤s10,当cpu启动硬件电路circuitblock0时,硬件电路circuitblock0根据内部startaddr寄存器指定的地址,通过总线从高速memory中读取第一个cmd0的命令字段和链表标记字段。

在某些实施例中,步骤之前包括以下步骤:

s1、配置memory中的环形先进先出命令槽的起始地址和结束地址,并将起始地址和结束地址的地址信息写入硬件电路内部寄存器中;

s2、配置硬件电路查询等待期,将查询等待时间写入硬件电路内部寄存器中;

s3、cpu在memory中从环形先进先出命令槽的起始地址写入待执行的命令描述符;

s4、判断当前命令描述符是否写到了结束地址;若是,s5、则将当前命令描述符之后的一个命令描述符环回到起始地址写入;若否,则下一个命令描述符紧接着上一个命令描述符写入的地址后面的一个地址写入。

具体的,cpu初始化硬件电路,配置memory中的环形fifo命令槽的起始地址和结束地址,把这两个地址信息写入到硬件电路内部寄存器中(如图3所示的circuitblock0里面的startaddr寄存器和endaddr寄存器),同时配置硬件电路查询等待期,把这个查询等待时间写入到硬件电路内部寄存器中(如图3所示的circuitblock0里面的waitingtime寄存器)。

cpu在高速memory中从环形fifo命令槽的起始地址写入待执行的cmd0,cmd1,cmd2命令描述符。t0时刻环形fifo命令槽命令生成示意图如图5所示,总共有三个命令,cmd0的链表标记为1代表cmd0后面存在cmd1,cmd1的链表标记为1代表cmd1后面存在cmd2,cmd2的链表标记为0代表cmd2后面没有命令了。

进一步的,步骤s20具体包括以下步骤:

s201、获取当前命令描述符的命令字段;

s202、根据命令字段执行指定的命令操作;

s203、将执行结果写回当前命令描述符的完成状态字段中。

具体的,硬件电路根据cmd0的命令字段执行指定的命令操作,然后通过总线将cmd0的执行结果写回cmd0的完成状态字段。

进一步的,步骤s30具体包括以下步骤:

s301、获取当前命令描述符的链表标记字段;

s302、判断链表标记字段是否存在标记;

若是,s303、则判定环形先进先出命令槽中存在下一个待执行的命令描述符;

若否,s304、则判定环形先进先出命令槽中不存在下一个待执行的命令描述符。

具体的,硬件电路查看之前获取的cmd0的链表标记字段,发现该字段为1,则表明环形fifo下一个命令槽存在待执行的命令,因此硬件电路通过总线读取cmd1的命令字段和链表标记字段,根据命令字段执行指定的命令操作以及写回完成状态字段;如此循环。当硬件电路读取cmd2的命令字段和链表标记字段,执行并写回完成状态字段后,发现链表标记字段为0,则表明环形fifo下一个命令槽没有待执行的命令了,于是停止取新命令,至此第一批命令cmd0~cmd2都执行完毕。

另外,例如有新一批命令下发:在t0+δt时刻,cpu需要下发新命令,如图5所示的命令生成示意图,cpu往环形fifo命令槽中继续写入cmd3,cmd4命令描述符,并修改cmd2的链表标记为1。此时硬件电路的行为分为两种情况:

第一种,若t0+δt时刻,cpu修改cmd2的链表标记为1时,硬件电路尚未读取cmd2的命令字段和链表标记字段,则硬件电路执行完cmd1后,自然会读取cmd2的命令字段和链表标记字段,从而看到cmd2的链表标记为1,获知cmd2后面还有cmd3待执行。

第二种,若t0+δt时刻,cpu修改cmd2的链表标记为1时,硬件电路已经读取过cmd2的命令字段和链表标记字段,则硬件电路由于之前看到的cmd2链表标记为0,不认为有cmd3的存在,但是硬件电路会等待一定的时间(查询等待期)后,再次读取cmd2的链表标记,因此总会读到cmd2的链表标记变为1,此时就知道了cmd3的存在。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

对应于上述实施例所述的一种cpu给硬件电路下发命令描述符的方法,本发明还提供了一种cpu给硬件电路下发命令描述符的装置。如图3~5、10~12所示,该装置包括读取单元10、执行单元20、第一判断单元30、等待单元40、查询单元50、第二判断单元60以及结束单元70;

读取单元10,用于读取环形先进先出命令槽中的命令描述符;

执行单元20,用于根据当前命令描述符执行对应的指令操作;

第一判断单元30,用于判断当前命令描述符是否标记有下一个待执行的命令描述符;

等待单元40,用于进入查询等待期;

查询单元50,用于经过查询等待期后查询当前命令描述符是否有新的待执行的命令描述符;

第二判断单元60,判断硬件电路是否被cpu停止;

结束单元70,用于结束读取命令描述符。

具体的,环形fifo(先进先出)命令槽的含义是:cpu在程序指导下从起始地址开始写入命令描述符,一个接一个,中间没有空隙,写到结束地址后又环回,重新从起始地址写;硬件电路从起始地址开始取命令描述符,一个接一个,取到结束地址后又环回,重新从起始地址取。命令描述符包括三个部分,分别为命令字段、完成状态字段以及链表标记字段;命令字段由cpu填写,用于表征命令信息,供硬件电路获取和解析,完成状态字段由硬件电路填写,用于表征硬件电路执行结果,链表标记字段由cpu填写,用于表征当前命令描述符之后是否还有待执行的命令描述符。

环形fifo命令槽结构具备命令链表的优势,启动一次硬件电路可以依次执行一串命令,从而减小cpu与硬件电路的交互,提高cpu的运行效率。环形fifo命令槽结构相比传统的命令链表结构节省了链表指针,从而节约memory资源。

当cpu计算生成了新命令后,不需要触发硬件电路执行新命令,硬件电路自己定期查询链表标记,发现有新命令会自动执行,从而进一步减少了cpu与硬件电路的交互,提高cpu的运行效率。

当cpu启动硬件电路circuitblock0时,硬件电路circuitblock0根据内部startaddr寄存器指定的地址,通过总线从高速memory中读取第一个cmd0的命令字段和链表标记字段。

在某些实施例中,该装置还包括第一配置单元1、第二配置单元2、第一写入单元3、第三判断单元4以及环回单元5;

第一配置单元1,用于配置memory中的环形先进先出命令槽的起始地址和结束地址,并将起始地址和结束地址的地址信息写入硬件电路内部寄存器中;

第二配置单元2,用于配置硬件电路查询等待期,将查询等待时间写入电路内部寄存器中;

第一写入单元3,用于cpu在memory中从环形先进先出命令槽的起始地址写入待执行的命令描述符;

第三判断单元4,用于判断当前命令描述符是否写到了结束地址;

环回单元5,用于将当前命令描述符之后的一个命令描述符环回到起始地址写入。

具体的,cpu初始化硬件电路,配置memory中的环形fifo命令槽的起始地址和结束地址,把这两个地址信息写入到硬件电路内部寄存器中(如图3所示的circuitblock0里面的startaddr寄存器和endaddr寄存器),同时配置硬件电路查询等待期,把这个查询等待时间写入到硬件电路内部寄存器中(如图3所示的circuitblock0里面的waitingtime寄存器)。

cpu在高速memory中从环形fifo命令槽的起始地址写入待执行的cmd0,cmd1,cmd2命令描述符。t0时刻环形fifo命令槽状态命令生成示意图如图5所示,总共有三个命令,cmd0的链表标记为1代表cmd0后面存在cmd1,cmd1的链表标记为1代表cmd1后面存在cmd2,cmd2的链表标记为0代表cmd2后面没有命令了。

命令描述符包括三个部分,分别为命令字段、完成状态字段以及链表标记字段;命令字段由cpu填写,用于表征命令信息,供硬件电路获取和解析,完成状态字段由硬件填写,用于表征硬件电路执行结果,链表标记字段由cpu填写,用于表征当前命令描述符之后是否还有待执行的命令描述符。

进一步的,执行单元20包括第一获取模块201、执行模块202以及写回模块203;

第一获取模块201,用于获取当前命令描述符的命令字段;

执行模块202,用于根据命令字段执行指定的命令操作;

写回模块203,用于将执行结果写回当前命令描述符的完成状态字段中。

具体的,硬件电路根据cmd0的命令字段执行指定的命令操作,然后通过总线将cmd0的执行结果写回cmd0的完成状态字段。

进一步的,第一判断单元30包括第二获取模块301以及判断模块302;

第二获取模块301,用于获取当前命令描述符的链表标记字段;

判断模块302,用于判断链表标记字段是否存在标记。

具体的,硬件电路查看之前获取的cmd0的链表标记字段,发现该字段为1,则表明环形fifo下一个命令槽存在待执行的命令,因此硬件电路通过总线读取cmd1的命令字段和链表标记字段,根据命令字段执行指定的命令操作以及写回完成状态字段;如此循环。当硬件电路读取cmd2的命令字段和链表标记字段,执行并写回完成状态字段后,发现链表标记字段为0,则表明环形fifo下一个命令槽没有待执行的命令了,于是停止取新命令,至此第一批命令cmd0~cmd2都执行完毕。

另外,例如有新一批命令下发:在t0+δt时刻,cpu需要下发新命令,如图5所示的命令生成示意图,cpu往环形fifo命令槽中继续写入cmd3,cmd4命令描述符,并修改cmd2的链表标记为1。此时硬件电路的行为分为两种情况:

第一种,若t0+δt时刻,cpu修改cmd2的链表标记为1时,硬件电路尚未读取cmd2的命令字段和链表标记字段,则硬件电路执行完cmd1后,自然会读取cmd2的命令字段和链表标记字段,从而看到cmd2的链表标记为1,获知cmd2后面还有cmd3待执行。

第二种,若t0+δt时刻,cpu修改cmd2的链表标记为1时,硬件电路已经读取过cmd2的命令字段和链表标记字段,则硬件电路由于之前看到的cmd2链表标记为0,不认为有cmd3的存在,但是硬件电路会等待一定的时间(查询等待期)后,再次读取cmd2的链表标记,因此总会读到cmd2的链表标记变为1,此时就知道了cmd3的存在。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明中各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述装置中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1