CN118034638A - 重排序缓冲器、***、组件、设备及传输方法 - Google Patents
重排序缓冲器、***、组件、设备及传输方法 Download PDFInfo
- Publication number
- CN118034638A CN118034638A CN202410446029.6A CN202410446029A CN118034638A CN 118034638 A CN118034638 A CN 118034638A CN 202410446029 A CN202410446029 A CN 202410446029A CN 118034638 A CN118034638 A CN 118034638A
- Authority
- CN
- China
- Prior art keywords
- module
- request
- response data
- pointer
- transaction request
- 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
- 239000000872 buffer Substances 0.000 title claims abstract description 215
- 238000000034 method Methods 0.000 title claims abstract description 41
- 230000005540 biological transmission Effects 0.000 title claims abstract description 24
- -1 system Substances 0.000 title abstract description 4
- 230000004044 response Effects 0.000 claims abstract description 314
- 238000011144 upstream manufacturing Methods 0.000 claims description 125
- 230000003068 static effect Effects 0.000 description 13
- 239000010410 layer Substances 0.000 description 12
- 238000012545 processing Methods 0.000 description 10
- 230000006837 decompression Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本公开提供一种重排序缓冲器、***、组件、设备及传输方法。该重排序缓冲器包括FIFO、控制模块和缓存模块;所述缓存模块包括分别对应不同请求标识的多个缓存区;所述控制模块,被配置为将事务请求的请求标识写入所述FIFO中;还被配置为将响应数据顺序写入其对应的请求标识对应的缓存区内;或,所述控制模块,被配置为将事务请求的请求标识和分配到的缓存地址写入所述FIFO中;还被配置为将响应数据写入所述FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上。既满足了下游模块(IP)的保序要求,又减小了延迟,充分利用了互连网络带宽,提高了性能。
Description
技术领域
本公开涉及重排序缓冲器领域,尤其涉及一种重排序缓冲器、***、组件、设备及传输方法。
背景技术
片上***(System on chip,SOC)通常包含多个知识产权核(IntellectualProperty,IP),包括但不限于中央处理器(Central Processing Unit,CPU)、直接内存访问单元(Direct Memory Access ,DMA)、双倍速率同步动态随机存储器(Double Data Rate,DDR)以及一些专用的数据处理模块。各个IP通过互连网络连接,往往支持类似的协议,如互联协议有高级可扩展接口(Advanced eXtensible Interface,AXI)协议等。但协议也定义了不同的规格,有的IP可以支持超前传输(outstanding)传输以及乱序传输(out oforder),有的IP支持超前传输(outstanding)传输但不支持乱序传输(out of order),也有的IP均不支持。这几种情况是SoC芯片设计常常面临的问题。
芯片设计者需要解决互联带来的性能问题,以及平衡性能与面积、功耗的关系。如果简单相连,由于下游IP不支持乱序,就不能实现超前传输(outstanding)传输,只能每发出一个请求都等待该请求对应的数据返回了再发送下一个请求,才能保证数据与请求不错位。如图1所示,上游模块在事务请求0的响应数据0返回后,才可以发事务请求1,在事务请求1的响应数据1返回后,才可以发事务请求2,使得互连网络带宽不能被充分利用。
发明内容
本公开的目的是提供一种重排序缓冲器、***、组件、设备及传输方法,解决了现有技术中片上***中为了实现下游IP保序,不能实现超前传输(outstanding)传输,导致互连网络带宽不能被充分利用的技术问题。
根据本公开的一个方面,提供一种重排序缓冲器,解析模块、FIFO、控制模块和缓存模块;
缓存模块包括分别对应不同请求标识的多个缓存区;控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;还被配置为从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;或,
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;还被配置为从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
在一些实施例中,上述重排序缓冲器中,FIFO的指针包括第一写指针、第一读指针、多个第二写指针和多个第二读指针,多个第二写指针分别对应不同请求标识,多个第二读指针分别对应不同请求标识;
控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;还被配置为从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,包括:
控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内,以及将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;还被配置为从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,并在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项;或,
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;还被配置为从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入其对应的请求标识对应的第二读指针当前指向的表项中的缓存地址上,以及将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;还被配置为从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,并在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项。
在一些实施例中,上述重排序缓冲器中,控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中;还被配置为将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项,包括:
控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,第一写指针当前指向的表项中的第二标志位为无效,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将该第二写指针当前指向的表项中的第二标志位切换为有效;还被配置为将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,在该第二读指针当前指向的表项中的第二标志位为有效时,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;或,
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中;还被配置为将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项,包括:
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,第一写指针当前指向的表项中的第二标志位为无效,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将该第二写指针当前指向的表项中的第二标志位切换为有效;还被配置为将该第二读指针当前指向的表项中的第一标志位切换为有效,在该第二读指针当前指向的表项中的第二标志位为有效时,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项。
在一些实施例中,上述重排序缓冲器中,FIFO的指针还包括一第三读指针;
FIFO,被配置为将第三读指针当前指向的表项中的请求标识发送给下游模块,以使得下游模块通过请求标识向控制模块请求对应的响应数据,第三读指针更新为指向其当前指向的表项的下一表项;
控制模块,被配置为从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,包括:
控制模块,被配置为在接收到下游模块发送的一请求标识且该请求标识与第一读指针当前指向的表项中的请求标识相同时,从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;或,
控制模块,被配置为从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
控制模块,被配置为在接收到下游模块发送的一请求标识且该请求标识与第一读指针当前指向的表项中的请求标识相同时,从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块。
在一些实施例中,上述重排序缓冲器中,FIFO的指针还包括一第三读指针;
FIFO,被配置为将第三读指针当前指向的表项中的请求标识和缓存地址发送给下游模块,以使得下游模块通过请求标识及其对应的缓存地址向控制模块请求对应的响应数据,第三读指针更新为指向其当前指向的表项的下一表项;
控制模块,被配置为从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
控制模块,被配置为在接收到下游模块发送的一请求标识及其对应的缓存地址且接收到的该请求标识和该缓存地址分别与第一读指针当前指向的表项中的请求标识和缓存地址相同时,根据接收到的该缓存地址,从缓存模块中读取该缓存地址上缓存的响应数据返回至下游模块。
在一些实施例中,上述重排序缓冲器中,在第一读指针更新时,第一读指针更新前指向的表项被释放。
在一些实施例中,上述重排序缓冲器中,控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,包括:
控制模块,被配置为在接收上游模块的事务请求且FIFO为非满状态时,将该事务请求的请求标识写入FIFO中;或,
控制模块,被配置为将该事务请求的请求标识和分配到的缓存地址写入FIFO中,包括:
控制模块,被配置为在FIFO为非满状态时,将该事务请求的请求标识和分配到的缓存地址写入FIFO中。
在一些实施例中,上述重排序缓冲器中,控制模块包括解析模块、写控制模块和读控制模块;
解析模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;写控制模块,被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;读控制模块,被配置为从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;或,
解析模块,被配置为接收上游模块的事务请求,向读控制模块申请该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;写控制模块,被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;读控制模块,被配置为从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
在一些实施例中,上述重排序缓冲器中,还包括第一仲裁模块,被配置为:
在接收到上游模块的事务请求时,向解析模块发出一个握手请求,并在接收到解析模块针对握手请求返回的响应信息时,从接收到的事务请求中选择其一发送至解析模块。
在一些实施例中,上述重排序缓冲器中,解析模块,还被配置为:
在接收到第一仲裁模块的一个握手请求时,向读控制模块申请该握手请求对应的事务请求在缓存模块中对应的缓存地址,申请到缓存地址后,向第一仲裁模块返回针对握手请求的响应信息。
在一些实施例中,上述重排序缓冲器中,还包括第一仲裁模块,被配置为:
接收上游模块的事务请求;
将接收到的事务请求逐个发送至控制模块。
在一些实施例中,上述重排序缓冲器中,还包括第二仲裁模块,被配置为:
接收下游模块返回的响应数据,并将其返回至对应的上游模块。
根据本公开的另一方面,提供一种片上***,包括上游模块、下游模块和上述任一实施例的重排序缓冲器。
根据本公开的另一方面,提供一种电子组件,包括上述任一实施例的片上***。
根据本公开的另一方面,提供一种电子设备,包括上述任一实施例的电子组件。
根据本公开的另一个方面,提供一种片上***的数据传输方法,包括:
在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入缓存模块中其对应的请求标识对应的缓存区内;从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;缓存模块包括分别对应不同请求标识的多个缓存区;或,
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
在一些实施例中,上述数据传输方法中,FIFO的指针包括第一写指针、第一读指针、多个第二写指针和多个第二读指针,多个第二写指针分别对应不同请求标识,多个第二读指针分别对应不同请求标识;
在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入缓存模块中其对应的请求标识对应的缓存区内;从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;缓存模块包括分别对应不同请求标识的多个缓存区,包括:
在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内,以及将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项;或,
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入其对应的请求标识对应的第二读指针当前指向的表项中的缓存地址上,以及将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,并在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项。
附图说明
图1为下游模块不支持乱序且不进行预取的场景下的事务请求和响应数据的时序图;
图2为本公开一个实施例提供的重排序缓冲器对应的事务请求和响应数据的时序图;
图3为本公开一个实施例提供的包括重排序缓冲器的片上***的连接结构示意图;
图4为本公开一个实施例提供的FIFO的表项的信息域的排布示意图;
图5为本公开一个实施例提供的解析模块与第一仲裁器的交互流程示意图。
具体实施方式
在介绍本公开实施例之前,应当说明的是:
本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
本公开的目的是提供一种重排序缓冲器、***、组件、设备及传输方法,该重排序缓冲器包括FIFO、控制模块和缓存模块;缓存模块包括分别对应不同请求标识的多个缓存区;控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;还被配置为从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;或,控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;还被配置为从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
这种重排序方案中,通过FIFO和缓存模块,实现了响应数据的预取机制,实现了上游模块的outstanding传输,且缓存模块中的响应数据在一定程度上可以按顺序(控制模块接收到事务请求的顺序)返回下游模块。这样在一定程度上既满足了下游模块(IP)的保序要求,又充分利用了互连网络带宽,提高了性能。如图2所示,上游模块可以连续且顺序发出事务请求0、事务请求1、事务请求2、事务请求3和事务请求4,相邻请求不需要间隔一定延迟发出,事务请求0、事务请求1、事务请求2、事务请求3和事务请求4分别对应的响应数据0、响应数据1、响应数据2、响应数据3和响应数据4可以连续且顺序返回下游模块。
本公开的一个实施例提供一种重排序缓冲器,如图3所示,包括: FIFO、控制模块和缓存模块;
a)缓存模块包括分别对应不同请求标识的多个缓存区;控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;还被配置为从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;或,
b)控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;还被配置为从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
其中,上述重排序缓冲器通过互连网络与上游模块和下游模块互联。在一些实施例中,上述互连网络可以为AXI总线、BUS总线或片上网络(Network on Chip,NoC)等。
其中,事务请求包括写事务请求或读事务请求,当事务请求为写事务请求时,响应数据为写应答;当事务请求为读事务请求时,响应数据包括读应答和/或读数据(读事务请求从存储器中请求到的数据),则上游模块通过读地址通道(axi ar)将事务请求发给控制模块,控制模块通过读地址通道(axi ar)将事务请求发给存储器,存储器返回的响应数据(读应答和/或读数据)通过读数据通道(axi r)返回至控制模块。
写入FIFO的表项中的事务请求的请求标识是指事务请求的原始标识,可以为发起该事务请求的上游模块的标识(Master ID),也可以是事务标识和上游模块的标识的组合,例如写事务请求对应的请求标识可以为AWID或WID,读事务请求对应的请求标识可以为ARID(ID为上游模块的标识)。
存储器针对事务请求返回的响应数据具有对应的标识,该标识与请求标识是有对应关系的,例如,读事务请求的响应数据(读应答和/或读数据)对应的标识可以为RID(ID为上游模块的标识),所以控制模块可以从缓存模块中找到FIFO中排在最前面的请求标识对应的响应数据,进行读取并返回至下游模块。
在一些实施例中,缓存模块可以为静态随机存取存储器(Static Random-AccessMemory,SRAM)。
在一些实施例中,上述重排序缓冲器还包括第一仲裁模块,被配置为:
接收上游模块的事务请求;
将接收到的事务请求逐个发送至控制模块。
多个上游模块可能会同时发出事务请求,在每一拍,第一仲裁模块最多只能选择一个事务请求发送至控制模块。在一些实施例中,可以采用一级的Round-Robin轮询仲裁,也可以根据使用需求按照一定的优先级顺序进行仲裁,或根据需求采用多级仲裁方案。
在一些实施例中,上述重排序缓冲器还包括第二仲裁模块,被配置为:
接收下游模块返回的响应数据,并将其返回至对应的上游模块。
在一些实施例中,下游模块会对从缓存模块中读取的响应数据进行处理,处理之后再通过第二仲裁模块返回(rtn)至对应的上游模块。第二仲裁模块根据接收到的响应数据对应的请求标识(如Master ID),将响应数据返回给对应的上游模块(master)。
在一些实施例中,第二仲裁模块为多路分配器(demux)。
上述方式a)中,在多个上游模块(具体不同的请求标识)对应同一下游模块的场景下,通过固定为每个上游模块(master)分配共享缓存的区域的方式,在一个FIFO和一个缓存模块中就可以实现具有相同请求标识(对应同一上游模块)的事务请求和响应数据的保序,节省了硬件资源。其中,虽然不同的请求标识(Master ID)对应的响应数据共享缓存模块,但是为静态共享的方式,即固定为每个上游模块(master)分配共享缓存的区域。
可以理解的是,上述方式a)中,缓存模块的各个缓存区与控制模块相互配合,一起实现了先进先出的功能,也即,一请求标识对应的缓存区中,响应数据按照写入缓存区的顺序,被顺序读出并返回至下游模块。其中,缓存区中的响应数据与FIFO中的请求标识是一对一的关系(即缓存区中一个事务请求的响应数据对应FIFO中的一个请求标识),即,控制模块被配置为每次从所述缓存模块中读取所述FIFO中排在最前面的一个请求标识对应的缓存区中顺序读出一个事务请求的响应数据返回至下游模块。
在一些实施例中,在静态共享缓存模块(上述方式a)的场景下,FIFO的指针包括第一写指针、第一读指针、多个第二写指针和多个第二读指针,多个第二写指针分别对应不同请求标识,多个第二读指针分别对应不同请求标识;
控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;还被配置为从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,包括:
控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内,以及将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;还被配置为从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,并在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项。
其中, 在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项,保证了在第一读指针当前指向的表项对应的事务请求对应的响应数据写入对应的缓存区后,也即,对应的缓存区中有响应数据可以返回至下游模块后,第一读指针才会更新。保证了不会返回空数据给下游模块,满足了下游模块(IP)的保序要求。
这种方式中,通过将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将第一写指针当前指向的表项作为该请求标识对应的新的第二写指针当前指向的表项的方式,将FIFO中缓存的具有相同请求标识的事务请求所在的表项链接起来,形成链表,在多个上游模块对应同一下游模块的场景下,在一个FIFO中就可以实现具有相同请求标识(对应同一上游模块)的事务请求和响应数据的保序,节省了硬件资源。
分别对应不同请求标识的多个第二写指针,是指每个请求标识对应一个第二写指针。FIFO中,一请求标识对应的第二写指针,是FIFO中存在该请求标识才会有效的,也即,如果控制模块在接收到上游模块的具有一请求标识的事务请求时,FIFO当前不存在该请求标识,即该请求标识对应的第二写指针为无效,那么该事务请求的请求标识写入第一写指针当前指向的表项时,该请求标识对应的第二写指针会自动切换为有效且指向该事务请求的请求标识写入的表项(即第一写指针当前指向的表项)。
所以,无论控制模块接收到一事务请求时,该事务请求的请求标识对应的第二写指针是否为有效,该请求标识写入FIFO的操作都会触发该请求标识对应的第二写指针更新为指向第一写指针当前指向的表项(该请求标识写入的表项)。可以理解为,控制模块可以根据该事务请求对应的第二写指针是否指向该请求标识写入的表项来判断将该请求标识写入FIFO触发的第二写指针的更新操作是否结束。
如果控制模块接收到一事务请求时,该事务请求的请求标识对应的第二写指针有效,那么说明控制模块接收到的具体相同请求标识的上一事务请求存储于第二写指针当前指向的表项中,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,就可以将第二写指针当前指向的表项和第一写指针当前指向的表项链接起来,形成了链表。
按照控制模块接收到一事务请求时,该事务请求的请求标识对应的第二写指针是否为有效,该请求标识写入FIFO触发的第二写指针的更新操作可以分为无效的第二写指针的更新操作(包括将该第二写指针从无效切换为有效且指向第一写指针当前指向的表项)和有效的第二写指针的更新操作(将该请求标识写入的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为第一写指针当前指向的表项)。一请求标识写入FIFO的操作会触发无效的第二写指针的更新操作,或者,有效的第二写指针的更新操作。
需要说明的是,一请求标识写入FIFO触发的第一写指针的更新操作和第二写指针的更新操作(无效的第二写指针的更新操作或有效的第二写指针的更新操作)没有严格的先后顺序,而前述的“第一写指针当前指向的表项”是指控制模块执行该请求标识写入FIFO的操作时第一写指针指向的表项,也即该请求标识写入的表项。
在一些实施例中,为了避免一请求标识写入FIFO触发的无效的第二写指针的更新操作后,控制模块又立即执行同一请求标识对应的有效的第二写指针的更新操作,可以在控制模块中增加一个判据,即,控制模块在执行有效的第二写指针的更新操作之前判断该请求标识对应的第二写指针当前是否指向该请求标识写入的表项,若是,则不进行有效的第二写指针的更新操作,否则,才进行有效的第二写指针的更新操作。
分别对应不同请求标识的多个第二读指针,是指每个请求标识对应一个第二读指针。FIFO中,一请求标识对应的第二读指针,是FIFO中存在该请求标识才会存在的,也即,如果在接收到上游模块的事务请求时,FIFO当前不存在该请求标识对应的第二读指针(即对应的第二读指针为无效),那么该事务请求的请求标识写入第一写指针当前指向的表项时,该请求标识对应的第二读指针会自动切换为有效且指向该事务请求的请求标识写入的表项(即第一写指针当前指向的表项)。第二读指针有效之后,第二读指针的更新方式都是在对应的第二读指针当前指向的表项中的第一标志位置为有效后,将该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项。需要说明的是,如果此时该第二读指针当前指向的表项中没有缓存表项标识,即没有链接的下一表项,也即该第二读指针当前指向的表项对应的事务请求是FIFO当前缓存的具有相同请求标识的最后一个事务请求,此时,对应的第二读指针将不更新,如果直至该表项被释放,对应的第二读指针都没有更新,那么第二读指针将会置为无效。
可以理解为,第一写指针、第一读指针的更新方式与常规的FIFO的读写指针更新方式相同,例如:每次将一事务请求的请求标识写入第一写指针当前指向的表项(第一写指针当前指向的表项)后,第一写指针加 1(当第一写指针当前为最大值时,本次写入后第一写指针重置为最小值)。在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针加 1(当第一读指针当前为最大值时,本次更新时,第一读指针重置为最小值)。
在一些实施例中,在第一读指针更新时,第一读指针更新前指向的表项被释放。第一读指针可以理解为是表项释放指针。
在一些实施例中,一表项的表项标识(Entry ID)可以为该表项的序号。
在一些实施例中,写入表项中的请求标识、表项标识和第一标志位位于表项的信息域的对应位置上,如图4所示。
在一些实施例中,控制模块在更新第二读指针的过程中,可以通过判断该第二读指针当前指向的表项中是否缓存了表项标识,来确定该表项是否链接了其它表项,如果该第二读指针当前指向的表项中未缓存表项标识(即该表项没有链接其它表项),那么该第二读指针当前指向的表项将不更新,即对应的第二读指针将不更新。
在一些实施例中,为了便于判断第二读指针是否可以更新,可以在FIFO的表项的信息域中增加第二标志位,来指示表项是否链接了其它表项,没有链接时,第二标志位为无效,有链接其它表项时,第二标志位为有效。在一第二读指针需要更新时,会首先判断该第二读指针当前指向的表项中的第二标志位是否为有效,来确定该第二读指针是否可以更新,该第二读指针当前指向的表项中的第二标志位为有效时,才可以进行第二读指针的更新。如果直至该第二读指针当前指向的表项被释放,该表项中的第二标志位都没有切换为有效(即一直为无效),那么该第二读指针将会置为无效。
对应的,在静态共享缓存模块(上述方式a)的场景下,控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中;还被配置为将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项,包括:
控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,第一写指针当前指向的表项中的第二标志位为无效,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将该第二写指针当前指向的表项中的第二标志位切换为有效;还被配置为将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,在该第二读指针当前指向的表项中的第二标志位为有效时,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项。
在一些实施例中,在静态共享缓存模块(上述方式a)的场景下,FIFO的指针还包括一第三读指针;
FIFO,被配置为将第三读指针当前指向的表项中的请求标识发送给下游模块,以使得下游模块通过请求标识向控制模块请求对应的响应数据,第三读指针更新为指向其当前指向的表项的下一表项;
控制模块,被配置为从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,包括:
控制模块,被配置为在接收到下游模块发送的一请求标识且该请求标识与第一读指针当前指向的表项中的请求标识相同时,从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块。
其中,下游模块可以在需要一事务请求对应的响应数据时,再将接收到的请求标识发送至控制模块,以满足下游模块不支持outstanding传输的需求。具体的,FIFO和下游模块之间可以采用握手机制,在下游模块ready时,FIFO再将第三读指针当前指向的表项中的请求标识发送给下游模块,从而实现了下游模块从FIFO中获得请求标识,以满足下游模块不支持outstanding传输的需求。
可以理解为,第三读指针也是在对应的模块对其指向的表项执行完对应的操作后,将其更新为指向下一表项的。具体的,FIFO在将第三读指针当前指向的表项中的请求标识发给下游模块后,第三读指针加1(当第三读指针当前为最大值时,本次读取后第三读指针重置为最小值)。
在一些实施例中,在静态共享缓存模块(上述方式a)的场景下,控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中时,会同时将该事务请求user域中携带的信息(用于指示下游模块对对应的响应数据进行对应处理的指示信息,如操作类型(包括解压缩、解密等))一起写入对应的表项内,这样FIFO将第三读指针当前指向的表项中的请求标识发送给下游模块时,会一起将该表项内的其它信息(用于指示下游模块对对应的响应数据进行对应处理的指示信息)一起发送给下游模块,以使得下游模块通过请求标识向控制模块请求对应的响应数据后,并根据对应的指示信息,对请求到的响应数据进行对应处理。
在一些实施例中,在静态共享缓存模块(上述方式a)的场景下,控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,包括:
控制模块,被配置为在接收上游模块的事务请求且FIFO为非满状态时,将该事务请求的请求标识写入FIFO中。
当FIFO为满状态,说明FIFO中没有空闲的表项来存储该事务请求的信息。
而FIFO的满状态信号可以由第一读指针和第一写指针经过一定的组合逻辑后写入对应的寄存器中,该组合逻辑可以为:
响应于写指针的更新,判断第一写指针的当前值是否等于第一读指针的当前值;
响应于第一写指针的当前值等于第一读指针的当前值,说明FIFO当前为满状态。
在一些实施例中,在静态共享缓存模块(上述方式a)的场景下,控制模块包括解析模块、写控制模块和读控制模块;
解析模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;写控制模块,被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;读控制模块,被配置为从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块。
上述方式b)中,通过将该事务请求的请求标识和分配到的缓存地址写入FIFO中的方式,在需要将响应数据写入缓存模块中时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上,在需要从缓存模块中读取一请求标识对应的响应数据返回下游模块时,从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块,在一个FIFO和一个缓存模块中就可以实现具有相同请求标识(对应同一上游模块)的事务请求和响应数据的保序,节省了硬件资源。且多个上游模块(master)动态共享缓存模块,即每个事务请求在缓存模块中的缓存地址是不固定的。
相对于上述固定为每个上游模块(master)分配共享缓存的区域的方式,动态共享缓存的方式节省了N(N为连接同一下游模块的上游模块的总数量)分之一的带宽,无论是单个上游模块(master)独立工作,还是其中几个或全部上游模块(master)共同工作,都能使得缓存充分利用,接口和互连网络达到满带宽。
需要说明的是,在动态共享缓存模块(上述方式b)的场景下,在需要将响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上时,若FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上已经有数据了,可以等该表项释放之后,再将该响应数据写入更新后的FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上。
在一些实施例中,在动态共享缓存模块(上述方式b)的场景下,FIFO的指针包括第一写指针、第一读指针、多个第二写指针和多个第二读指针,多个第二写指针分别对应不同请求标识,多个第二读指针分别对应不同请求标识;
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;还被配置为从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;还被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入其对应的请求标识对应的第二读指针当前指向的表项中的缓存地址上,以及将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;还被配置为从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,并在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项。
可以理解为,通过将该事务请求的请求标识和分配到的缓存地址一起写入第一写指针当前指向的表项中,以及将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将第一写指针当前指向的表项作为该请求标识对应的新的第二写指针当前指向的表项的方式,在需要将响应数据写入缓存模块中时,通过对应的第二读指针找到对应的表项(第二读指针当前指向的表项),然后将该响应数据写入该表项中的缓存地址上,当需要从缓存模块中读取一请求标识对应的响应数据返回下游模块时,则根据第一读指针找到对应的表项(第一读指针当前指向的表项),然后从该表项中的缓存地址上读取响应数据返回下游模块。实现了多个上游模块(master)动态共享缓存模块。
其中,第一写指针、第一读指针、第二写指针的作用和更新方式,与前述静态共享缓存模块(上述方式a)的场景下类似,此处不再赘述。而动态共享缓存模块(上述方式b)的场景下,第二读指针除了用于切换第一标志位,还用于在控制模块接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入其对应的请求标识对应的第二读指针当前指向的表项中的缓存地址上,便于实现将响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上的步骤,以满足下游模块(IP)的保序要求。
在一些实施例中,控制模块在接收到事务请求时,根据该事务请求中携带的信息(如读事务请求对应的突发大小),是可以确定该事务请求的响应数据所需的缓存大小的,因此可以根据该事务请求的响应数据所需的缓存大小判断缓存模块中是否有足够的空闲缓存空间(即是否有大于等于所需的缓存大小的空闲缓存空间),若是,则将对应的空闲缓存空间(其大小与所需的缓存大小相等)的地址信息(即申请到的缓存地址)分配给该事务请求。
其中,由于控制模块对缓存模块的写入和读出进行控制,所以同时也对缓存模块中已用缓存空间和空闲缓存空间了监控,从而可以判断缓存模块中是否有足够的空闲缓存空间。
在一些实施例中,上述缓存地址包括缓存起始地址和所需缓存大小(即该读事务请求对应的响应数据的大小)。
在一些实施例中,当事务请求为读事务请求时,上述缓存地址包括缓存起始地址和突发大小(相当于该读事务请求即将从存储器中读回的数据的大小)。
在一些实施例中,缓存地址在写入一表项中时,写入该表项的信息域中,如图4所示。
在一些实施例中,控制模块在更新第二读指针当前指向的表项的过程中(即更新第二读指针的过程中),可以通过判断该第二读指针当前指向的表项中是否缓存了表项标识,来确定该表项是否链接了其它表项,如果该第二读指针当前指向的表项中未缓存表项标识(即该表项没有链接其它表项),那么该第二读指针将不更新。
在一些实施例中,为了便于判断第二读指针是否可以更新,可以在FIFO的表项的信息域中增加第二标志位,来指示表项是否链接了其它表项,没有链接时,第二标志位为无效,有链接其它表项时,第二标志位为有效。在一第二读指针需要更新时,会首先判断该第二读指针当前指向的表项中的第二标志位是否为有效,来确定该第二读指针是否可以更新,该第二读指针当前指向的表项中的第二标志位为有效时,才可以第二读指针的更新。如果直至该第二读指针当前指向的表项被释放,该表项中的第二标志位都没有切换为有效(即一直为无效),那么该第二读指针将会置为空。
对应的,在动态共享缓存模块(上述方式b)的场景下,控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中;还被配置为将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项,包括:
控制模块,被配置为接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,第一写指针当前指向的表项中的第二标志位为无效,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将该第二写指针当前指向的表项中的第二标志位切换为有效;还被配置为将该第二读指针当前指向的表项中的第一标志位切换为有效,在该第二读指针当前指向的表项中的第二标志位为有效时,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项。
在一些实施例中,在动态共享缓存模块(上述方式b)的场景下,FIFO的指针还包括一第三读指针;
FIFO,被配置为将第三读指针当前指向的表项中的请求标识发送给下游模块,以使得下游模块通过请求标识向控制模块请求对应的响应数据,第三读指针更新为指向其当前指向的表项的下一表项;
控制模块,被配置为从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
控制模块,被配置为在接收到下游模块发送的一请求标识且该请求标识与第一读指针当前指向的表项中的请求标识相同时,从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块。
第三读指针的作用和更新方式与前述静态共享缓存模块(上述方式a)的场景下类似,此处不再赘述。
在另一些实施例中,在动态共享缓存模块(上述方式b)的场景下,FIFO的指针还包括一第三读指针;
FIFO,被配置为将第三读指针当前指向的表项中的请求标识和缓存地址发送给下游模块,以使得下游模块通过请求标识及其对应的缓存地址向控制模块请求对应的响应数据,第三读指针更新为指向其当前指向的表项的下一表项;
控制模块,被配置为从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
控制模块,被配置为在接收到下游模块发送的一请求标识及其对应的缓存地址且接收到的该请求标识和该缓存地址分别与第一读指针当前指向的表项中的请求标识和缓存地址相同时,根据接收到的该缓存地址,从缓存模块中读取该缓存地址上缓存的响应数据返回至下游模块。
可以理解为,由于第一读指针和第三读指针的更新方式是相同的,控制模块接收到的下游模块发送的一请求标识以及第一读指针当前指向的表项中的请求标识是能够一一对应上的,所以控制模块在接收到下游模块发送的一请求标识且该请求标识与第一读指针当前指向的表项中的请求标识相同时,可以直接根据从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,也可以根据在接收下游模块发送的请求标识时,一起接收到的对应的缓存地址,从缓存模块中读取该缓存地址上缓存的响应数据返回至下游模块。
在一些实施例中,在动态共享缓存模块(上述方式b)的场景下,控制模块,在将事务请求的请求标识写入FIFO中时,会同时将该事务请求user域中携带的信息(用于指示下游模块对对应的响应数据进行对应处理的指示信息,如操作类型(包括解压缩、解密等))一起写入对应的表项内,这样FIFO将第三读指针当前指向的表项中的请求标识发送给下游模块时,会一起将该表项内的其它信息(用于指示下游模块对对应的响应数据进行对应处理的指示信息)一起发送给下游模块,以使得下游模块通过请求标识向控制模块请求对应的响应数据,并根据对应的指示信息,对请求到的响应数据进行对应处理。
在一些实施例中,在动态共享缓存模块(上述方式b)的场景下,控制模块,被配置为将该事务请求的请求标识和分配到的缓存地址写入FIFO中,包括:
控制模块,被配置为在FIFO为非满状态时,将该事务请求的请求标识和分配到的缓存地址写入FIFO中。
FIFO的满状态的判断方式与前述静态共享缓存模块(上述方式a)的场景下类似,此处不再赘述。
在一些实施例中,在动态共享缓存模块(上述方式b)的场景下,控制模块包括解析模块、写控制模块和读控制模块;解析模块,被配置为接收上游模块的事务请求,向读控制模块申请该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;写控制模块,被配置为在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;读控制模块,被配置为从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
对应的,在上述重排序缓冲器还包括第一仲裁模块的场景下,第一仲裁模块被配置为:
在接收到上游模块的事务请求时,向解析模块发出一个握手请求,并在接收到解析模块针对握手请求返回的响应信息时,从接收到的事务请求中选择其一发送至解析模块。
也就是说,第一仲裁模块发送一握手请求给解析模块,在接收到解析模块针对握手请求返回的响应信息时,从接收到的事务请求中选择其一发送至解析模块,如果没有接收到解析模块针对握手请求返回的响应信息,第一仲裁模块就不会发事务请求给解析模块。相当于,解压模块会反压第一仲裁模块,不进行握手,第一仲裁模块就会保持(hold)住接收到的事务请求,各个上游模块(master)也不能继续向第一仲裁模块发出事务请求,相当于第一仲裁模块反压了各个上游模块(master),从而实现了数据流控。
进一步的,如图5所示,解析模块,还被配置为:在接收到第一仲裁模块的一个握手请求时,向读控制模块申请该握手请求对应的事务请求在缓存模块中对应的缓存地址,申请到缓存地址后,向第一仲裁模块返回针对握手请求的响应信息。
也就是说,第一仲裁模块会通过一握手请求触发解析模块先向读控制模块申请缓存地址,如果申请到,第一仲裁模块才会从接收到的事务请求中选择其一发送至解析模块,完成握手。如果没有申请到(缓存模块没有足够的空闲缓存空间),第一仲裁模块就不会发事务请求给解析模块。
在一些实施例中,多个相互独立但不支持乱序的上游模块(上游IP)与一个不支持乱序的下游模块(下游IP)互联。例如,上游模块(上游IP)为显示控制器,下游模块(下游IP)为显示解压缩模块。显示控制器通常包含多个层(layer),各个layer之间支持数据乱序返回,同一个layer内需要保证数据顺序返回。每个layer开放一个API接口给应用程序,这些layer可以某个layer单独工作,如全屏播放视频;也可以是多个layer同时工作,如叠加显示,浏览网页的同时小窗播放视频。该场景下,将每个layer作为一个上游模块,连接到同一个下游的解压缩模块,采用上述重排序缓存器的动态共享缓存模块的方案(上述方式b),既可以实现该场景下的保序要求,又可以保证单个layer工作和多个layer工作时都能充分利用带宽,达到最高性能(某个layer单独工作时,静态共享缓存模块的方案下,缓存模块达不到充分利用)。具体的,控制模块接收任一layer的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;控制模块在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;控制模块从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至解压缩模块。
在一些实施例中,多个相互独立的上游模块(上游IP)与一个不支持outstanding传输的下游模块(下游IP)互联。例如,上游模块(上游IP)从存储器读取的数据需要进行解密后才能使用,下游模块(下游IP)为解密引擎,只能串行执行命令(既不支持乱序,也不支持多个outstanding传输)。多个上游模块(上游IP)有可能同时工作,也有可能其中几个共同工作或某一个单独工作,采用上述重排序缓存器的动态共享缓存模块(上述方式b)结合第三读指针的方案,既满足了解密引擎不支持outstanding传输的需求,又可以保证以上各种工作场景下解密引擎都能达到最大性能(某个上游IP单独工作时,静态共享缓存模块的方案下,缓存模块达不到充分利用)。具体的,控制模块接收任一上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;控制模块在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;FIFO将第三读指针当前指向的表项中的请求标识发送给下游模块(解密引擎),以使得下游模块(解密引擎)通过请求标识向控制模块请求对应的响应数据;控制模块在接收到下游模块(解密引擎)发送的一请求标识且该请求标识与第一读指针当前指向的表项中的请求标识相同时,从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块(解密引擎)。
在一些实施例中,如果各个上游模块(上游IP)不存在单独工作的场景,或者各个上游模块(上游IP)能发送的最大带宽有限且小于下游模块(下游IP)的最大带宽,可以采用上述静态共享缓存的方案,固定为每个上游模块(上游IP)分配共享缓存的区域,减小部分硬件资源。
基于相同的发明构思,本公开实施例还提供一种片上***(System-on-a-chip,SOC),包括至少一个上游模块、下游模块和上述任一实施例的重排序缓冲器。
在一些实施例中,重排序缓冲器可以设置在片上***的互连网络上。
基于相同的发明构思,本公开实施例还提供一种电子组件,该电子组件包括上述任一实施例中的片上***。
在一些使用场景下,该电子组件的产品形式体现为显卡;在另一些使用场景下,该电子组件的产品形式体现为CPU主板。
基于相同的发明构思,本公开实施例还提供一种电子设备,该电子设备包括上述的电子组件。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机等。
基于相同的发明构思,本公开实施例还提供一种片上***的数据传输方法,包括:
在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入缓存模块中其对应的请求标识对应的缓存区内;从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;缓存模块包括分别对应不同请求标识的多个缓存区;或,
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
在一些实施例中,上述片上***的数据传输方法中,FIFO的指针包括第一写指针、第一读指针、多个第二写指针和多个第二读指针,多个第二写指针分别对应不同请求标识,多个第二读指针分别对应不同请求标识;
在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入缓存模块中其对应的请求标识对应的缓存区内;从缓存模块中读取FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;缓存模块包括分别对应不同请求标识的多个缓存区,包括:
在接收到上游模块的事务请求时,将该事务请求的请求标识写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内,以及将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;从缓存模块中读取第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项;或,
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;从缓存模块中读取FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向第一写指针当前指向的表项,第一写指针更新为指向其当前指向的表项的下一表项;在接收到存储器针对一事务请求返回的响应数据时,将该响应数据写入其对应的请求标识对应的第二读指针当前指向的表项中的缓存地址上,以及将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;从缓存模块中读取第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,并在第一读指针当前指向的表项中的第一标志位为有效时,第一读指针更新为指向其当前指向的表项的下一表项。
上述片上***的数据传输方法的具体实施过程可参见上述任一实施例的重排序缓冲器,此处不再赘述。
尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。
Claims (17)
1.一种重排序缓冲器,包括:FIFO、控制模块和缓存模块;
所述缓存模块包括分别对应不同请求标识的多个缓存区;所述控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;还被配置为从所述缓存模块中读取所述FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;或,
所述控制模块,被配置为接收上游模块的事务请求,分配该事务请求在所述缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入所述FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入所述FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;还被配置为从所述缓存模块中读取所述FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
2.根据权利要求1所述的重排序缓冲器,所述FIFO的指针包括第一写指针、第一读指针、多个第二写指针和多个第二读指针,所述多个第二写指针分别对应不同请求标识,所述多个第二读指针分别对应不同请求标识;
所述控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;还被配置为从所述缓存模块中读取所述FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,包括:
所述控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向所述第一写指针当前指向的表项,所述第一写指针更新为指向其当前指向的表项的下一表项;还被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内,以及将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;还被配置为从所述缓存模块中读取所述第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,并在所述第一读指针当前指向的表项中的第一标志位为有效时,所述第一读指针更新为指向其当前指向的表项的下一表项;或,
所述控制模块,被配置为接收上游模块的事务请求,分配该事务请求在所述缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入所述FIFO中,以及将该事务请求发送至存储器;还被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入所述FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;还被配置为从所述缓存模块中读取所述FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
所述控制模块,被配置为接收上游模块的事务请求,分配该事务请求在所述缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入所述第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向所述第一写指针当前指向的表项,所述第一写指针更新为指向其当前指向的表项的下一表项;还被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入其对应的请求标识对应的第二读指针当前指向的表项中的缓存地址上,以及将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;还被配置为从所述缓存模块中读取所述第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,并在所述第一读指针当前指向的表项中的第一标志位为有效时,所述第一读指针更新为指向其当前指向的表项的下一表项。
3.根据权利要求2所述的重排序缓冲器,所述控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中;还被配置为将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项,包括:
所述控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述第一写指针当前指向的表项中,所述第一写指针当前指向的表项中的第二标志位为无效,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将该第二写指针当前指向的表项中的第二标志位切换为有效;还被配置为将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,在该第二读指针当前指向的表项中的第二标志位为有效时,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;或,
所述控制模块,被配置为接收上游模块的事务请求,分配该事务请求在所述缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入所述第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中;还被配置为将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项,包括:
所述控制模块,被配置为接收上游模块的事务请求,分配该事务请求在所述缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入所述第一写指针当前指向的表项中,所述第一写指针当前指向的表项中的第二标志位为无效,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,并将该第二写指针当前指向的表项中的第二标志位切换为有效;还被配置为将该第二读指针当前指向的表项中的第一标志位切换为有效,在该第二读指针当前指向的表项中的第二标志位为有效时,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项。
4.根据权利要求2所述的重排序缓冲器,所述FIFO的指针还包括一第三读指针;
所述FIFO,被配置为将所述第三读指针当前指向的表项中的请求标识发送给所述下游模块,以使得所述下游模块通过所述请求标识向所述控制模块请求对应的响应数据,所述第三读指针更新为指向其当前指向的表项的下一表项;
所述控制模块,被配置为从所述缓存模块中读取所述第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,包括:
所述控制模块,被配置为在接收到所述下游模块发送的一请求标识且该请求标识与所述第一读指针当前指向的表项中的请求标识相同时,从所述缓存模块中读取所述第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至所述下游模块;或,
所述控制模块,被配置为从所述缓存模块中读取所述第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
所述控制模块,被配置为在接收到所述下游模块发送的一请求标识且该请求标识与所述第一读指针当前指向的表项中的请求标识相同时,从所述缓存模块中读取所述第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至所述下游模块。
5.根据权利要求2所述的重排序缓冲器,所述FIFO的指针还包括一第三读指针;
所述FIFO,被配置为将所述第三读指针当前指向的表项中的请求标识和缓存地址发送给所述下游模块,以使得所述下游模块通过所述请求标识及其对应的缓存地址向所述控制模块请求对应的响应数据,所述第三读指针更新为指向其当前指向的表项的下一表项;
所述控制模块,被配置为从所述缓存模块中读取所述第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
所述控制模块,被配置为在接收到所述下游模块发送的一请求标识及其对应的缓存地址且接收到的该请求标识和该缓存地址分别与所述第一读指针当前指向的表项中的请求标识和缓存地址相同时,根据接收到的该缓存地址,从所述缓存模块中读取该缓存地址上缓存的响应数据返回至所述下游模块。
6.根据权利要求2所述的重排序缓冲器,在所述第一读指针更新时,所述第一读指针更新前指向的表项被释放。
7.根据权利要求1所述的重排序缓冲器,所述控制模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述FIFO中,包括:
所述控制模块,被配置为在接收上游模块的事务请求且所述FIFO为非满状态时,将该事务请求的请求标识写入所述FIFO中;或,
所述控制模块,被配置为将该事务请求的请求标识和分配到的缓存地址写入所述FIFO中,包括:
所述控制模块,被配置为在所述FIFO为非满状态时,将该事务请求的请求标识和分配到的缓存地址写入所述FIFO中。
8.根据权利要求1所述的重排序缓冲器,所述控制模块包括解析模块、写控制模块和读控制模块;
所述解析模块,被配置为在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述FIFO中,以及将该事务请求发送至存储器;所述写控制模块,被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内;所述读控制模块,被配置为从所述缓存模块中读取所述FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;或,
所述解析模块,被配置为接收上游模块的事务请求,向所述读控制模块申请该事务请求在所述缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入所述FIFO中,以及将该事务请求发送至存储器;所述写控制模块,被配置为在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入所述FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;所述读控制模块,被配置为从所述缓存模块中读取所述FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
9.根据权利要求8所述的重排序缓冲器,还包括第一仲裁模块,被配置为:
在接收到所述上游模块的事务请求时,向所述解析模块发出一个握手请求,并在接收到所述解析模块针对所述握手请求返回的响应信息时,从接收到的事务请求中选择其一发送至所述解析模块。
10.根据权利要求9所述的重排序缓冲器,所述解析模块,还被配置为:
在接收到所述第一仲裁模块的一个握手请求时,向所述读控制模块申请该握手请求对应的事务请求在所述缓存模块中对应的缓存地址,申请到所述缓存地址后,向所述第一仲裁模块返回针对所述握手请求的响应信息。
11.根据权利要求1所述的重排序缓冲器,还包括第一仲裁模块,被配置为:
接收所述上游模块的事务请求;
将接收到的事务请求逐个发送至所述控制模块。
12.根据权利要求1所述的重排序缓冲器,还包括第二仲裁模块,被配置为:
接收所述下游模块返回的响应数据,并将其返回至对应的所述上游模块。
13.一种片上***,包括至少一个上游模块、下游模块和权利要求1至12中任一项所述的重排序缓冲器。
14.一种电子组件,包括权利要求13所述的片上***。
15.一种电子设备,包括权利要求14所述的电子组件。
16.一种片上***的数据传输方法,包括:
在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入缓存模块中其对应的请求标识对应的缓存区内;从所述缓存模块中读取所述FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;所述缓存模块包括分别对应不同请求标识的多个缓存区;或,
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入所述FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;从所述缓存模块中读取所述FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块。
17.根据权利要求16所述的方法,所述FIFO的指针包括第一写指针、第一读指针、多个第二写指针和多个第二读指针,所述多个第二写指针分别对应不同请求标识,所述多个第二读指针分别对应不同请求标识;
在接收到上游模块的事务请求时,将该事务请求的请求标识写入FIFO中,以及将该事务请求发送至存储器;在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入缓存模块中其对应的请求标识对应的缓存区内;从所述缓存模块中读取所述FIFO中排在最前面的请求标识对应的缓存区中顺序读出响应数据返回至下游模块;所述缓存模块包括分别对应不同请求标识的多个缓存区,包括:
在接收到上游模块的事务请求时,将该事务请求的请求标识写入所述第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向所述第一写指针当前指向的表项,所述第一写指针更新为指向其当前指向的表项的下一表项;在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据顺序写入其对应的请求标识对应的缓存区内,以及将该响应数据对应的请求标识对应的第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;从所述缓存模块中读取所述第一读指针当前指向的表项中的请求标识对应的缓存区中顺序读出响应数据返回至下游模块,在所述第一读指针当前指向的表项中的第一标志位为有效时,所述第一读指针更新为指向其当前指向的表项的下一表项;或,
接收上游模块的事务请求,分配该事务请求在缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入FIFO中,以及将该事务请求发送至存储器;在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入所述FIFO中缓存有对应请求标识的表项中排在最前面的表项中的缓存地址上;从所述缓存模块中读取所述FIFO中排在最前面的表项中的缓存地址上缓存的响应数据返回至下游模块,包括:
接收上游模块的事务请求,分配该事务请求在所述缓存模块中对应的缓存地址,并将该事务请求的请求标识和分配到的缓存地址写入所述第一写指针当前指向的表项中,以及将该事务请求发送至存储器,并在该请求标识对应的第二写指针有效时,将所述第一写指针当前指向的表项的表项标识写入对应的第二写指针当前指向的表项中,该第二写指针更新为指向所述第一写指针当前指向的表项,所述第一写指针更新为指向其当前指向的表项的下一表项;在接收到所述存储器针对一事务请求返回的响应数据时,将该响应数据写入其对应的请求标识对应的第二读指针当前指向的表项中的缓存地址上,以及将该第二读指针当前指向的表项中的第一标志位切换为有效,该第二读指针更新为指向其当前指向的表项中缓存的表项标识对应的表项;从所述缓存模块中读取所述第一读指针当前指向的表项中的缓存地址上缓存的响应数据返回至下游模块,并在所述第一读指针当前指向的表项中的第一标志位为有效时,所述第一读指针更新为指向其当前指向的表项的下一表项。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410446029.6A CN118034638A (zh) | 2024-04-12 | 2024-04-12 | 重排序缓冲器、***、组件、设备及传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410446029.6A CN118034638A (zh) | 2024-04-12 | 2024-04-12 | 重排序缓冲器、***、组件、设备及传输方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118034638A true CN118034638A (zh) | 2024-05-14 |
Family
ID=90995433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410446029.6A Pending CN118034638A (zh) | 2024-04-12 | 2024-04-12 | 重排序缓冲器、***、组件、设备及传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118034638A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1383511A (zh) * | 1998-11-16 | 2002-12-04 | 因芬尼昂技术股份公司 | 通过重排序存储器请求提高总线利用率的存储器控制器 |
CN101146029A (zh) * | 2006-09-13 | 2008-03-19 | 华为技术有限公司 | 一种分组重排序方法和*** |
CN107924300A (zh) * | 2015-08-13 | 2018-04-17 | 微软技术许可有限责任公司 | 使用缓冲器和存储器的数据重排序 |
CN109196489A (zh) * | 2016-05-27 | 2019-01-11 | Arm有限公司 | 用于在非均匀计算装置中重排序的方法和设备 |
CN114995780A (zh) * | 2022-06-07 | 2022-09-02 | 乐鑫信息科技(上海)股份有限公司 | 先入先出缓冲器及先入先出缓冲器的控制方法 |
CN116257479A (zh) * | 2023-05-16 | 2023-06-13 | 北京象帝先计算技术有限公司 | 重排序缓冲器、***、装置、设备及传输方法 |
CN116955251A (zh) * | 2023-03-24 | 2023-10-27 | 腾讯科技(深圳)有限公司 | 一种基于重排序缓冲器的读请求处理方法及相关装置 |
US20240069795A1 (en) * | 2022-08-30 | 2024-02-29 | Micron Technology, Inc. | Access request reordering across a multiple-channel interface for memory-based communication queues |
-
2024
- 2024-04-12 CN CN202410446029.6A patent/CN118034638A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1383511A (zh) * | 1998-11-16 | 2002-12-04 | 因芬尼昂技术股份公司 | 通过重排序存储器请求提高总线利用率的存储器控制器 |
CN101146029A (zh) * | 2006-09-13 | 2008-03-19 | 华为技术有限公司 | 一种分组重排序方法和*** |
CN107924300A (zh) * | 2015-08-13 | 2018-04-17 | 微软技术许可有限责任公司 | 使用缓冲器和存储器的数据重排序 |
CN109196489A (zh) * | 2016-05-27 | 2019-01-11 | Arm有限公司 | 用于在非均匀计算装置中重排序的方法和设备 |
CN114995780A (zh) * | 2022-06-07 | 2022-09-02 | 乐鑫信息科技(上海)股份有限公司 | 先入先出缓冲器及先入先出缓冲器的控制方法 |
US20240069795A1 (en) * | 2022-08-30 | 2024-02-29 | Micron Technology, Inc. | Access request reordering across a multiple-channel interface for memory-based communication queues |
CN116955251A (zh) * | 2023-03-24 | 2023-10-27 | 腾讯科技(深圳)有限公司 | 一种基于重排序缓冲器的读请求处理方法及相关装置 |
CN116257479A (zh) * | 2023-05-16 | 2023-06-13 | 北京象帝先计算技术有限公司 | 重排序缓冲器、***、装置、设备及传输方法 |
Non-Patent Citations (2)
Title |
---|
JOSÉ R. GARCÍA ORDAZ等: "A Reorder Buffer Design for High Performance Processors", COMPUTACIÓN Y SISTEMAS, vol. 16, no. 1, 31 December 2012 (2012-12-31) * |
张鹤;: "超标量处理器中重排序缓冲器的研究", 信息化纵横, no. 16, 25 August 2009 (2009-08-25) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102414671B (zh) | 对于不同源的分级内存仲裁技术 | |
US8730248B2 (en) | Multi-graphics processor system, graphics processor and data transfer method | |
US7526593B2 (en) | Packet combiner for a packetized bus with dynamic holdoff time | |
US6330630B1 (en) | Computer system having improved data transfer across a bus bridge | |
US6587906B2 (en) | Parallel multi-threaded processing | |
US20040039895A1 (en) | Memory shared between processing threads | |
US6675251B1 (en) | Bridge device for connecting multiple devices to one slot | |
JPH10504665A (ja) | バスブリッジにおけるトランザクション順序を維持し、遅延応答をサポートする方法及びそのための装置 | |
US6170030B1 (en) | Method and apparatus for restreaming data that has been queued in a bus bridging device | |
US20050198416A1 (en) | Two channel bus structure to support address information, data, and transfer qualifiers | |
KR20100106262A (ko) | 저장 컨트롤러 및 저장 시스템 | |
CN102834813A (zh) | 用于多通道高速缓存的更新处理机 | |
WO2014179151A1 (en) | Multi-hierarchy interconnect system and method for cache system | |
US8990456B2 (en) | Method and apparatus for memory write performance optimization in architectures with out-of-order read/request-for-ownership response | |
US6970978B1 (en) | System and method for providing a pre-fetch memory controller | |
CN117707994B (zh) | 请求缓冲器、***、组件、设备及传输方法 | |
JP3444154B2 (ja) | メモリアクセス制御回路 | |
US7000041B2 (en) | Method and an apparatus to efficiently handle read completions that satisfy a read request | |
US7409486B2 (en) | Storage system, and storage control method | |
US7529857B2 (en) | Data processing apparatus and data transfer control method | |
CN118034638A (zh) | 重排序缓冲器、***、组件、设备及传输方法 | |
CN116009770A (zh) | 读响应电路、方法、数据传输***及相关设备 | |
US6799247B1 (en) | Remote memory processor architecture | |
JP2005508549A (ja) | アンキャッシュ素子のための帯域幅の向上 | |
US9672168B2 (en) | System interconnection of system-on-chip |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |