掌桥专利:专业的专利平台
掌桥专利
首页

实现矢量跨步内存存取的处理器、操作方法与载存装置

文献发布时间:2024-04-18 19:52:40


实现矢量跨步内存存取的处理器、操作方法与载存装置

技术领域

本发明涉及一种电子电路,尤其涉及实现矢量跨步内存存取的一种处理器、操作方法与载存装置。

背景技术

矢量非单位(常量)跨步操作(strided operations)是对离散于内存内不同地址处的数据元素进行存取。在跨步操作的第一个叠代(iteration)中,跨步操作会以有效基址(base effective address)作为第一个存取地址,然后存取内存内第一个存取地址处的第一个数据元素(element)。在跨步操作的第二个叠代中,跨步操作会将有效基址加上一个字节偏移量(byte offset,或称步幅,stride)而产生第二个存取地址,然后存取内存内第二个存取地址处的第二个数据元素。

在跨步操作的第三个叠代中,跨步操作会将有效基址加上两个字节偏移量而产生第三个存取地址,然后存取内存内第三个存取地址处的第三个数据元素。以此类推,矢量跨步操作可以存取离散于内存内不同地址处的多个数据元素。在跨步操作的每一个叠代中,现有技术每次仅产生一个存取地址。因此,若有n笔目标数据(数据元素)离散于内存内n个地址处,则现有技术会以n次叠代存取内存内的这n笔目标数据。

发明内容

本发明提供一种处理器、操作方法与载存装置,以加速跨步操作(stridedoperations)的进行。

在根据本发明的实施例中,上述的处理器适于存取内存。处理器包括矢量寄存器堆(Vector register file,VRF)以及载存装置(load store device)。载存装置耦接至矢量寄存器堆。载存装置对内存进行跨步操作。载存装置于跨步操作的目前叠代(iteration)中读取在内存内多个不连续地址处的多个第一数据元素(data elements)而将这些第一数据元素写入所述矢量寄存器堆,或是载存装置从矢量寄存器堆读取多个第二数据元素而于跨步操作的目前叠代中将这些第二数据元素分别写入在内存内多个不连续地址处。

在根据本发明的实施例中,上述的操作方法包括:由载存装置对所述内存进行跨步操作;以及由载存装置于跨步操作的目前叠代中读取在内存内多个不连续地址处的多个第一数据元素而将这些第一数据元素写入矢量寄存器堆,或是由载存装置从矢量寄存器堆读取多个第二数据元素而于跨步操作的目前叠代中将这些第二数据元素分别写入在内存内多个不连续地址处。

在根据本发明的实施例中,上述的载存装置包括:跨步地址产生器以及载存电路。跨步地址产生器依据目前基址以及步幅产生多个跨步地址。载存电路耦接至跨步地址产生器,以接收些跨步地址。载存电路依据目前基址与这些跨步地址读取内存的多个第一数据元素,而将这些第一数据元素写入矢量寄存器堆,或是载存电路从矢量寄存器堆读取多个第二数据元素而依据目前基址与这些跨步地址将这些第二数据元素分别写入内存。

基于上述,本发明诸实施例所述载存装置可以对内存进行跨步操作。在跨步操作的同一个叠代中,载存装置可以对在内存内多个不连续地址处进行存取,以加速跨步操作的进行。当载存装置读取在内存内多个不连续地址处的多个第一数据元素时,载存装置可以将这些第一数据元素写入矢量寄存器堆以供处理器的矢量功能单元(Vector FunctionUnit,VFU)使用。在矢量功能单元将处理结果(第二数据元素)写回矢量寄存器堆后,载存装置可以从矢量寄存器堆读取这些第二数据元素,以及在跨步操作的一个叠代中将这些第二数据元素分别写入在内存内多个不连续地址处。

附图说明

图1A是依照本发明的一实施例的一种处理器的电路方块(circuit block)示意图;

图1B是依照本发明的另一实施例的一种处理器的电路方块示意图;

图2是依照本发明的一实施例所示出,处理器的操作方法的流程示意图;

图3是依照本发明的一实施例所示出,跨步操作的具体范例示意图;

图4是依照本发明的一实施例的一种载存装置的电路方块示意图;

图5是依照本发明的一实施例的一种载存电路的电路方块示意图;

图6是依照本发明的另一实施例的一种载存电路的电路方块示意图;

图7是依照本发明的又一实施例的一种载存电路的电路方块示意图;

图8是依照本发明的再一实施例的一种载存电路的电路方块示意图;

图9是依照本发明的更一实施例的一种载存电路的电路方块示意图。

附图标记说明

10:内存

100:处理器

105:指令读取/解码/发布单元

110:功能单元

120:矢量功能单元

130:载存装置

131:跨步地址产生器

132:载存电路

132a:控制电路

132b、132d、132g、132i、132n、132q:线缓冲器

132c:载电路

132e、132j:边界缓冲器

132f、132k、mux1、mux2、mux3、mux4、mux5、mux6、mux7、mux8、mux81:多任务器

132h:存电路

132m、132r:路由电路

132p:数据处理电路

140:寄存器堆

150:矢量寄存器堆

160:主内存

170:DMA控制器

180:次内存

A、B、C、D、E0、E1、E2、E3:数据元素

Ab:目前基址

byte_off_1、byte_off_8、byte_off_n:移位值

byte_we1、byte_we2:字节写入致能信号

Cn:溢位部

mux_sel_1、mux_sel_8、mux_sel_n:多任务器选择信号

OFFn:偏移部

PLM:配置电路

rd_ptr:读指标

S210~S260:步骤

ST:步幅

wr_ptr:写指标

x:非目标数据

具体实施方式

现将详细地参考本发明的示范性实施例,示范性实施例的实例说明于附图中。只要有可能,相同元件符号在附图和描述中用来表示相同或相似部分。

在本案说明书全文(包括权利要求)中所使用的“耦接(或连接)”一词可指任何直接或间接的连接手段。举例而言,若文中描述第一装置耦接(或连接)于第二装置,则应该被解释成该第一装置可以直接连接于该第二装置,或者该第一装置可以通过其他装置或某种连接手段而间接地连接至该第二装置。本案说明书全文(包括权利要求)中提及的“第一”、“第二”等用语是用以命名组件(element)的名称,或区别不同实施例或范围,而并非用来限制组件数量的上限或下限,亦非用来限制组件的次序。另外,凡可能之处,在附图及实施方式中使用相同标号的组件/构件/步骤代表相同或类似部分。不同实施例中使用相同标号或使用相同用语的组件/构件/步骤可以相互参照相关说明。

图1A是依照本发明的一实施例的一种处理器100的电路方块(circuit block)示意图。处理器100可以是通用处理器或专用处理器。所述通用处理器可以包括中央处理单元或是其他通用处理器。所述专用处理器可以包括网络处理器、通信处理器、数字信号处理器(digital signal processor,DSP)、嵌入式处理器或是其他专用处理器。处理器可具有如以下的指令集架构中的任一个:复杂指令集计算(Complex Instruction Set Computing,CISC)、精简指令集计算(Reduced Instruction Set Computing,RISC)、超长指令字(VeryLong Instruction Word,VLIW)或其混合指令集架构,或其它类型的指令集架构。依照实际设计,处理器100可以是单指令流多数据流(Single Instruction Multiple Data,SIMD)处理器、矢量处理器或是其他处理器。

处理器100可以存取内存10。举例来说,处理器100可以从内存10中读取编程码(programming codes)并执行。在执行编程码的过程中,处理器100可以从内存10中读取数据元素(data element)以及(或是)将数据元素写回内存10。图1A所示处理器100包括矢量寄存器堆(vector register file,VRF)150以及载存装置(load store device)130。依照实际设计,处理器100还可以包括指令读取/解码/发布单元(instruction fetching/decoding/issuing unit)105、功能单元(function unit,FU)110、矢量功能单元(vectorFU)120、以及寄存器堆(register file,RF)140。功能单元110以及(或是)矢量功能单元120可以包括整数(integer)功能单元、浮点数(floating-point)功能单元以及(或是)其他功能单元。指令读取/解码/发布单元105可以通过指令高速缓存(instruction cache,未示出)从内存10提取指令。指令读取/解码/发布单元105可以解码取指令,然后依照解码结果去控制功能单元110、矢量功能单元120与载存装置130。基于解码结果,功能单元110和/或矢量功能单元120可以执行所读取指令的相关功能操作。

依照实际设计,寄存器堆140包含整数寄存器堆、浮点数寄存器堆以及(或是)其他寄存器堆。寄存器堆140的数据宽度(datawidth)可能是32位(bit)、64位或是其他宽度。当指令需要读取在内存10内的数据元素时,基于指令读取/解码/发布单元105的控制,载存装置130可以从内存10读取数据元素,然后将数据元素存放在寄存器堆140。基于指令的操作,功能单元110与矢量功能单元120可以从寄存器堆140取得数据元素。在指令执行后,功能单元110与矢量功能单元120可以将处理结果写回寄存器堆140。功能单元110与矢量功能单元120的任一个可以在一个周期(cycle)中向寄存器堆140存取一笔数据元素。

依照实际设计,矢量寄存器堆150包含整数寄存器堆、浮点数寄存器堆以及(或是)其他寄存器堆。每个矢量寄存器150堆的数据宽度可以大于寄存器堆140的数据宽度。举例来说,矢量寄存器150堆的数据宽度可以是256位、512位或是其他宽度。当指令需要读取在内存10内的多个数据元素时,基于指令读取/解码/发布单元105的控制,载存装置130可以从内存10读取这些数据元素,然后将这些数据元素存放在矢量寄存器堆150。基于矢量处理指令的操作,矢量功能单元120还可以从矢量寄存器堆150取得数据元素(第一数据元素)。在矢量处理指令执行后,矢量功能单元120可以将处理结果(第二数据元素)写回矢量寄存器堆150。

基于指令读取/解码/发布单元105的控制,载存装置130可以通过数据高速缓存(data cache,未示出)存取内存10。载存装置130耦接至矢量寄存器堆150。在一些操作情境中,载存装置130可以通过数据高速缓存读取在内存10内数据元素而将此数据元素加载寄存器堆140或是矢量寄存器堆150。在另一些操作情境中,载存装置130可以从寄存器堆140或是矢量寄存器堆150读取数据元素,而将此数据元素通过数据高速缓存存于内存10。

基于指令读取/解码/发布单元105的控制,载存装置130还可以对内存10进行跨步操作(strided operations)。跨步操作是对离散于内存10内不同地址处的数据元素进行存取。在一些操作情境中,载存装置130可以在跨步操作的同一个叠代(iteration,目前叠代)中读取在内存10内多个不连续地址处的多个第一数据元素,而将这些第一数据元素写入矢量寄存器堆150。在另一些操作情境中,载存装置130可以从矢量寄存器堆150读取多个第二数据元素,而于跨步操作的同一个叠代(目前叠代)中将这些第二数据元素分别写入在内存10内多个不连续地址处。

依照实际设计,图1A所示处理器100可以被封装为单一个集成电路,然而本发明的实现方式不应受限于图1A所示实施例。在另一些实施例中,载存装置130与矢量寄存器堆150可以被封装为不同集成电路。举例来说,载存装置130可以被应用于直接内存访问(Direct Memory Access,DMA)控制器或是其他内存存取电路。图1B是依照本发明的另一实施例的一种处理器的电路方块示意图。图1B所示电子设备包括主内存160、DMA控制器170以及次内存180。图1B所示主内存160可以参照图1A所示内存10的相关说明加以类推,图1B所示DMA控制器170可以参照图1A所示载存装置130的相关说明加以类推,以及图1B所示次内存180可以参照图1A所示矢量寄存器堆150的相关说明加以类推,故在此不予赘述。

图2是依照本发明的一实施例所示出,处理器的操作方法的流程示意图。请参照图1A与图2。在步骤S210中,载存装置130可以对内存10进行跨步操作。当载存装置130欲将内存10的第一数据元素加载矢量寄存器堆150时(步骤S220的判断结果为“载数据”),跨步操作包括步骤S230与S240。当载存装置130欲将矢量寄存器堆150的第二数据元素存入内存10时(步骤S220的判断结果为“存数据”),跨步操作包括步骤S250与S260。

图3是依照本发明的一实施例所示出,跨步操作的具体范例示意图。请参照图1A、图2与图3。假设载存装置130欲将内存10的第一数据元素加载矢量寄存器堆150。于跨步操作的目前叠代中,载存装置130可以读取在内存10内多个不连续地址处的多个第一数据元素(步骤S230),以及将这些第一数据元素写入矢量寄存器堆150(步骤S240)。举例来说,在跨步操作的同一个叠代中,载存装置130会使用目前基址(base address)Ab与步幅(stride,或称偏移量,offset)ST去产生目前叠代的多个跨步地址。以图3所示情境为例,载存装置130可以产生目前叠代的第一个跨步地址(即Ab)、第二个跨步地址(即Ab+ST*1)、第三个跨步地址(即Ab+ST*2)与第四个跨步地址(即Ab+ST*3)。然后,载存装置130可以在跨步操作的同一个叠代中将内存10内多个不连续地址(即“Ab”、“Ab+ST*1”、“Ab+ST*2”与“Ab+ST*3”)处的数据元素E0、数据元素E1、数据元素E2与数据元素E3载入矢量寄存器堆150。在一个叠代结束时,目前基址Ab会被更新以指向下一个叠代要处理的数据元素。以此类推,矢量跨步操作可以在下一个叠代中将离散于内存10内不同地址处的其他数据元素加载矢量寄存器堆150。

假设载存装置130欲将矢量寄存器堆150的第二数据元素存入内存10。载存装置130可以从矢量寄存器堆150读取多个第二数据元素(步骤S250),以及于跨步操作的目前叠代中将这些第二数据元素分别写入在内存10内多个不连续地址处(步骤S260)。举例来说,载存装置130可以从矢量寄存器堆150读取数据元素E0、E1、E2与E3。载存装置130会使用目前基址Ab与步幅ST去产生目前叠代的多个跨步地址,即跨步地址“Ab”、“Ab+ST*1”、“Ab+ST*2”与“Ab+ST*3”。在跨步操作的同一个叠代中,载存装置130可以将这些数据元素E0、E1、E2与E3分别写入在内存10内多个不连续地址处(即“Ab”、“Ab+ST*1”、“Ab+ST*2”与“Ab+ST*3”)。在一个叠代结束时,目前基址Ab会被更新以指向下一个叠代要写入数据元素的地址。以此类推,矢量跨步操作可以在下一个叠代中将矢量寄存器堆150的数据元素分别存入在内存10内多个不连续地址处。

综上所述,所述载存装置130可以对内存10进行跨步操作。在跨步操作的同一个叠代中,载存装置130可以对在内存10内多个不连续地址处进行存取,以加速跨步操作的进行。当载存装置130读取在内存10内多个不连续地址处的多个第一数据元素时,载存装置130可以将这些第一数据元素写入矢量寄存器堆150以供处理器100的功能单元(例如矢量功能单元120)使用。在矢量功能单元120将处理结果(第二数据元素)写回矢量寄存器堆150后,载存装置130可以从矢量寄存器堆150读取这些第二数据元素,以及在跨步操作的一个叠代中将这些第二数据元素分别写入在内存10内多个不连续地址处。

图4是依照本发明的一实施例的一种载存装置130的电路方块示意图。图4所示内存10、载存装置130以及矢量寄存器堆150可以参照图1A所示内存10、载存装置130以及矢量寄存器堆150的相关说明加以类推,故不再赘述。图4所示载存装置130可以作为图1A所示载存装置130的诸多实施例之一。

在图4所示实施例中,载存装置130包括跨步地址产生器(strided addressgenerator)131以及载存电路(load store circuit)132。跨步地址产生器131可以依据目前基址Ab以及步幅ST产生多个跨步地址。举例来说(但不限于此),跨步地址产生器131可以计算{Cn,OFFn}=LSB1+LSB2*(n-1)以产生目前叠代的N个跨步地址,其中n为大于0且小于等于N的整数,而N为依照实际设计所决定的整数。在一些实施例中,整数N可以是8或是其他整数。LSB2为步幅ST的最低有效位部(least significant bit part),LSB1为目前基址Ab的最低有效位部,{Cn,OFFn}为这些跨步地址中的第n个跨步地址,OFFn为所述第n个跨步地址{Cn,OFFn}的偏移部,以及Cn为所述第n个跨步地址{Cn,OFFn}的溢位部(carry part)。最低有效位部LSB1与LSB2的位数量(宽度)可以依照实际设计来决定。举例来说,最低有效位部LSB1与(或)LSB2的宽度(寻址空间)可以适配于载存电路132的线缓冲器(line buffer)的宽度。在一些实施例中,最低有效位部LSB1与(或)LSB2的宽度可以是5位或是任何其他位数量。

载存电路132耦接至跨步地址产生器131,以接收多个跨步地址。当载存装置130欲将内存10的多个第一数据元素加载矢量寄存器堆150时,载存电路132可以依据目前基址Ab与这些跨步地址去读取内存10的这些第一数据元素,而将这些第一数据元素写入矢量寄存器堆150。或是,当载存装置130欲将矢量寄存器堆150的多个第二数据元素存入内存10时,载存电路132可以从矢量寄存器堆150读取这些第二数据元素,而依据目前基址Ab与这些跨步地址将这些第二数据元素分别写入内存10内多个不连续地址处。所述第一数据元素与(或)所述第二数据元素的宽度,亦即数据元素长(data element length)ELEN,可以依照实际程序应用来决定。举例来说,在一些应用情境中,数据元素长ELEN可以是1字节(byte)、2字节、4字节、8字节或是其他宽度。

在一个叠代结束时,跨步地址产生器131可以依照跨步地址{Cn,OFFn}的被使用状况而更新目前基址Ab,以使目前基址Ab指向下一个叠代要处理的数据元素。举例来说,假设在一个叠代中N个跨步地址({C1,OFF1}~{CN,OFFN})中的第1个至第n-1个跨步地址被载存电路132所使用/处理,则跨步地址产生器131可以计算Ab2={MSB1+Cn,OFFn}以更新目前基址Ab,其中MSB1为目前基址Ab的最高有效位部(most significant bit part),以及Ab2为下一个叠代的新基址Ab。

图5是依照本发明的一实施例的一种载存电路132的电路方块示意图。图5所示内存10以及矢量寄存器堆150可以参照图1A所示内存10以及矢量寄存器堆150的相关说明加以类推,图5所示载存电路132可以参照图4所示载存电路132的相关说明加以类推,故不再赘述。图5所示载存电路132可以作为图4所示载存电路132的诸多实施例之一。

在图5所示实施例中,载存电路132包括控制电路132a、线缓冲器(line buffer)132b、载电路132c以及线缓冲器132d。线缓冲器132b可以在目前叠代中依据目前基址Ab的最高有效位部MSB1从内存10读取多个连续地址处的多个字节,其中这些字节包括所述多个第一数据元素。线缓冲器132b的宽度可以依照实际设计来决定。举例来说,在一些应用情境中,线缓冲器132b的宽度可以是32字节(256位)或是其他宽度。假设在线缓冲器132b的宽度为32字节,则目前基址Ab的最低有效位部LSB1的宽度与(或)步幅ST的最低有效位部LSB2的宽度可以是5位,以适配于线缓冲器132b的宽度。假设目前基址Ab为{MSB1,LSB1},则线缓冲器132b可以在目前叠代中从内存10读取多个连续地址{MSB1,0b00000}~{MSB1,0b11111}的多个字节。

控制电路132a可以耦接至跨步地址产生器131以接收N个跨步地址(即{Cn,OFFn},其中n为大于0且小于等于N的整数)。控制电路132a可以依据数据元素长(data elementlength)ELEN选择这些跨步地址的偏移部OFFn中的一个或多个,以产生N个偏移值,即offn。举例来说,假设跨步地址{Cn,OFFn}的数量(即N)为8。针对数据元素长ELEN为1字节的应用情境,控制电路132a可以选择偏移部OFF1~OFF8作为偏移值off1~off8。针对数据元素长ELEN为2字节的应用情境,控制电路132a可以选择偏移部OFF1~OFF4以产生偏移值off1~off8。例如,偏移值off1~off8分别为“OFF1”、“OFF1+1”、“OFF2”、“OFF2+1”、“OFF3”、“OFF3+1”、“OFF4”与“OFF4+1”。针对数据元素长ELEN为4字节的应用情境,控制电路132a可以选择偏移部OFF1~OFF2以产生偏移值off1~off8。例如,偏移值off1~off8分别为“OFF1”、“OFF1+1”、“OFF1+2”、“OFF1+3”、“OFF2”、“OFF2+1”、“OFF2+2”与“OFF2+3”。针对数据元素长ELEN为8字节的应用情境,控制电路132a可以选择偏移部OFF1以产生偏移值off1~off8。例如,偏移值off1~off8分别为“OFF1”、“OFF1+1”、“OFF1+2”、“OFF1+3”、“OFF1+4”、“OFF1+5”、“OFF1+6”与“OFF1+7”。

控制电路132a可以利用写指标(write pointer)wr_ptr指向在线缓冲器132d内的目前矢量寄存器加载位置。控制电路132a可以依据写指标wr_ptr轮转(rotate)这些偏移值offn,而产生N个多任务器选择信号mux_sel_n。举例来说,假设N为8,控制电路132a可以使用下述表1去产生8个多任务器选择信号mux_sel_1~mux_sel_8。表1虽只例举写指标wr_ptr的范围为0~7,然而写指标wr_ptr的其他范围可以依表1去类推。在其他实施例中,产生多任务器选择信号mux_sel_n的方式不限于表1。

表1:依据写指标wr_ptr轮转偏移值offn的范例

载电路132c耦接至控制电路132a,以接收这些多任务器选择信号mux_sel_n。载电路132c可以依据这些多任务器选择信号mux_sel_n从线缓冲器132b的多个字节中收集所述多个第一数据元素。第二线缓冲器132d耦接至载电路132c,以接收这些第一数据元素。

控制电路132a还可以计算OVRn=Cn|(MSB2≠0),以产生目前叠代的溢值(overflow value),其中OVRn表示所述溢值中的第n个位,Cn为跨步地址产生器131所提供第n个跨步地址{Cn,OFFn}的溢位部,运算符|为或运算,以及MSB2为步幅ST的最高有效位部(most significant bit part)。所述溢值具有N个位。控制电路132a可以依据数据元素长ELEN选择所述溢值中的至少一个位,以产生N个溢位“ovrn”。举例来说,假设N为8,其中最低溢位ovr1始终为“0”。针对数据元素长ELEN为1字节的应用情境,控制电路132a可以选择所述溢值中的位OVR2~OVR8作为溢位ovr2~ovr8。针对数据元素长ELEN为2字节的应用情境,控制电路132a可以选择所述溢值中的位OVR2~OVR4以产生溢位ovr1~ovr8。例如,溢位ovr1~ovr8分别为“0”、“0”、“OVR2”、“OVR2”、“OVR3”、“OVR3”、“OVR4”与“OVR4”。针对数据元素长ELEN为4字节的应用情境,控制电路132a可以选择所述溢值中的位OVR2以产生溢位ovr1~ovr8。例如,溢位ovr1~ovr8分别为“0”、“0”、“0”、“0”、“OVR2”、“OVR2”、“OVR2”与“OVR2”。针对数据元素长ELEN为8字节的应用情境,控制电路132a可以将溢位ovr1~ovr8全设定为“0”。

控制电路132a可以反相这些溢位ovrn以产生N个反相溢位“ovrbn”。控制电路132a可以依据写指标wr_ptr去移位(shift)这些反相溢位ovrbn,而产生字节写入致能信号byte_we1。所述字节写入致能信号byte_we1具有M+N-1个位,其中M为依照实际设计所决定的整数。线缓冲器132d可以依据字节写入致能信号byte_we1决定将载电路132c所提供的多个第一数据元素写入线缓冲器132d的哪些字节位置。

举例来说,假设M为32且N为8,溢位ovr1~ovr8为“00000000”,且写指标wr_ptr为4。控制电路132a可以反相这些溢位ovr1~ovr8,使得反相溢位ovrb1~ovrb8为“11111111”。控制电路132a可以依据写指标wr_ptr去将这些反相溢位ovrb1~ovrb8向左(向高位方向)移位4个位,使得字节写入致能信号byte_we1为“00…00 11111111 0000”。字节写入致能信号byte_we1的每一个位对应于线缓冲器132d中的一个字节位置。字节写入致能信号byte_we1的某一个位为“0”表示,线缓冲器132d中的一个对应字节位置拒绝被载电路132c写入。反之,字节写入致能信号byte_we1的某一个位为“1”表示,线缓冲器132d中的一个对应字节位置可以被载电路132c写入。因此,线缓冲器132d可以依据字节写入致能信号byte_we1决定将载电路132c所提供的8个字节(多个第一数据元素)写入线缓冲器132d的哪些字节位置。

图6是依照本发明的另一实施例的一种载存电路132的电路方块示意图。在图6所示实施例中,载存电路132包括线缓冲器132b、载电路132c、线缓冲器132d、边界缓冲器(boundary buffer)132e以及多任务器132f。图6所示矢量寄存器堆150可以参照图1A所示矢量寄存器堆150的相关说明加以类推,图6所示线缓冲器132b、载电路132c以及线缓冲器132d可以参照图5所示线缓冲器132b、载电路132c以及线缓冲器132d的相关说明加以类推,故不再赘述。图6所示载电路132c可以作为图5所示载电路132c的诸多实施例之一。

在图6所示实施例中,载电路132c包括N个多任务器,例如图6所示多任务器mux1、mux2、mux3、mux4、mux5、mux6、mux7与mux8。这些多任务器的每一个的控制端耦接至控制电路132a,以接收N个多任务器选择信号mux_sel_n中的一对应者。举例来说,多任务器mux1受控于多任务器选择信号mux_sel_1,多任务器mux2受控于多任务器选择信号mux_sel_2,多任务器mux3受控于多任务器选择信号mux_sel_3,多任务器mux4受控于多任务器选择信号mux_sel_4,多任务器mux5受控于多任务器选择信号mux_sel_5,多任务器mux6受控于多任务器选择信号mux_sel_6,多任务器mux7受控于多任务器选择信号mux_sel_7,以及多任务器mux8受控于多任务器选择信号mux_sel_8。

多任务器mux1~mux8的每一个具有M个选择端(这些选择端例如作为输入端)与一个共同端(这共同端例如作为输出端),其中这些选择端与这些共同端的数据宽度为一个字节,而M为依照实际设计所决定的整数且为线缓冲器132b的字节量。多任务器mux1~mux8的每一个的这些选择端耦接至线缓冲器132b以接收不同位置的字节数据。控制电路132a可以依据写指标wr_ptr轮转这些偏移值offn(例如上述表1所示),而产生多任务器选择信号mux_sel_1~mux_sel_8。多任务器mux1~mux8依照多任务器选择信号mux_sel_1~mux_sel_8从线缓冲器132b收集对应的数据元素(第一数据元素)。

举例来说,假设线缓冲器132b(或132d)的字节量M为32且N为8,数据元素长ELEN为2字节,步幅ST为“0b0…000100”(二进制),以及目前基址Ab为“0b…110100”(二进制)。因此,目前基址Ab的最高有效位部MSB1与最低有效位部LSB1分别为“0b…1”与“0b10100”(即,十进制20),而步幅ST的最高有效位部MSB2与最低有效位部LSB2分别为“0b0”与“0b00100”(即,十进制4)。基于控制电路132a的计算,偏移值off1~off8为十进制“20”、“21”、“24”、“25”、“28”、“29”、“0”与“1”。再假设写指标wr_ptr为28。依据写指针wr_ptr,控制电路132a可以轮转这些偏移值off1~off8,使得多任务器选择信号mux_sel_1~mux_sel_8分别为十进制“28”、“29”、“0”、“1”、“20”、“21”、“24”与“25”。在图6所示操作情境中,一个数据元素被假设为2个字节,然而在其他操作情境中一个数据元素可以有其他宽度。在图6中,位于线缓冲器中偏移“28”与“29”的数据元素被标示为“C”,位于线缓冲器中偏移“0”与“1”的数据元素被标示为“x”,位于线缓冲器中偏移“20”与“21”的数据元素被标示为“A”,位于线缓冲器中偏移“24”与“25”的数据元素被标示为“B”。图6中“x”表示非目标数据。因此,依照多任务器选择信号mux_sel_1~mux_sel_8,多任务器mux1~mux8从线缓冲器132b收集的第一数据元素依序为“C”、“x”、“A”与“B”。线缓冲器132d包括多个区段,而这些区段的每一个的数据宽度为N个字节。多任务器mux1~mux8的共同端的输出被复制给每一个区段。

在图6所示实施例中,载存电路132还包括边界缓冲器132e以及多任务器132f。边界缓冲器132e耦接至载电路132c。当目前叠代之前的一个先前叠代的数据元素(第三数据元素)被写入线缓冲器132d的高边界附近,而使第三数据元素的一剩余部分超出所述高边界时,边界缓冲器132e可以存储先前叠代的所述剩余部分。边界缓冲器132e的字节宽度可以依照实际设计来决定。举例来说,假设跨步地址{Cn,OFFn}的数量N为8,则边界缓冲器132e的字节宽度可以是7字节,以存储先前叠代的剩余部分。

多任务器132f的第一输入端耦接至载电路132c,以接收目前叠代的第一数据元素的一部分。多任务器132f的第二输入端耦接至边界缓冲器132e,以接收先前叠代的剩余部分。多任务器132f的输出端耦接至线缓冲器132d。当边界缓冲器132e具有剩余部分时,多任务器132f将先前叠代的剩余部分选择至线缓冲器132d的低边界。当边界缓冲器132e没有剩余部分时,多任务器132f将第一数据元素的部分选择至线缓冲器132d的低边界。

以图6所示情境为例,数据元素“C”、“B”与“A”被写入线缓冲器132d的高边界附近而剩余部分“C”超出所述高边界,因此剩余部分“C”被存储于边界缓冲器132e。待进入下一个叠代时,边界缓冲器132e的剩余部分“C”可以通过多任务器132f而被写入线缓冲器132d的低边界。线缓冲器132d可以依据字节写入致能信号byte_we1决定是否拒绝将载电路132c所提供的数据元素写入线缓冲器132d。举例来说,假设溢位ovr8~ovr1为“11000000”,跨步地址{Cn,OFFn}的数量N为8,线缓冲器132b(或132d)的字节量M为32,边界缓冲器132e的字节宽度为7字节,且写指针wr_ptr为28。因此,字节写入致能信号byte_we1具有39位,其中32位用于线缓冲器132d以及剩下7位用于边界缓冲器132e。基于控制电路132a的计算,字节写入致能信号byte_we1为“0000011_11110…0”。因此,数据元素“B”与“A”可以被写入线缓冲器132d的高边界附近,而数据元素“C”可以被写入边界缓冲器132e。

在目前叠代完成时,写指标wr_ptr会被更新以指向线缓冲器132d的新位置。举例来说,控制电路132a可以计算wr_ptr2=wr_ptr1+Σovrbn以更新写指标wr_ptr,其中wr_ptr1表示目前写指标wr_ptr,而wr_ptr2表示新写指标wr_ptr。以图6所示情境为例,字节写入致能信号byte_we1的byte_we1[33:32](即“1”与“1”)会被传到下个叠代,以便搬移边界缓冲器132e中的数据元素“C”。根据上个叠代的字节写入致能信号byte_we1的byte_we1[38:32],在下个叠代中,线缓冲器132d的第一个字节与第二个字节会被写入上个叠代剩下的数据元素“C”。写指标wr_ptr会被更新为“2”((28+6)%32=2,亦即指向线缓冲器132d的第三个字节位置),以待下一个叠代使用。待线缓冲器132d被写满后,线缓冲器132d的内容可以被倾倒至矢量寄存器堆150。

图7是依照本发明的又一实施例的一种载存电路132的电路方块示意图。图7所示内存10以及矢量寄存器堆150可以参照图1A所示内存10以及矢量寄存器堆150的相关说明加以类推,图7所示载存电路132可以参照图4所示载存电路132的相关说明加以类推,故不再赘述。图7所示载存电路132可以作为图4所示载存电路132的诸多实施例之一。

在图7所示实施例中,载存电路132包括控制电路132a、线缓冲器132g、存电路132h以及线缓冲器132i。线缓冲器132g可以从矢量寄存器堆150中的目前矢量寄存器读取多个元素,其中这些元素包括所述多个第二数据元素。线缓冲器132g的宽度可以依照实际设计来决定。举例来说,在一些应用情境中,线缓冲器132g的宽度可以是32字节(256位)或是其他宽度。假设在线缓冲器132g的宽度为32字节,则目前基址Ab的最低有效位部LSB1的宽度与(或)步幅ST的最低有效位部LSB2的宽度可以是5位,以适配于线缓冲器132g的宽度。

控制电路132a可以耦接至跨步地址产生器131以接收N个跨步地址(即{Cn,OFFn},其中n为大于0且小于等于N的整数)。控制电路132a可以计算OVRn=Cn|(MSB2≠0),以产生目前叠代的N个溢值(此溢值具有N个位,即OVRn,其中n为大于0且小于等于N的整数)。控制电路132a可以依据数据元素长ELEN选择所述溢值中的至少一个位以产生N个溢位“ovrn”。控制电路132a可以反相这些溢位ovrn以产生N个反相溢位“ovrbn”。控制电路132a计算所述溢值、溢位ovrn以及反相溢位ovrbn的细节可以参照图5所示控制电路132a的相关说明,故不再赘述。控制电路132a可以累加这些反相溢位ovrbn而产生累加值。控制电路132a可以依据所述累加值更新读指标(read pointer)rd_ptr。举例来说,控制电路132a可以计算rd_ptr2=rd_ptr1+Σovrbn以更新读指标rd_ptr,其中rd_ptr1表示目前读指标,而rd_ptr2表示新读指标。

存电路132h耦接至控制电路132a以接收读指标rd_ptr与N个移位值byte_off_n(n为大于0且小于等于N的整数)。存电路132h可以依据读指标rd_ptr从线缓冲器132g的多个元素中读取所述多个第二数据元素。控制电路132a可以组合第n个溢位ovrn与第n个偏移值offn,而产生这些移位值中的第n个移位值byte_off_n(即{ovrn,offn})。举例来说,控制电路132a可以组合第1个溢位ovr1与第1个偏移值off1,使得第1个移位值byte_off_1为{ovr1,off1}。以此类推,控制电路132a可以组合第8个溢位ovr8与第8个偏移值off8,使得第8个移位值byte_off_8为{ovr8,off8}。存电路132h具有M个输出端口,其中每一个输出端口的宽度为1字节。基于这些移位值byte_off_n,存电路132h可以决定将所述多个第二数据元素中的一个对应数据元素排置于哪一个输出端口。

线缓冲器132i耦接至存电路132h,以接收所述多个第二数据元素。依据这些偏移值中的第n个偏移值offn,控制电路132a可以对第n个反相溢位ovrbn进行移位(例如向左移位),而产生字节写入致能信号byte_we2中的一个对应位。举例来说,假设溢位ovrn为“0”(亦即ovrn的反相为“1”)且偏移值offn为28,则字节写入致能信号byte_we2中的第29个位(亦即byte_we2[28])为“1”。线缓冲器132i依据字节写入致能信号byte_we2与目前基址Ab的最高有效位部MSB1,将线缓冲器132i的这些第二数据元素写入内存10。

