具体实施方式
下面将结合附图对本发明实施例中的技术方案进行清楚、完整地描述,显而易见地,所描述的实施例仅仅是本发明的部分实施例,而不是全部的实施例。基于本发明实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,也属于本发明保护的范围。
如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。
虽然本申请对根据本申请的实施例的系统中的某些模块做出了各种引用,然而,任何数量的不同模块可以被使用并运行在用户终端和/或服务器上。所述模块仅是说明性的,并且所述系统和方法的不同方面可以使用不同模块。
本申请中使用了流程图用来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,根据需要,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
流水线技术(Pipeline)是指把一个重复的过程分解为若干子过程,每个子过程由专门的功能部件来实现,将多个处理过程在时间上错开,依次通过各功能段,每个子过程可以与其他子过程并行进行。
图1示出了一种流水线处理指令的一个示例。如图1所示,计算机在执行一条指令时,需要经过取指、译码、取数、执行、写回五个步骤,需要五个CPU周期才能完成,流水线技术可以将各个指令的各个步骤重叠起来执行,而不是一条指令执行完成后,才开始执行下一条指令。即,第一条指令取指后进行译码时,第二条指令取指;第一条指令取数时,第二条指令译码,第三条指令取指,……,依次类推。使用流水线技术后,尽管每一条指令的执行仍然需要经过上述五个步骤,需要同样的CPU周期数,但将一个指令段综合起来看,虽然每一条指令的执行仍然还是在一个指令周期内完成,但是单位时间内完成的指令数却增加,即提高了CPU的IPC(instruction per clock),提高指令处理效率。
例如,在复杂的行固定式(Row Stationary)数据流的神经网络处理器(Neural-Network Processing Unit,NPU)系统中,直接存储访问(DMA)需要根据数据的映射关系进行数据搬运。通过一些算法来对输入特征图或滤波器的数据进行切割,协处理器输出指令给DMA,DMA对协处理器输出的指令进行译码并根据译码结果来进行对于NPU的数据的搬运。
图2示出了一种用于行固定式NPU的基于协处理器的DMA的一个示例架构。该DMA的相关描述例如可以参见题为“搬运数据的方法、直接存储器访问装置以及计算机系统”的申请号为202111659158.6的中国专利申请,并且进一步说明如下。
如图2所示,SCIE解码器处于协处理器时钟域,协处理器通过SCIE总线接口输出指令。需要认识到,协处理器输出的指令可以是RISC-V指令集中R-type指令。R-type指令的域为32比特,包括7比特的opcode、5比特的rd、3比特的func3、5比特的rs1、5比特的rs2和7比特的func7,其中opcode指示操作码,rd指示目的寄存器的编号,func3为可扩展的操作码/功能码,rs1指示第一源寄存器的编号,rs2指示第二源寄存器的编号,func7为可扩展的操作码/功能码。
R-type指令中的func3用于指示R-type指令的不同功能,这些功能包括地址、逻辑、运算等,其中指示地址的R-type指令的func3为固定值[000]。func3指示的功能为地址的指令可以为数据搬运指令。可以用R-type指令的func7中的一些比特(例如,三个比特)对数据搬运指令的类型进行编码。在一个示例中,可以用R-type指令的func7中的三个比特对数据搬运指令的以下五种类型进行编码:
①:对输入特征图的非压缩数据的请求;
②:对滤波器的非压缩数据的请求;
③:对滤波器的压缩数据的请求;
④:读取对输入特征图的数据的请求的有效数;
⑤:读取对滤波器的数据的请求的有效数。
示例性地,对以上数据搬运指令的五种类型的编码如下:
数据搬运指令的类型 |
① |
② |
③ |
④ |
⑤ |
编码 |
100 |
110 |
111 |
010 |
011 |
数据搬运指令中5比特的rs1、rs2、rd分别指示第一源寄存器、第二源寄存器、目的寄存器的地址。在本公开中,第一源寄存器、第二源寄存器、目的寄存器中的至少一个可以采用至少部分比特来对与DMA根据输入特征图或滤波器的映射关系进行数据搬运相关联的信息进行编码。可以用32比特长的第一源寄存器来对数据搬运中要搬运的数据的地址信息进行编码,要搬运的数据的地址信息可以包括基址信息和偏址信息。可以用第二源寄存器的至少部分比特来对执行数据搬运指令的DMA的标识信息(ID)进行编码。在行固定式数据流的NPU系统中,可以使用多个DMA来执行数据搬运的任务,例如数据搬运的第一任务可以由第一DMA来执行、数据搬运的第二任务可以由第二DMA来执行等等。可以用第二源寄存器的至少部分比特来对执行数据搬运指令的DMA中的通道信息进行编码。Eyeriss V2是行固定式数据流的神经网络处理器,Eyeriss V2包括多个全局缓冲器(Global Buffer,GLB)集群,每个GLB集群用于存储DMA通过执行数据搬运指令而搬运的数据或指令,DMA在执行数据搬运指令时,被搬运的数据或指令可以存储到不同的GLB集群。DMA在执行数据搬运指令时,被搬运的数据或指令可以存储到不同的GLB集群,其所对应的DMA中的数据通道也可以不同。例如,被搬运的数据或指令可以存储到8个不同的GLB集群,DMA可以包括对应于这8个GLB集群的8个数据通道。这里的数据通道可以为本公开上文中所描述的DMA的通道。可以用目的寄存器的至少部分比特来对对输入特征图的数据的请求的有效数或对对滤波器的数据的请求的有效数进行编码。对数据的请求的有效数可以是对数据的请求的个数。例如,若有效数为5,则表示存在5个对数据的请求。
示例性地,协处理器输出的指令可以是第一类型指令,该第一类型指令为R-type指令(通过opcode为固定值[0110011]来指示),并且为数据搬运指令(通过func3为固定值[000]来指示),其对应的数据搬运指令的类型为①(通过本公开中的func7的编码来指示)。该指令的第一源寄存器中的至少部分比特指示要搬运的数据的偏址信息,该指令中的第二源寄存器中的至少部分比特指示要搬运的数据的长度信息。第一类型指令还可以包括本公开上文描述的DMA的标识信息的编码和DMA中的通道信息的编码中的至少一个,该第一类型指令第二源寄存器中的至少部分比特可以指示DMA的标识信息和/或DMA中的通道信息。
示例性地,协处理器输出的指令也可以是第三类型指令,该第三类型指令为R-type指令(通过opcode为固定值[0110011]来指示),并且为数据搬运指令(通过func3为固定值[000]来指示),其对应的数据搬运指令的类型为④(通过本公开中的func7的编码来指示)。该指令中的目的寄存器中的至少部分比特指示本公开上文中所描述的有效数,该指令中第二源寄存器中的至少部分比特指示本公开上文中所描述的DMA ID。通过该指令可以读取相应DMA中存储的对数据的请求的个数。为了描述之方便,本公开下文中将这里的该第一类型指令记为指令1,将该第三类型指令记为指令3。
SCIE解码器包括第一指令解码器,协处理器输出的指令1或指令3被传输至第一指令解码器。第一指令解码器用于对指令1或指令3进行第一层解码,用于判断协处理器输出的指令是否为预设类型以及输出的指令是读指令还是写指令。示例性地,第一指令解码器可以用于判断协处理器输出的指令是否为R-type的数据搬运指令。在该示例中,第一指令解码器通过对指令1或指令3中的opcode字段和func3字段进行译码,得到指令1或指令3为R-type的数据搬运指令。第一指令解码器还可以用于判断指令是读指令还是写指令,若第一指令解码器的译码结果为协处理器输出的指令为本公开上文中所描述的第①或②或③种类型的数据搬运指令,则指令为写指令;若第一指令解码器的译码结果为协处理器输出的指令为本公开上文中所描述的第④或⑤种类型的数据搬运指令,则指令为读指令。在该示例中,第一指令解码器通过对指令1或指令3中的func7字段进行译码,得到指令1为写指令,指令3为读指令。
SCIE解码器还可以包括指令先进先出队列(First Input First Output,FIFO)和有效数解码器,若第一指令解码器的译码结果为协处理器输出的指令为预设类型以及输出的指令是写指令,则将解码后的指令写入指令FIFO;若第一指令解码器的译码结果为协处理器输出的指令为预设类型以及输出的指令是读指令,则根据解码后的读指令读取DMA中的有效数计数器的数值。示例性地,第一指令解码器对指令1中的func7字段进行译码后,可以将译码后的指令1写入指令FIFO;第一指令解码器对指令3中的func7字段进行译码后,SCIE解码器可以根据译码后的指令3读取DMA中有效数计数器的数值,并通过有效数解码器对读取的有效数进行译码,从而得到DMA中的一个或多个通道中可写入的写指令个数(即本公开上文中的对数据的请求的个数)。
在协处理器时钟域,指令FIFO中每写入一个写指令,可以控制DMA中的有效数计数器减1。例如,译码后的指令1写入指令FIFO时,可以控制有效数计数器减1。
SCIE解码器还包括第二指令解码器,指令FIFO可以将译码后的指令1传输至第二指令解码器。第二指令解码器可以对指令进行第二层解码,用于判断指令被传输至哪个DMA。在该示例中,第二指令解码器通过对指令1中的指示DMA ID的字段进行译码,得到指令1将被写入哪个DMA的信号。图2中的DMA是根据译码后的DMA ID而确定的。第二指令解码器对指令1进行译码后,可以将译码后的指令1传输至第三指令解码器。
图2中的DMA处于NPU时钟域,第三指令解码器(例如可以对应本公开中的第二译码单元)位于DMA中。由于DMA与协处理器处于不同的时钟域,SCIE解码器中的指令FIFO可以使用异步FIFO进行指令同步。第三指令解码器可以对指令进行第三层解码,用于判断指令被写入DMA中的哪个通道。在该示例中,第三指令解码器通过对指令1中的指示通道ID的字段进行译码,得到指令1将被写入DMA中的哪个通道。
DMA还包括指令写控制模块和指令虚拟通道存储单元。指令虚拟通道存储单元包括对应于每个通道的存储区域。如图2所示,DMA包括通道1、通道2、通道3、通道4、通道5、通道6、通道7、通道8共八个通道,每个通道对应本公开中上文所描述的GLB。DMA用于分别在对应的通道上向GLB搬运数据,指令虚拟通道存储单元包括八个存储区域,每个存储区域用于存储对应通道上的写指令。例如若DMA用于在通道1上向GLB#1搬运数据,则存储区域#1存储通道1上的写指令;若DMA用于在通道2上向GLB#2搬运数据,则存储区域#2存储通道2上的写指令等等。指令写控制模块用于根据第三指令解码器的译码结果将译码后的指令写入到指令虚拟通道存储单元中对应通道的存储区域。例如,若第三指令解码器的译码结果为通道1,则指令写控制模块可以将译码后的指令1写入指令虚拟通道存储单元中对应于通道1的存储区域#1。
在一个可选的示例中,指令写控制模块可以对写入地址进行控制。指令虚拟通道存储单元中每个存储区域的起始地址和终止地址可以通过DMA中的配置单元进行配置。在该示例中,配置单元处于外围总线(Advanced Peripheral Bus,APB)时钟域,其通过APB接口进行交互。若指令写控制模块从一个存储区域中的一个写入地址成功写入一条指令,则指令写控制模块可以控制写入地址加1以便下次从该存储区域的下一个写入地址写入指令。当写入地址到达该存储区域的终止地址后,指令写控制模块可以控制写入地址翻转以便下次从该存储区域的起始地址写入指令。
在一个可选的示例中,指令写控制模块还可以对指令虚拟通道存储单元中对应通道的存储区域是否为满进行判断。若对应通道的存储区域已满(即没有再次存储写指令的地址空间),则输出对应通道已满的信号,可选地,若对应通道的存储区域已满且仍有写请求,则输出错误信号。若对应通道的存储区域未满(即有再次存储写指令的地址空间),则输出写使能信号(记为wr_en),指令虚拟通道存储单元可以根据写使能信号将译码后的指令写入到对应通道的存储区域。例如,若第三指令解码器的译码结果为通道1且指令写控制模块输出了写使能信号,则指令写控制模块可以将译码后的指令1写入指令虚拟通道存储单元中对应于通道1的存储区域#1。至此,DMA完成了对指令1的写入,指令1写入指令虚拟通道存储单元的数据流如图2中的α虚线所示。
下面继续结合图2对指令1的读取过程进行说明。
DMA还包括轮询调度模块和指令读控制模块。轮询调度模块用于确定从指令虚拟通道单元中的哪个通道读取写入的写指令,轮询调度模块可以产生通道标签信号(ch_tag),并将通道标签信号传输至指令读控制模块。指令读控制模块根据通道标签读取指令虚拟通道存储单元中对应通道的写指令。例如,指令1被写入至指令虚拟通道存储单元中通道1对应的存储区域#1,若轮询调度模块产生的信号为通道1标签信号,则指令读控制模块可以从存储区域#1中读取指令1。
指令读控制模块可以对读取地址进行控制。指令虚拟通道存储单元中每个存储区域的起始地址和终止地址可以通过DMA中的配置单元进行配置。若指令读控制模块从一个存储区域中的一个读取地址成功读出一条指令,则指令读控制模块可以控制读取地址加1以便下次从该存储区域的下一个读取地址读取指令。当读取地址到达该存储区域的终止地址后,指令读控制模块可以控制读取地址翻转以便下次从该存储区域的起始地址读取指令。
在一个可选的示例中,指令读控制模块还可以根据通道标签信号对指令虚拟通道存储单元中对应通道的存储区域是否为空进行判断,若对应通道的存储区域没有可读取的指令,则返回指令为空的信号,可选地,若对应通道的存储区域为空且仍有读请求,则输出错误信号;若对应通道的存储区域有可读取的指令,则返回读使能信号(记为rd_en),轮询调度模块可以根据读使能信号对要读取指令的通道进行选择。
指令读控制模块每次成功从指令虚拟通道存储单元读取一条指令,可以控制有效数计数器加1。示例性地,指令读控制模块每次成功读取一条指令,可以产生有效数递增信号(记为credit_add),然后通过同步器将该credit_add信号同步至有效数计数器以使有效数计数器的数值加1。在图2的示例中,通过动态调整有效数计数器的数值可以实时反应指令虚拟通道存储单元中存储区域的可用空间大小,降低了指令写入的错误率,提高了NPU系统的性能。
DMA还包括AXI接口控制模块,轮询调度模块受AXI接口控制模块反馈的后级模块(如GLB)握手信号和AXI握手信号控制,这些握手信号用于指示通道的状态以及切换时机。示例性地,若当前通道1上正在进行数据搬运,这表示当前通道1不是空闲状态,则通道1上不会有用于握手的信号(例如有效AXI请求)产生;若当前通道1上已经完成数据搬运任务或者当前通道1处于空闲状态,则通道1可以产生用于握手的信号。示例性地,若当前AXI接口控制模块正在进行数据处理(下文即将详细描述),则不会有用于握手的信号(例如有效AXI请求)产生;若当前AXI接口控制模块处于空闲状态,则可以产生用于握手的信号。
指令读控制模块可以从指令虚拟通道存储单元读取指令至AXI接口控制模块,AXI接口控制模块接收到从指令虚拟通道存储单元读出的指令后,会对该指令进行第四层解码,用于将AXI接口控制模块的后级模块(例如GLB)需要的数据内容提取出来并根据提取的数据内容进行转换操作,可以同时产生与提取的数据内容对应的AXI请求。在该示例中,AXI接口控制模块接收到指令1后,通过对指令1中指示偏址信息和长度信息的字段进行译码,得到要搬运的数据的地址信息,然后AXI接口控制模块根据该要搬运的数据的地址信息进行突发长度(Burst Length)控制、跨4K地址检查等操作,同时产生对应的AXI请求。至此,DMA完成了对指令1的读取并将指令1转换成NPU系统可以识别的AXI请求。在另一个示例中,AXI接口控制模块的后级模块(例如GLB)需要的数据内容可以为指令。在此情形下,AXI接口控制模块对该指令进行第四层解码并进行转换操作后,可以将指令发送至AXI接口控制模块的后级模块,而无需产生AXI请求。
DMA可以将AXI请求传输至片上网络,片上网络根据AXI请求可以从SRAM读取要搬运的数据并进行数据搬运,或者可以从DRAM读取要搬运的数据并进行数据搬运。从SRAM或DRAM向对应通道的GLB搬运数据的数据流如图2中的γ虚线所示。
DMA还包括处于APB时钟域的中断控制模块。在所有要搬运的数据和/或指令传输完成后,AXI接口控制模块可以产生传输完成信号(记为trans_done)表示任务完成。中断控制模块根据接收到的传输完成信号产生中断信号并输出。DMA还包括处于APB时钟域的性能监测器,用于对DMA的性能进行测试。
通常而言,计算机中用来保存数据的诸如寄存器、内存、计数器等记忆单元由时序芯片组成。在计算机系统中,时间的流逝可以用主时钟(master clock)来表示,其提供连续的交变信号序列在两个信号值0-1(低电平-高电平)之间交替变化,其中两个相邻的上升沿之间的时间间隙称为时钟的一个周期(cycle)/一拍,通过使用硬件电路可以将该交变信号传送到时序芯片中。图3示出了针对时序芯片的工作时序图的一个示例。如图3所示,对于时序芯片,其时间t的输出取决于时间t-1的输入,即:
out[t]=function(in[t-1])
由于图2中的DMA中的指令虚拟通道存储单元采用的是上述时序芯片,因此,针对指令虚拟存储单元的读请求与读数据会有一拍的延迟,从而导致轮询(Round Robin)调度模块在通道之间切换时引入延迟。
数据传输可以通过握手(handshaking)信号实现,握手即源和目的各发出一个控制信号,把本方的状况通知对方。例如,接收方(目的)在自身可以接收数据时,可以主动发出请求信号给发送方(源),通知发送方可以送来数据,发送方收到请求信号之后把数据送上数据总线并发出响应信号,通知接收方数据已经准备好,接收方把数据取走之后,撤销请求信号,发送方也撤销响应信号。为了描述之方便,在本公开中,接收方需要数据时,向发送方输入的请求信号为ready信号,发送方发出的通知接收方数据已经准备好的信号为valid信号。当ready信号有效且valid信号有效时,发送方就将数据送入接收方。
图2中的DMA可以在例如八个通道上向NPU系统中的八个全局缓冲器(GlobalBuffer,GLB)集群搬运数据或指令,例如在通道1上向GLB集群1搬运数据或指令,在通道2上向GLB集群2搬运数据或指令……。在该示例中,GLB集群可以作为接收方向DMA发送ready信号,DMA作为数据发送方可以在准备好数据或指令时向GLB集群发出valid信号。GLB集群发出的ready信号可以记为GLB_instr_ready,DMA发出的valid信号可以记为Ar_valid。
图2中的DMA可以将协处理器输出的指令转换成例如符合高级可扩展接口(Advanced eXtensible Interface,AXI)总线协议的AXI请求,并将AXI请求发送至片上网络(NoC),片上网络根据AXI请求从存储装置(例如动态随机存取存储器(DRAM)或静态随机存取存储器(SRAM))中搬运数据至GLB集群。在该示例中,片上网络可以作为接收方向DMA发出ready信号,DMA作为发送方可以在准备好AXI请求时发出valid信号,片上网络通过AXI接口提供给DMA的ready信号可以记为Ar_ready,DMA通过AXI接口发出的valid信号可以记为Ar_valid。
图2中的DMA的指令虚拟通道存储单元可以包括八个存储区域,每个存储区域用于存储一个通道上的指令数据;轮询调度模块可以输出通道标签,并且指令读取控制模块可以根据通道标签从对应通道的存储区域读取指令。图4A和图4B对图2示出的DMA中的轮询调度模块的工作机制进行了说明。
如图4A所示,轮询调度模块包括标通道标签指针tag_pointer,其作用为轮询通道优先级切换,默认值为1即指向通道1(CH_1)。轮询调度模块的输入信号可以包括CH_done信号和CH_vld信号。CH_done信号用于表示通道状态,当CH_done信号有效时表示DMA在通道上成功发送了数据或指令。CH_vld信号用于表示通道是否有效,当CH_vld信号有效时表示通道有效,当CH_vld信号无效时表示通道无效。CH_vld信号可以根据上文所述的GLB_instr_ready信号确定。例如,当GLB_instr_ready有效时(即GLB集群需要数据)且存在指令数据时,则CH_vld信号有效;当GLB_instr_ready无效时(即GLB集群不需要数据)或不存在指令数据时,则CH_vld信号无效。在该示例中,当上文所述的Ar_ready信号和Ar_valid信号同时有效时,CH_done信号可以有效,否则CH_done信号无效。轮询调度模块的输出为通道标签CH_tag。
如图4B所示,在情形a处,tag_pointer指示当前通道CH_3(即通道3),当CH_done信号有效时会进行tag_pointer切换(例如在一拍中切换),切换至下一条通道(无论该通道的CH_vld信号是否有效),此时tag_pointer指示通道CH_4(即通道4)。在情形b处,若CH_done信号不连续,tag_pointer会在CH_done信号无效时指向当前有效通道,由于通道CH_4(即通道4)和通道CH_5(即通道5)为无效通道,因此tag_pointer会跳到下一个有效通道CH_6(通道6)并输出通道6的标签;在情形c处,若CH_done信号连续,tag_pointer会在CH_done信号有效时进行tag_pointer切换,切换至下一条通道CH_7(通道7)。
下面结合图5对本公开中的轮询调度模块在通道之间切换时的延迟进行说明。
如图5所示,GLB_instr_ready为图2中的DMA的后级模块的ready信号,其拉低时会反压DMA;Ar_ready和Ar_valid为图2中的DMA与片上网络的握手信号,其同时为高时代表当前一次请求传输完成;CH_done为图2中的DMA的轮询调度模块对通道的切换信号,若在主时钟的上升沿检测到CH_done为高,则执行通道切换;CH_tag为图2中的DMA的轮询调度模块的输出信号,代表当前选择了哪个通道;SRAM_读数据为图2中的指令读控制模块从指令虚拟通道存储单元读取的数据,该数据读入至AXI接口控制模块时可以近似代表图2中的DMA已经准备好指令数据,此时Ar_valid信号拉高;SRAM_读请求为针对图2中的DMA的指令虚拟通道存储单元的读请求。
若图2中的DMA的后级模块以及片上网络一直处于准备就绪状态(即图5中的GLB_instr_ready和Ar_ready在主时钟的第二拍后一直为高),在第二拍,Ar_valid为高代表图2中的DMA的AXI接口控制模块已经将数据1准备好,同时Ar_ready为高,因此当前通道在第二拍完成了一次数据传输,此时CH_done拉高代表当前通道完成了一次数据传输需要切换至下一通道,并且在第二拍输出通道标签Ch_1。在第三拍的上升沿检测到CH_done为高,轮询调度模块执行通道切换,即从通道CH_1切换至通道CH_2,同时,在第三拍,图2中的DMA的指令读控制模块接收到通道标签Ch_1,SRAM_读请求为高,开始从图2中的DMA的指令虚拟通道存储单元中的通道1读取数据2并在下一拍将数据2读入图2中的DMA的AXI接口控制模块。由于在第三拍数据2尚未从图2中的DMA的指令虚拟通道存储单元读出,因此图2中的DMA尚未准备好数据,此时Ar_valid拉低。由于在第三拍未在当前通道CH_2完成数据传输,因此CH_done拉低,即Ar_valid拉低时CH_done也拉低,从而导致当前通道CH_2有一拍的延迟。在第四拍,数据从图2中的DMA的指令虚拟通道存储单元成功读出,Ar_valid拉高,同时Ar_ready为高,因此当前通道CH_2在第四拍完成了一次请求传输,此时CH_done拉高代表当前通道CH_2完成了一次数据传输需要切换至下一通道CH_3。图2中的DMA在第五拍及之后的处理与第二拍至第四拍类似,这里不再赘述。
通过上文结合图5的描述可知,图2中的DMA由于指令虚拟通道存储单元的读取信号与读取数据的延迟,导致该DMA的轮询调度模块在通道之间切换时产生延迟,从而导致无法流水线处理,降低效率。
为了解决上述技术问题,本公开了提出了一种对图2中的DMA的优化方案,以实现在通道切换时的流水线处理。
图6A示出了根据本公开至少一个实施例的一种用于对多个通道执行数据处理的处理装置的结构示意图。
如图6A所示,该用于对多个通道执行数据处理的处理装置包括通道信息获取单元,其配置为获取多个通道的通道信息;存储单元,其包括对应于多个通道的多个存储区域,其中,存储区域配置为用于存储针对多个通道的数据信息;数据读控制单元,其配置为根据通道信息从存储单元的多个存储区域中的目标存储区域读取对应于通道信息的目标数据信息;以及缓存单元,其配置为预存由数据读控制单元从存储单元的目标存储区域所读取的目标数据信息,以等待用于所述数据处理。在该示例中,数据信息可以是本公开上文中的R-type指令,存储单元可以是本公开上下文中的指令虚拟通道存储单元,数据读控制单元可以是本公开上下文中的指令读控制模块或指令读控制单元。在该示例中,通道信息可以是本公开上下文中的对应于GLB集群的数据通道。在该示例中,接口控制单元可以是本公开上下文中的AXI接口控制模块或AXI接口控制单元。需要认识到,尽管图6A中示出的用于对多个通道执行数据处理的处理装置包括接口控制单元,但若该处理装置的后级模块需要数据信息时,缓存单元可以直接将数据信息输出至若该处理装置的后级模块而无需经过接口控制单元。换句话说,图6A中示出的接口控制单元不是该处理装置必须的功能模块。
图6B示出了根据本公开至少一个实施例的基于协处理器的DMA的一个示例架构。
如图6B所示,与图2示出的DMA相比,本实施例中的DMA的架构在指令虚拟通道存储单元通往AXI接口控制模块中间插入了预设先进先出队列(FIFO),该预设FIFO用于预先存储通道的指令。通过预设FIFO可以提前预取出不同通道的指令,从而节省指令虚拟通道存储单元读数据时导致的延迟。
根据本实施例的一个示例,预设FIFO可以为采用上述时序芯片的FIFO,即预设FIFO的读请求与读数据会有一拍的延迟。下面结合图7和图8对本公开中的DMA架构的工作时序图的一个示例进行说明。
图7示出了本实施例中的预设FIFO在不提前预取指令的情况下,DMA的工作时序图的一个示例。
如图7所示,若图6B中的DMA的后级模块以及片上网络一直处于准备就绪状态(即图7中的GLB_instr_ready和Ar_ready一直为高),在第一拍,由于DMA已经准备好数据1,因此Ar_valid为高;由于Ar_valid和Ar_ready在第一拍同时为高,因此CH_done为高,DMA中的轮询调度模块输出通道标签CH_1,同时将通道切换至通道CH_2。在第二拍,DMA中的指令读控制模块接收到轮询调度模块发送的通道标签CH_1,因此SRAM_读请求信号在第二拍拉高;由于在第二拍尚未将数据2读入预设FIFO(对应于图7中SRAM_读数据在第二拍为低),因此DMA尚未准备好数据,Ar_valid拉低;由于在第二拍DMA尚未在通道上成功发送数据,因此CH_done拉低。在第三拍,根据预设FIFO_写请求,数据2从DMA的指令虚拟通道存储单元中的通道1读入至预设FIFO;由于在第三拍,数据2尚未从预设FIFO读入至DMA的AXI接口控制模块,即DMA在第三拍仍未准备好数据,因此Ar_valid继续为低;由于在第三拍DMA尚未在通道上成功发送数据,因此CH_done继续低。在第四拍,根据预设FIFO_读请求,将数据2从预设FIFO读入DMA的AXI接口控制模块并在下一拍成功将数据2读入至DMA的AXI接口控制模块,同理Ar_valid、CH_done继续为低。在第五拍,DMA已经准备好数据2,因此Ar_valid拉高;由于Ar_valid和Ar_ready在第五拍同时为高,因此CH_done为高,DMA中的轮询调度模块输出通道标签CH_2,同时将通道切换至通道CH_3。在第六拍,DMA中的指令读控制模块接收到轮询调度模块发送的通道标签CH_2,因此SRAM_读请求在第六拍拉高;由于在第六拍尚未将数据3读入预设FIFO,因此DMA尚未准备好数据,Ar_valid拉低;由于在第六拍,DMA尚未在通道上成功发送数据,因此CH_done拉低。在第七拍,根据预设FIFO_写请求,数据3从DMA的指令虚拟通道存储单元中的通道2读入至预设FIFO;由于在第七拍,数据3尚未从预设FIFO读入至DMA的AXI接口控制模块,即DMA在第七拍仍未准备好数据,因此Ar_valid继续为低;由于在第七拍DMA尚未在通道上成功发送数据,因此CH_done继续低。在第八拍,根据预设FIFO_读请求,将数据3从预设FIFO读入DMA的AXI接口控制模块并在下一拍成功将数据3读入至DMA的AXI接口控制模块,同理Ar_valid、CH_done继续为低,依次类推。
结合图7的描述可知,在本公开中的预设FIFO采用上述时序芯片的情况下,图6B示出的DMA在不同通道之间切换时会至少引入三拍的延迟。
本公开中的预设FIFO还可以为采用组合逻辑的存储器,其可以实现读请求与读数据同拍出现,从而节省一拍的延迟。下面结合图8对本公开中的预设FIFO的一个示例进行说明。
如图8所示,该预设FIFO包括多路选择器(Multiplexer,MUX)和N个存储地址,每一行代表一个存储地址,数据1、数据2……、数据N分别存储在相应的存储地址,每个存储地址接入MUX,MUX的选择端为该预设FIFO的指针,默认值为指向数据1所在的地址,当接收到读请求时,指针有效,MUX输出数据1,同时指针加1;若再次接收到读请求,指针再次有效,MUX输出数据2,同时指针加1,依此类推。需要认识到,若图6B中的DMA采用的是本公开结合图8所描述的预设FIFO,则该DMA在不同通道之间切换时会至少引入两拍的延迟。在此前提下,本公开提出通过在预设FIFO中提前预取至少一个通道的指令数据从而消除结合图7中描述的部分或全部延迟。
图9示出了根据本公开的在预设FIFO中预存三条不同通道的指令数据时,DMA的工作时序图的一个示例。在该示例中,预设FIFO为采用组合逻辑的存储器。
如图9所示,数据1、数据2和数据3为预设FIFO中提前预取的三个不同通道的数据,若图6B中的DMA的后级模块以及片上网络一直处于准备就绪状态(即图9中的GLB_instr_ready和Ar_ready一直为高),在第一拍至第三拍,由于DMA的预设FIFO中预存了三个不同通道的指令数据且预设FIFO的读请求和读数据同拍出现,因此在第一拍至第三拍Ar_valid一直为高,由于Ar_valid和Ar_ready在第一拍至第三拍同时为高,因此CH_done一直为高,DMA中的轮询调度模块实现流水线切换,其在第一拍、第二拍、第三拍分别输出通道标签CH_1、CH_2、CH_3。在第二拍、第三拍、第四拍,DMA中的指令读控制模块依次接收到轮询调度模块发送的通道标签CH_1、CH_2、CH_3,因此SRAM_读请求信号在第二拍至第四拍一直为高。在第三拍、第四拍、第五拍,根据预设FIFO_写请求,数据4、数据5、数据6(数据5和数据6未示出)依次从DMA的指令虚拟通道存储单元中的通道1、通道2、通道3读入至预设FIFO。在第四拍、第五拍、第六拍,根据预设FIFO_读请求,将数据4、数据5、数据6依次从预设FIFO读入DMA的AXI接口控制模块并在同拍成功将数据4、数据5、数据6读入至DMA的AXI接口控制模块,即在第四拍、第五拍、第六拍DMA已经准备好数据,因此第四拍至第六拍Ar_valid继续为高,从而实现DMA的流水线式输出指令,消除了不同通道之间切换导致的延迟。
本公开中的DMA通过加入预设FIFO预存指令机制,以在其他通道或图2中DMA的AXI接口控制模块繁忙时,提前将指令数据从图2中DMA的指令虚拟通道存储单元中取出,节省其读操作的延迟。
结合本公开提出的预设FIFO预存指令机制,图6B中的DMA在不同通道之间切换时会节省指令虚拟通道存储单元读操作的延迟,另一方面,针对单通道切换模式,仍会存在至少两拍的延迟。
图10示出了采用本公开至少一实施例的预设FIFO预存指令机制,图6B中的DMA在单通道切换模式下的工作时序图的一个示例。
如图10所示,在第一拍,由于DMA已经准备好数据1,因此Ar_valid为高;由于Ar_valid和Ar_ready在第一拍同时为高,因此CH_done为高,DMA中的轮询调度模块输出通道标签CH_1,同时将通道切换至通道CH_1。在第二拍,DMA中的指令读控制模块接收到轮询调度模块发送的通道标签CH_1,因此SRAM_读请求信号在第二拍拉高。由于在第二拍至第五拍,当前通道仍是通道CH_1(即通道1),根据轮询调度机制,需要等待通道1上完成一次数据传输才进行切换,即需要等待根据在第一拍输出的通道标签CH_1将DMA的指令虚拟通道存储单元中通道1的数据2成功写入DMA的AXI接口控制模块,才进行切换,因此在第二拍至第四拍,DMA均无法输出指令数据(DMA在第五拍将数据2成功输出),从而引入至少三拍的延迟。图10中SRAM_读请求、SRAM_读数据、预设FIFO_写请求、预设FIFO_读请求、预设FIFO_读数据等信号的工作时序与本公开图7中的工作时序相同,这里不再赘述。另外,即便预设FIFO采用本公开的组合逻辑的存储器,图6B中的DMA在单通道切换模式下依然存在两拍的延迟。
基于上述实施例,本公开的至少一实施例提出对图2中的DMA的另一种优化方案,以实现在通道切换时的流水线处理。
图11A示出了根据本公开至少一个实施例的一种用于对多个通道信息执行数据处理的处理装置的结构示意图。
如图11A所示,该用于对多个通道信息执行数据处理的处理装置,包括通道信息获取模块、存储模块、读取模块、预存模块,其中:所述通道信息获取模块配置为获取所述多个通道信息中的目标通道信息;所述存储模块包括对应于所述多个通道信息的多个存储区域,其中,所述多个存储区域的每个配置为用于存储针对所述多个通道信息中的任一通道信息的数据信息;所述读取模块配置为依次从所述存储模块的所述多个存储区域预存所述数据信息至所述预存模块;以及所述预存模块配置为从所述存储模块的所述多个存储区域预存所述数据信息,以等待用于所述数据处理,并且根据所获取的所述目标通道信息输出对应于所述目标通道信息的被预存的目标数据信息,以用于所述数据处理。在该示例中,数据信息可以是本公开上文中的R-type指令,存储模块可以是本公开上下文中的指令虚拟通道存储单元,读取模块可以包括本公开上下文中的指令读控制模块或指令读控制单元,读取模块还可以包括本公开下文中的第一轮询调度模块或单元。在该示例中,通道信息可以是本公开上下文中的对应于GLB集群的数据通道,通道信息获取模块可以是本公开下文中的第二轮询调度模块或单元。在该示例中,接口控制单元可以是本公开上下文中的AXI接口控制模块或AXI接口控制单元。需要认识到,尽管图11A中示出的用于对多个通道执行数据处理的处理装置包括接口控制单元,但若该处理装置的后级模块需要数据信息时,预存模块可以直接将数据信息输出至若该处理装置的后级模块而无需经过接口控制单元。换句话说,图11A中示出的接口控制单元不是该处理装置必须的功能模块。
图11B示出了根据本公开至少一个实施例的基于协处理器的DMA的一个示例架构。如图11B所示,与图2示出的DMA相比,本公开中的DMA的架构在指令虚拟通道存储单元通往AXI接口控制模块中间插入了多个预设FIFO,同时引入了双轮询调度机制,实现从指令虚拟通道存储单元取指的操作与DMA的后级模块以及片上网络的分离,消除或缓解DMA的后级模块以及片上网络对取指操作的反压,进而消除或降低延迟,提高DMA效率。
本实施例中的预设FIFO用于预先存储通道的指令。根据本实施例的一个示例,预设FIFO可以为采用上述时序芯片的FIFO,即预设FIFO的读请求与读数据会有一拍的延迟。根据本公开的另一个示例,预设FIFO可以为采用组合逻辑的存储器,即预设FIFO的读请求与读数据同拍出现。
继续参考图11B,每个预设FIFO可以用于存储至少一个通道的指令数据。在一个示例中,图11B中的DMA例如共有八个预设FIFO,每个预设FIFO用于存储一个通道的指令数据,即预设FIFO#1存储通道1的指令数据、预设FIFO#2存储通道2的指令数据等等。
在另一个示例中,图11B中的DMA例如共有四个预设FIFO,每个预设FIFO用于存储两个通道的指令数据,即预设FIFO#1存储通道1和通道2的指令数据、预设FIFO#2存储通道3和通道4的指令数据等等。
下面以每个预设FIFO存储一个通道的指令数据为例进行说明。如图11B所示,预设FIFO每完成一笔指令数据的写入可以向第一轮询调度模块传送用于握手的信号,例如可以向第一轮询调度模块传送CH_done信号以表示预设FIFO对应的通道上成功完成了一笔数据写入。第一轮询调度模块接收到预设FIFO传送的CH_done信号后可以进行通道切换(例如一拍)并输出切换后的通道标签CH_tag,指令读控制模块根据通道标签CH_tag从指令虚拟通道存储单元中的对应通道将数据读入至对应的预设FIFO,从而实现将各个通道的指令数据提前取出至预设FIFO。
在一个示例中,指令读控制模块在将指令数据预取至预设FIFO之前,可以判断指令虚拟通道存储单元中对应通道的存储区域是否为空以及对应预设FIFO是否为满,若指令虚拟通道存储单元中对应通道的存储区域为非空且对应预设FIFO为非满,则将指令数据预取至预设FIFO。在该示例中,在从指令虚拟通道存储单元取指时,第一轮询调度模块轮询搬运八个通道上的指令数据至八个预设FIFO,从而完后对每个通道上的指令数据的预取操作。
继续参考图11B,AXI接口控制模块包括第二轮询调度模块,第二轮询调度模块受DMA的后级模块以及片上网络的反压,即GLB_instr_ready或Ar_ready信号拉低时会反压第二轮询调度模块。第二轮询调度模块轮询八个通道上的数据传输状态,在当前通道上完成了一次数据传输后可切换至下一通道。第二轮询调度模块可以输出通道标签CH_tag。
在预设FIFO与AXI接口控制模块之间还包括多路选择器,在上述示例中,八个预设FIFO的输出端可接入该多路选择器的输入端,第二轮询调度模块输出的通道标签CH_tag可以作为多路选择器的选择端。示例性地,当第二轮询调度模块输出的通道标签为CH_1(即通道1),则多路选择器可以选通预设FIFO#1(即用于预取通道1上的指令数据的预设FIFO),从而将通道1上的指令数据读入AXI接口控制模块。
图12示出了图11B中的DMA在单通道切换模式的工作时序图的一个示例。如图12所示,预设FIFO的深度为6,可以存储六条指令,分别为指令1、指令2、指令3、指令4、指令5、指令6。该预设FIFO用于存储单通道上的指令数据,例如用于存储图11B中的DMA在通道1上的指令数据。假设图11B中的DMA的后级模块以及片上网络一直处于准备就绪状态,即GLB_instr_ready和Ar_ready一直为高。同时,假设AXI接口控制模块的极限处理速度为每拍处理一条指令数据。
在第一拍的起始(如第一拍的上升沿),AXI接口控制模块处于空闲状态。在第一拍预设FIFO_读请求信号为高,预设FIFO可以采用本公开上文描述的组合逻辑的存储器,由于预设FIFO的读请求与读数据同拍出现,因此在第一拍根据预设FIFO_读请求读出的指令1从预设FIFO读入至AXI接口控制模块,AXI接口控制模块在第一拍对指令1进行处理。
在第二拍,预设FIFO_读请求信号继续为高,同时AXI接口控制模块已经将指令1处理完毕,因此在第二拍继续根据预设FIFO_读请求读出指令2至AXI接口控制模块,AXI接口控制模块在第二拍对指令2行处理。由于FIFO的空/满状态是在读或写操作的下一拍才能感知得到,因此在将指令1从预设FIFO读出至AXI接口控制模块的第一拍,第一轮询调度模块尚未感知得到预设FIFO为非满状态,因此SRAM_读请求为低(例如为0)。在第二拍,第一轮询调度模块感知到预设FIFO为非满状态,可以继续向预设FIFO中写入指令数据,因此SRAM_读请求为高(例如为1)并在下一拍将指令数据(例如指令7)从指令虚拟通道存储单元读出。在第二拍,指令数据(例如指令7)尚未从指令虚拟通道存储单元读出,因此预设FIFO_写请求为低(例如为0)。
在第三拍,预设FIFO_读请求信号继续为高,同时AXI接口控制模块已经将指令2处理完毕,因此在第三拍继续根据预设FIFO_读请求读出指令3至AXI接口控制模块,AXI接口控制模块在第三拍对指令3行处理。在第三拍,根据第二拍的SRAM_读请求,指令数据(例如指令7)成功写入至预设FIFO的写端口,此时预设FIFO_写请求为高(例如为1)。由于在第三拍,预设FIFO仍为非满状态,因此SRAM_读请求继续为高(例如为1)并在下一拍将指令数据(例如指令8)从指令虚拟通道存储单元读出。
在第四拍,预设FIFO_读请求信号继续为高,同时AXI接口控制模块已经将指令3处理完毕,因此在第四拍继续根据预设FIFO_读请求读出指令4至AXI接口控制模块,AXI接口控制模块在第四拍对指令4行处理。在AXI接口控制模块处理指令4时,新的指令数据(例如指令7)已经成功写入预设FIFO。
同理,在第五拍,在AXI接口控制模块处理指令5时,新的指令数据(例如指令8)也已经成功写入预设FIFO,依次类推,从而实现DMA对指令的流水线处理,提高DMA效率。
本公开的至少一些实施例中的DMA通过引入双轮询调度机制,分离DMA的后级模块以及片上网络与在指令虚拟通道存储单元处进行取指的逻辑,在指令虚拟通道存储单元处的取指不再受DMA的后级模块以及片上网络的反压,从而不仅消除或降低不同通道之间进行切换而产生的延迟,而且消除或降低单通道切换模式下而产生的延迟,提高DMA效率。
本公开的一些实施例中的DMA通过引入双轮询调度机制,不仅可以消除或降低不同通道之间切换而产生的延迟,也能消除单通道切换模式下而产生的延迟,另一方面,图11B中的DMA在向预设FIFO中写入指令时,存在多读一条指令数据的风险。下面结合图13A对图11B中的DMA多读指令数据的风险进行说明。
如图13A所示,假设本公开中的单通道预设FIFO的深度为2(即预设FIFO只能写入两条指令数据)。在第二拍和第三拍,SRAM_读请求为高,分别可以在下一拍将数据从DMA中的指令虚拟通道存储单元读出并置于预设FIFO的写端口,即分别在第三拍和第四拍将数据1和数据2读出并置于预设FIFO的写端口。在第三拍和第四拍,预设FIFO_写请求为高,因此数据1和数据2分别在第三拍和第四拍写入预设FIFO。
由于在第四拍预设FIFO已经存满指令数据,因此在第五拍的上升沿预设FIFO的满信号拉高,即在第五拍预设FIFO_full为高。由于预设FIFO的空/满状态是在读/写操作的下一拍才能感知,因此在第四拍,DMA中的指令读控制模块仍未感知到预设FIFO为满状态。若在第四拍DMA中的指令虚拟通道存储单元仍存在指令数据,则SRAM_读请求继续为高。在第五拍,根据上一拍的SRAM_读请求,数据3从指令虚拟通道存储单元读出并置于预设FIFO的写端口。由于在第五拍,预设FIFO_full为高从而反压预设FIFO_写请求,预设FIFO_写请求在第五拍拉低,从而引起多读的数据3被堵在预设FIFO写端口而无法被写入的风险。
基于上述实施例,本公开至少一实施例提出一种控制数据写入的方法,从而避免图11B中的DMA多读指令的风险。
图13B示出了根据本公开至少一个实施例的一种用于存取数据的装置的结构示意图。如图13B所示,该用于存取数据的装置包括存储模块、读取模块、先进先出队列和取出模块,其中:所述存储模块配置为存储所述装置所接收的所述数据;所述读取模块配置为根据读请求信号将所述数据从所述存储模块读出并写入先进先出队列;所述先进先出队列配置为根据控制信号执行对所述数据的写入;以及所述取出模块配置为从所述先进先出队列取出所述数据,其中,所述读请求信号受控于所述先进先出队列的第一状态信号和所述存储模块的第二状态信号,所述第一状态信号指示所述先进先出队列的满或非满状态,所述第二状态信号指示所述存储模块的空或非空状态。在该示例中,数据可以是本公开上文中的R-type指令,存储模块可以是本公开上下文中的指令虚拟通道存储单元。需要说明的是,在该示例中,数据也可以是其他任何类型的指令数据或者任何非指令型的数据,例如,数据可以是用来执行特定操作的指令数据,也可以是各种以信息为载体的数据。在该示例中,读取模块可以从先进先出队列获取第一状态信号,从存储模块获取第二状态信号。若先进先出队列已经存满了数据(即,没有可以继续存储下一笔数据的地址空间),则第一状态信号可以指示先进先出队列的满状态,否则,第一状态信号可以指示先进先出队列的非满状态。若存储模块已经没有了数据(例如,读取模块已经将其中的数据全部读入先进先出队列),则第二状态信号可以指示存储模块的空状态,否者第二状态信号可以指示存储模块的非空状态。作为读请求信号受控于第一状态信号和第二状态信号的一个示例,可以为若第一状态信号指示先进先出队列的非满状态且第二状态信号指示存储模块的非空状态,则读请求信号为高(即,指示读请求有效),否则读请求信号为低(即,指示读请求无效)。在一个示例中,控制信号可以受控于第一状态信号。在另一个示例中,控制信号可以受控于读请求信号和第一状态信号。在又一个示例中,控制信号可以受控于指示先进先出队列的近满/非近满状态的第三状态信号。下文将对控制信号的这些具体实施例进行详细描述。
根据本公开的一个示例,可以根据预设FIFO满信号的下降沿控制对数据的写入。在该示例中,在预设FIFO的满信号拉低时,通过检测满信号的下降沿使得多读的指令数据被写入。
图14示出了根据预设FIFO的满信号的下降沿控制对指令数据的写入的工作时序图的一个示例。
在图14中,第一拍至第五拍的工作时序图与图13A示出的相同这里不再赘述。如图14所示,在第五拍多读出的数据3被堵在预设FIFO写端口而无法被写入,在第六拍图11B中的DMA的AXI接口控制模块从预设FIFO取出数据1,从而预设FIFO空出一个存储地址,因此在第六拍预设FIFO为非满状态并且在下一拍能够感知。在第七拍,图11B中的DMA的AXI接口控制模块从预设FIFO取出数据2,从而预设FIFO又空出一个存储地址,同时预设FIFO_full在第七拍拉低,预设FIFO的非满状态在第七拍被感知,因此SRAM_读请求在第七拍拉高并且在下一拍将数据4从图11B中的DMA的指令虚拟通道存储单元取出。在该示例中,如图14中的α处所示,检测预设FIFO的满信号“预设FIFO_full”的下降沿,若检测到满信号的下降沿则使预设FIFO_写请求拉高,从而将多读的数据3在预设FIFO为非满状态的下一拍(即图14中的第七拍)写入预设FIFO,进而避免多读的指令数据被堵在预设FIFO写端口而无法被写入的风险。
尽管本公开的至少一些实施例提出了一种通过检测预设FIFO满信号的下降沿来控制对数据的写入的方案,但在极端情况下,图11B中的DMA在向预设FIFO中预存指令时,也会存在不多读一条指令数据情形,在此前提下,仍仅通过检测预设FIFO满信号的下降沿来控制对数据的写入会导致写入无效数据的风险。
图15对仅检测满信号的下降沿来控制数据写入而导致的写入无效数据的风险进行了说明。如图15所示,在第二拍至第四拍,图11B中的DMA的指令读控制模块感知的预设FIFO的状态均为非满状态,因此在第二拍至第四拍,SRAM_读请求不会受预设FIFO_full信号的反压。但是若在第四拍,图11B中的DMA的指令虚拟通道存储单元中没有可读取的指令数据(即指令虚拟通道存储单元中的对应通道的存储区域为空),则在第四拍SRAM_读请求会受指令虚拟通道存储单元的空状态的反压,因此SRAM_读请求在第四拍拉低,而此时预设FIFO刚好处于满的状态,因此不会存在多读一条指令数据的风险。仍当检测到预设FIFO满信号的下降沿时,拉高预设FIFO_写请求(即图15中的α所示),则在第七拍会将无效数据写入预设FIFO从而引入风险。
基于上述实施例,本公开提供一种通过旗标信号控制对数据的写入的方案,从而可以在避免多读指令数据的风险同时避免无效数据的写入。
根据本公开的一个示例,可以根据预设FIFO的满信号和SRAM_读请求信号确定旗标信号,图11B中的DMA中的指令虚拟通道存储单元与预设FIFO通过旗标信号握手,在旗标信号有效时可以从指令虚拟通道存储单元向预设FIFO写指令数据,在旗标信号无效时禁止从指令虚拟通道存储单元向预设FIFO写指令数据。
图16示出了根据本公开的旗标信号的一个示例来控制对数据的写入的工作时序图。在该示例中,旗标信号是通过将SRAM_读请求信号的下降沿与预设FIFO的满信号进行与逻辑而得到的。如图16所示,在第三拍检测SRAM_读请求的下降沿(为高),而在第三拍的下降沿预设FIFO的满信号为低,两者相与可以得到旗标信号为低,在旗标信号为低时可以反压第七拍时预设FIFO_写请求信号,从而在第七拍不将数据写入预设FIFO,避免了将无效数据写入预设FIFO从而引入风险。同理,如图14所示,若在第四拍检测SRAM_读请求的下降沿(为高),而在第四拍的下降沿预设FIFO的满信号为高,两者相与可以得到旗标信号为高,在旗标信号为高时可以使能第七拍时预设FIFO_写请求信号,从而在第七拍将多读的指令数据写入预设FIFO,避免多读的指令数据被堵在预设FIFO写端口而无法被写入的风险。
本公开的至少一些实施例提出了通过旗标信号控制对数据的写入来避免多读指令数据的风险,另一方面,将该方案应用在多个不同通道之间切换时,可能存在将当前通道上多读的指令数据写入其他通道上的预设FIFO的风险,从而导致错误的指令写入。
基于上述实施例,本公开提出通过利用FIFO中的Almost_Full机制来控制数据的写入。
图17示出了根据本公开的利用Almost_Full信号(简称为afull信号)控制数据的写入的工作时序图的一个示例。如图17所示,在第二拍和第三拍,SRAM_读请求为高,根据SRAM_读请求信号图11B中的DMA分别在第三拍和第四拍将数据1和数据2写入预设FIFO。由于预设FIFO的深度为2,因此在向预设FIFO存入第一条数据时(即第三拍)预防FIFO即为将满状态并在下一拍将指示将满状态的afull信号拉高,所以预设FIFO_afull(即预设FIFO的afull信号)在第四拍为高。在第四拍,拉高后的预设FIFO_afull信号可以反压SRAM_读请求信号,从而避免了图11B中的DMA的指令读控制模块继续从指令虚拟通道单元读取数据。
本公开的至少一些实施例提出了通过利用FIFO中的Almost_Full机制控制数据的写入来避免单通道切换模式和多通道切换模式多读指令数据的风险,另一方面,若图11B中的DMA中的预设FIFO的深度为2,则会引入至少两拍的延迟。基于此,优选地,在本公开的一个示例中,预设FIFO的深度选为4,同时Almost_Full信号选为存入3笔数据时拉高,从而解决预设FIFO深度为2时所引入的两拍延迟,实现图11B中的DMA对指令数据的流水线处理,提高DMA的效率。
本申请使用了特定词语来描述本申请的实施例。如“第一/第二实施例”、“一实施例”、和/或“一些实施例”意指与本申请至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本申请的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
此外,本领域技术人员可以理解,本申请的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本申请的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本申请的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
除非另有定义,这里使用的所有术语(包括技术和科学术语)具有与本发明所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。
上面是对本发明的说明,而不应被认为是对其的限制。尽管描述了本发明的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本发明的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本发明范围内。应当理解,上面是对本发明的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本发明由权利要求书及其等效物限定。