处理方式。
[0086]S303:若所述数据缓冲器存在空闲空间,则在所述数据缓冲器中为所述目标命令对应的数据分配第三缓冲空间,并将所述目标命令对应的数据缓存在所述第三缓冲空间,直至所述目标命令对应的数据被读取完成后,清空所述第三缓冲空间。
[0087]S304:若所述数据缓冲器不存在空闲空间,则将所述目标命令对应的数据丢弃,并向所述命令缓冲器重发所述读命令。
[0088]在本实施例中,若检测到数据缓冲器有空闲的空间,则为该目标命令(即上述读命令)对应的数据分配第三缓冲空间,将第二总线返回的与该读命令对应的数据缓存在第三缓冲空间中,直至该数据被读取完成,释放该第三缓冲空间。
[0089]如果该数据缓冲器不存在空闲的空间,则将接收到的该数据丢弃,并向命令缓冲器再次发送该读命令,重发的该读命令是由数据缓冲管理器指示命令缓冲管理器发送的,以使该重发的读命令经过仲裁再次进行后续处理,对于该重发的读命令的具体处理方式如图5所示的实施例。
[0090]图5为本发明缓冲资源的分配方法实施例四的流程图,如图5所示,在上述实施例的基础上,若仲裁出的目标命令为读命令,且所述目标命令是重发命令,则在对目标命令进行协议转换之后,该缓冲资源的分配方法的具体实现步骤为:
[0091]S401:实时检测所述数据缓冲器是否存在空间的缓冲空间,在所述数据缓冲器中为所述目标命令对应的数据预分配第四缓冲空间。
[0092]在本实施例中,数据缓冲管理器在判断出目标命令(即上述读命令)为重发命令时,采用静态allocate方式为该读命令分配第四缓冲空间,即轮询数据缓冲器的空间情况,发现数据缓冲器有空闲时,优先为该重发的读命令预分配第四缓冲空间。
[0093]在为该重发的读命令预分配到第四缓冲空间之后,按照图2中的步骤,将该重发的读命令进行协议转换后发送至第二总线。即为该重发的读命令对应的数据预占了第四缓冲空间之后,再将该读命令(即第一命令)发送至第二总线进行处理。
[0094]S402:接收所述第二总线返回的与所述目标命令对应的数据,并将所述目标命令对应的数据缓存在所述第四缓冲空间,直至所述目标命令对应的数据被读取完成后,清空所述第四缓冲空间。
[0095]在本实施例中,待第二总线返回与上述重发的读命令对应的数据后,直接将读命令对应的数据缓存在所述第四缓冲空间内等待读取。后续处理过程与实施例三相同。
[0096]数据缓冲器除了可以缓冲读写的数据,还可以缓冲响应数据,具体的处理方式与非重发的读命令对应的数据的处理方式相同。
[0097]本实施例提供的缓冲资源的分配方法,本实施例提供的缓冲资源的分配方法,通过在命令缓冲器内为接收到的命令分配缓冲空间,无论每次接收到的命令是任何命令,都根据命令缓冲器的总的空闲情况动态分配空间,在仲裁后的命令时读命令的情况下,在接收到ARM的第五代数据总线返回的与该读命令对应的数据后,在数据缓冲器为该读命令对应的数据分配缓冲空间或者丢弃,在重发命令过程中预占缓冲空间,该合并后的数据缓冲器的空间远远大于现有技术中的写数据通道对应的缓冲器,且该数据缓冲器不限制缓冲数据的类型,只根据空闲情况进行动态分配,相比有效避免了读写不均衡的场景下,每个通道的缓冲器资源不能共享造成的资源浪费,提高资源的利用率。
[0098]在上述图2至图5所示的实施例的基础上,下面结合详细的流程图介绍本发明的缓冲资源的分配方法的实现过程:
[0099]图6为本发明缓冲资源的分配方法中命令缓冲器的分配流程图,如图6所示,对接收到的第一总线发来的读命令或写命令的具体处理过程为:
[0100]首先是读命令的处理:
[0101]SOll:读命令。即接收到由第一总线通过读地址通道发送的读命令,则执行步骤S012o
[0102]S012:检测命令缓冲器是否有空闲?
[0103]对命令缓冲器的空闲情况进行检测,如果有空闲则执行S013,如果没有空闲则执行 S014。
[0104]S013:分配缓冲空间。即在命令缓冲器中为该读命令分配缓冲空间,并将该读命令缓冲在分配的空间中。
[0105]S014:启动读命令反压超时检测。检测到命令缓冲器没有空闲后,将该读命令反压,即拒绝,由读地址通道设置的反压检测模块进行反压超时检测。
[0106]S015:检测读命令是否超时?
[0107]若检测到该读命令已经超时,则执行S016,若检测到该读命令还未超时,则继续等到并继续检测。
[0108]S016:屏蔽所有其他命令的缓冲申请。即检测到该读命令已经超时,则屏蔽所有其他的命令的缓冲空间的申请优先处理该超时的读命令的申请。
[0109]S017:检测到命令缓冲器有空闲?持续检测命令缓冲器的空闲状况,即是否有处理完成的命令释放了缓冲空间。如果检测到命令缓冲器有空闲则执行S013,如果检测到命令缓冲器没有空闲空间则继续屏蔽其他的命令,实时检测命令缓冲器,即一旦出现空闲,则执行SO13。
[0110]其次是写命令的处理:
[0111]S021:写命令。即接收到由第一总线通过写地址通道发送的写命令,则执行步骤S012o
[0112]S022:检测命令缓冲器是否有空闲?
[0113]对命令缓冲器的空闲情况进行检测,如果有空闲则执行S023,如果没有空闲则执行 S024。
[0114]S023:分配缓冲空间。即在命令缓冲器中为该写命令分配缓冲空间,并将该写命令缓冲在分配的空间中。
[0115]S024:启动写命令反压超时检测。检测到命令缓冲器没有空闲后,将该写命令反压,即拒绝,由写地址通道设置的反压检测模块进行反压超时检测。
[0116]S025:检测写命令是否超时?
[0117]若检测到该写命令已经超时,则执行S026,若检测到该写命令还未超时,则继续等到并继续检测。
[0118]S026:屏蔽所有其他命令的缓冲申请。即检测到该写命令已经超时,则屏蔽所有其他的命令的缓冲空间的申请优先处理该超时的写命令的申请。
[0119]S027:检测到命令缓冲器有空闲?持续检测命令缓冲器的空闲状况,即是否有处理完成的命令释放了缓冲空间。如果检测到命令缓冲器有空闲则执行S023,如果检测到命令缓冲器没有空闲空间则继续屏蔽其他的命令,实时检测命令缓冲器,即一旦出现空闲,则执行S023。
[0120]从上面图6的流程中可以看出,在某一时间段内,若读地址通道的的流量较少,甚至为零,写地址通道的流量很大时,该方案会将大部分的命令缓冲器分配给写命令使用,反之亦然。
[0121]图7为本发明缓冲资源的分配方法中数据缓冲器的分配流程图,如图7所示,在上述图6所示的基础上,完成对命令的缓冲分配并缓冲在命令缓冲器之后的具体处理过程为:
[0122]S018、S028:读命令?写命令?判断仲裁模块根据仲裁策略仲裁出的命令是读命令还是写命令?如果是写命令则依次执行S029-S0213。如果是读命令则依次执行S019-S0119(包括循环步骤)。
[0123]首先介绍写数据的处理(写数据的过程中写命令和对应的写数据同时发送过来,在写命令被冲裁后进行接收写数据):
[0124]S029:写命令。即仲裁模块仲裁出的命令是写命令则执行步骤S0210的同时执行S0211o
[0125]S0210:将写命令发送到一致性协议总线。即将仲裁后的写命令进行协议转换并发送给一致性协议总线继续进行处理。
[0126]S0211:在数据缓冲器为写命令对应数据预占缓冲空间。即数据缓冲器的管理模块在接收到仲裁结果通知后,为将要通过写数据通道发来的写命令对应的数据预先分配空间,一般为静态allocate的方式,即循环检测数据缓冲器的空闲情况,直至存在空闲时为该写命令对应的数据分配缓冲空间。
[0127]S0212:写数据接收完成?即通过写数据通道接收写命令对应的数据,检测写数据是否全部接收到并缓冲在数据缓冲器,如果检测到全部接收并缓冲该写命令对应的数据,则执行S0213。
[0128]S0213:将写数据发送到一致性协议总线。即检测到该写命令对应的数据全部接收到,则将在数据缓冲器中缓冲的该写命令对应的数据全部发送至一致性协议总线,并清空对应的数据缓冲器的空间。
[0129]其次介绍读数据的处理(读取数据的过程中,读命令被处理完成后,等到一致性协议总线根据该读命令返回对应的数据):
[0130]S019:读命令。即仲裁模块仲裁出的命令是读命令则执行步骤S0110的同时执行S0211o
[0131]S0110:该读命令是不是重发命令?判断该读命令是不是重发的读命令,如果该读命令不是重发的,则执行S0111,否则执行S0118。
[0132]SOlll:将读命令发送到一致性协议总线。即将仲裁后的读命令进行协议转换并发送给一致性协议总线继续进行处理。
[0133]等待给一致性协议总线返回与该读命令对应的数据。
[0134]SOl 12:接收第二总线返回的读命令对应的数据。
[0135]S0113:检测数据缓冲器是否有空闲?若检测到数据缓冲器有空闲,则执行S0114,否则执行S0116。
[0136]S0114:分配缓冲空间。将数据缓冲器中的空闲空间分配该读命令对应的数据。
[0137]S0115:读数据接收完成。待通过AXI总线的读数据通道将该读命令对应的数据全部读取完成后清空数据缓冲器中对应的空间。
[0138]S0116:丢弃该读命令对应的数据。在S0113中检测到数据缓冲器没有空闲的空间后,将该读命令对应的数据丢弃,然后执行S0117。
[0139]S0117:重发该读命令。本步骤的含义是数据缓冲器不存在空