图8是依照本发明的再一实施例的一种载存电路132的电路方块示意图。在图8所示实施例中,载存电路132包括线缓冲器132g、存电路132h、线缓冲器132i、边界缓冲器132j以及多任务器132k。图8所示内存10可以参照图1A所示内存10的相关说明加以类推,图8所示线缓冲器132g、存电路132h以及线缓冲器132i可以参照图7所示线缓冲器132g、存电路132h以及线缓冲器132i的相关说明加以类推,故不再赘述。图8所示存电路132h可以作为图7所示存电路132h的诸多实施例之一。

边界缓冲器132j耦接至线缓冲器132g。边界缓冲器132j对应于线缓冲器132g的高边界区段,如图8所示。当读指标rd_ptr未指向所述高边界区段时,所述高边界区段的内容载入边界缓冲器132j。在图8所示操作情境中,一个数据元素被假设为2个字节,然而在其他操作情境中一个数据元素可以有其他宽度。在图8中,数据元素被标示为“A”、“B”、“C”与“D”。图8中“x”表示非目标数据。以图8所示操作情境为例,在先前叠代中被存放在线缓冲器132g的所述高边界区段中的数据元素“A”与“B”被复制/备份于边界缓冲器132j中,以待目前叠代使用。多任务器132k的第一输入端耦接至线缓冲器132g的所述高边界区段。多任务器132k的第二输入端耦接至边界缓冲器132j。多任务器132k的输出端耦接至存电路132h。当读指标rd_ptr指向所述高边界区段时(如图8所示),多任务器132k可以选择将边界缓冲器132j的内容提供给存电路132h。

在图8所示实施例中,存电路132h包括多任务器mux81以及配置电路(placementcircuit)PLM。多任务器mux81的控制端耦接至控制电路132a,以接收读指标rd_ptr。多任务器mux81具有M个选择端与一个共同端,其中M为整数且为线缓冲器132g的字节量,这些选择端的数据宽度为一个字节,以及所述共同端的数据宽度为N个字节。多任务器mux81的这些选择端耦接至线缓冲器132g与多任务器132k。举例来说,假设N为8而M为32,则线缓冲器132g的位宽度为32*8=256位而且多任务器mux81的共同端的位宽度为8*8=64位。基于多任务器mux81的共同端的位宽度组为8字节,边界缓冲器132j的字节宽度可以是7字节。因此,多任务器mux81的高位7个选择端耦接至多任务器132k的输出端,而多任务器mux81的其他较低25个选择端耦接至线缓冲器132g的低位部的25个字节。

多任务器mux81可以从读指针rd_ptr所指位置开始,选择线缓冲器132g和/或边界缓冲器132j的连续N个字节作为多任务器mux81的输出。以图8所示操作情境为例,假设N为8、M为32、数据元素长ELEN为2字节而读指针rd_ptr为28,多任务器mux81可以从多任务器mux81的32个选择端中读指标rd_ptr所对应的第29个选择端开始,选择连续8个选择端(即第29、30、31、32、1、2、3、4个选择端)作为多任务器mux81的输出。因此,多任务器mux81可以将图8所示线缓冲器132g与边界缓冲器132j的数据元素“A”、“B”、“C”与“D”输出给配置电路PLM。

配置电路PLM耦接至多任务器mux81,以接收多任务器mux81的输出。配置电路PLM还耦接至控制电路132a,以接收多个移位值,例如图8所示移位值byte_off_1~byte_off_8。依据这些移位值byte_off_1~byte_off_8中的第n个移位值byte_off_n,配置电路PLM可以从线缓冲器132i的多个字节中选择一个目标字节位置。配置电路PLM可以将多任务器mux81的输出中第n个移位值byte_off_n所对应的第n个输出字节传输至线缓冲器132i的所述目标字节位置。

举例来说,假设N为8,M为32,数据元素长ELEN为2字节,读指针rd_ptr为28,步幅ST为“0b0…000100”(二进制),以及目前基址Ab为“0b0…0110100”(二进制)。因此,目前基址Ab的最高有效位部MSB1与最低有效位部LSB1分别为“0b0…01”与“0b10100”,而步幅ST的最高有效位部MSB2与最低有效位部LSB2分别为“0b0”与“0b00100”。基于控制电路132a的计算,8个溢位ovr1~ovr8为“0”、“0”、“0”、“0”、“0”、“0”、“1”与“1”,8个偏移值off1~off8为“0b10100”、“0b10101”、“0b11000”、“0b11001”、“0b11100”、“0b11101”、“0b00000”与“0b00001”(即,十进制“20”、“21”、“24”、“25”、“28”、“29”、“0”与“1”),而移位值byte_off_1~byte_off_8为“0b0_10100”、“0b0_10101”、“0b0_11000”、“0b0_11001”、“0b0_11100”、“0b0_11101”、“0b1_00000”与“0b1_00001”(亦即十进制“20”、“21”、“24”、“25”、“28”、“29”、“32”与“33”)。基于移位值byte_off_1与byte_off_2,配置电路PLM可以将数据元素“A”(多任务器mux81的输出中第1、2个输出字节)传输至线缓冲器132i的第21、22个字节。基于移位值byte_off_3与byte_off_4,配置电路PLM可以将数据元素“B”(多任务器mux81的输出中第3、4个输出字节)传输至线缓冲器132i的第25、26个字节。基于移位值byte_off_5与byte_off_6,配置电路PLM可以将数据元素“C”(多任务器mux81的输出中第5、6个输出字节)传输至线缓冲器132i的第29、30个字节。因为移位值byte_off_7与byte_off_8已超出线缓冲器132i的寻址范围,配置电路PLM可以丢弃数据元素“D”(多任务器mux81的输出中第7、8个输出字节)。

线缓冲器132i可以依据字节写入致能信号byte_we2与目前基址Ab的最高有效位部MSB1,将线缓冲器132i的这些第二数据元素写入内存10。举例来说,假设N为8,M为32,数据元素长ELEN为2字节,读指针rd_ptr为28,步幅ST为“0b0…000100”(二进制),以及目前基址Ab为“0b0…0110100”(二进制)。基于控制电路132a的计算,8个溢位ovr1~ovr8为“0”、“0”、“0”、“0”、“0”、“0”、“1”与“1”,8个偏移值off1~off8为“20”、“21”、“24”、“25”、“28”、“29”、“0”与“1”(十进制),而字节写入致能信号byte_we2为“0b0011 0011 0011 0000 00000000 0000 0000”(二进制,其中位值“1”表示写致能而“0”表示写禁能)。基于目前基址Ab的最高有效位部MSB1与字节写入致能信号byte_we2,线缓冲器132i可以将数据元素“A”、“B”与“C”(第二数据元素)写入内存10的地址{MSB1,20}、{MSB1,21}、{MSB1,24}、{MSB1,25}、{MSB1,28}与{MSB1,29}(十进制)之处。

图9是依照本发明的更一实施例的一种载存电路132的电路方块示意图。图9所示内存10以及矢量寄存器堆150可以参照图1A所示内存10以及矢量寄存器堆150的相关说明加以类推,图9所示载存电路132可以参照图4所示载存电路132的相关说明加以类推,故不再赘述。图9所示载存电路132可以作为图4所示载存电路132的诸多实施例之一。

在图9所示实施例中,载存电路132包括控制电路132a、路由电路132m、线缓冲器132n、数据处理电路132p、线缓冲器132q以及路由电路132r。路由电路132m耦接至线缓冲器132n。第二路由电路132r耦接至线缓冲器132q。当载存装置130读取在内存10内多个不连续地址处的多个第一数据元素时(亦即载存装置130操作在载模式),路由电路132m在载模式中将内存10耦接至线缓冲器132n,以及路由电路132r在载模式中将矢量寄存器堆150耦接至线缓冲器132q。当载存装置130操作在载模式时,图9所示控制电路132a的操作可以参照图5与图6所示控制电路132a的相关说明加以类推,故不再赘述。当载存装置130将多个第二数据元素分别写入在内存10内多个不连续地址处时(亦即载存装置130操作在存模式),路由电路132m在存模式中将矢量寄存器堆150耦接至线缓冲器132n,以及路由电路132r在存模式中将内存10耦接至线缓冲器132q。当载存装置130操作在存模式时,图9所示控制电路132a的操作可以参照图7与图8所示控制电路132a的相关说明加以类推,故不再赘述。

当内存10被耦接至线缓冲器132n时(载模式),线缓冲器132n在目前叠代中可以依据目前基址Ab的最高有效位部MSB1从内存10读取多个连续地址处的多个字节。此时,图9所示线缓冲器132n的操作可以参照图5所示线缓冲器132b的相关说明加以类推,或是参照图6所示线缓冲器132b的相关说明加以类推,故不再赘述。数据处理电路132p耦接至控制电路132a,以接收N个多任务器选择信号mux_sel_n、N个移位值byte_off_n与读指标rd_ptr。在载模式中,数据处理电路132p可以依据这些多任务器选择信号mux_sel_n从线缓冲器132n的多个字节中收集所述多个第一数据元素。此时,图9所示数据处理电路132p的操作可以参照图5或图6所示载电路132c的相关说明加以类推,故不再赘述。

线缓冲器132q耦接至数据处理电路132p,以在载模式中接收所述多个第一数据元素。在载模式中,线缓冲器132q依据字节写入致能信号byte_we1决定将所述多个第一数据元素写入线缓冲器132q的哪些字节位置。此时,图9所示线缓冲器132q的操作可以参照图5所示线缓冲器132d的相关说明加以类推,或参照图6所示线缓冲器132d、边界缓冲器132e以及多任务器132f的相关说明加以类推,故不再赘述。

当矢量寄存器堆120耦接至线缓冲器132n时(存模式),线缓冲器132n从矢量寄存器堆150中的目前矢量寄存器读取多个元素。此时,图9所示线缓冲器132n的操作可以参照图7所示线缓冲器132g的相关说明加以类推,或是参照图8所示线缓冲器132g、边界缓冲器132j以及多任务器132k的相关说明加以类推,故不再赘述。在存模式中,数据处理电路132p可以依据读指标rd_ptr从线缓冲器132n中读取所述多个第二数据元素。此时,图9所示数据处理电路132p的操作可以参照图7或图8所示存电路132h的相关说明加以类推,故不再赘述。

线缓冲器132q耦接至数据处理电路132p,以在存模式中接收所述多个第二数据元素。在存模式中,线缓冲器132q依据字节写入致能信号byte_we2决定将所述多个第二数据元素写入线缓冲器132q的哪些字节位置。此时,图9所示线缓冲器132q的操作可以参照图7或图8所示线缓冲器132i的相关说明加以类推,故不再赘述。

依照不同的设计需求,上述载存装置130、跨步地址产生器131、载存电路132、控制电路132a、载电路132c、存电路132h以及(或是)数据处理电路132p的实现方式可以是硬件(hardware)、固件(firmware)或是前述多者的组合形式。以硬件形式而言,上述载存装置130、跨步地址产生器131、载存电路132、控制电路132a、载电路132c、存电路132h以及(或是)数据处理电路132p可以实现于集成电路(integrated circuit)上的逻辑电路。上述载存装置130、跨步地址产生器131、载存电路132、控制电路132a、载电路132c、存电路132h以及(或是)数据处理电路132p的相关功能可以利用硬件描述语言(hardware descriptionlanguages,例如Verilog HDL或VHDL)或其他合适的编程语言来实现为硬件。举例来说,上述载存装置130、跨步地址产生器131、载存电路132、控制电路132a、载电路132c、存电路132h以及(或是)数据处理电路132p的相关功能可以被实现于一或多个控制器、微控制器、微处理器、特殊应用集成电路(Application-specific integrated circuit,ASIC)、数字信号处理器(DSP)、场可程序逻辑门阵列(Field Programmable Gate Array,FPGA)和/或其他处理单元中的各种逻辑区块、模块和电路。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

技术分类

06120116335182