书签 分享 收藏 举报 版权申诉 / 33

数据访问方法及设备.pdf

  • 上传人:Y948****062
  • 文档编号:176741
  • 上传时间:2018-01-31
  • 格式:PDF
  • 页数:33
  • 大小:2.82MB
  • 摘要
    申请专利号:

    CN201510131604.4

    申请日:

    2015.03.24

    公开号:

    CN104765701A

    公开日:

    2015.07.08

    当前法律状态:

    实审

    有效性:

    审中

    法律详情:

    实质审查的生效IPC(主分类):G06F 13/18申请日:20150324|||公开

    IPC分类号:

    G06F13/18

    主分类号:

    G06F13/18

    申请人:

    华为技术有限公司

    发明人:

    覃婕

    地址:

    518129广东省深圳市龙岗区坂田华为总部办公楼

    优先权:

    专利代理机构:

    北京三高永信知识产权代理有限责任公司11138

    代理人:

    祝亚男

    PDF完整版下载: PDF下载
    内容摘要

    本发明公开了一种数据访问方法及设备,属于计算机领域。所述方法包括:在每个时钟周期,当检测到多个HAC通过与所述多个HAC分别连接的HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求;基于接收的数据访问请求的类型,将所述接收的数据访问请求存储在LMI的数据队列中;基于所述LMI的数据队列中的目标数据访问请求携带的数据量、所述目标数据访问请求携带的起始地址和SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。本发明通过LMI对HAC发送的数据访问请求进行仲裁、拆分以及协议转化,节省了拆分逻辑和协议转化逻辑的重复资源,并且SOC数据总线只需为LMI提供访问接口,减少了SOC数据总线的访问接口的数量。

    权利要求书

    1.  一种数据访问方法,其特征在于,所述方法包括:
    在每个时钟周期,当检测到多个硬件加速器HAC通过与所述多个HAC分别连接的硬件加速器接口HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求;
    基于接收的数据访问请求的类型,将所述接收的数据访问请求存储在逻辑主接口LMI的数据队列中;
    基于所述LMI的数据队列中的目标数据访问请求携带的数据量、所述目标数据访问请求携带的起始地址和片上系统SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。

    2.
      如权利要求1所述的方法,其特征在于,所述基于接收的数据访问请求的类型,将所述接收的数据访问请求存储在逻辑主接口LMI的数据队列中,包括:
    如果接收的数据访问请求的类型为数据写请求,则将所述接收的数据访问请求存储在LMI的第一数据队列中最后一个数据访问请求之后,所述第一数据队列用于存储数据写请求;
    如果接收的数据访问请求的类型为数据读请求,则将所述接收的数据访问请求存储在所述LMI的第二数据队列中最后一个数据访问请求之后,所述第二数据队列用于存储数据读请求。

    3.
      如权利要求1所述的方法,其特征在于,所述基于所述LMI的数据队列中的目标数据访问请求携带的数据量、所述目标数据访问请求携带的起始地址和片上系统SOC数据总线的最大数据量,对SOC的存储资源进行数据访问,包括:
    从LMI的第一数据队列中,获取目标数据写请求,以及从所述LMI的第二数据队列中,获取目标数据读请求;
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中;
    基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据。

    4.
      如权利要求3所述的方法,其特征在于,所述基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中,包括:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,并将所述子数据写请求进行协议转化,得到数据写命令,所述数据写命令携带第一子数据量和第一子起始地址;
    当所述第一次数达到第二指定次数时,从所述目标HAC中获取所述第二指定次数的下一次写数据的过程中,将所述数据写命令发送给所述SOC数据总线,并将所述第一次数清零,重新统计第一次数,返回上一步骤,直至将所述目标数据写请求拆分完毕;
    当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC 中获取所述数据写命令的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。

    5.
      如权利要求3所述的方法,其特征在于,所述基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中,包括:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,将所述子数据写请求进行协议转化,得到数据写命令,返回本步骤,直至将所述目标数据写请求拆分完毕;
    将所述数据写命令发送给所述SOC数据总线,所述数据写命令携带第一子数据量和第一子起始地址;
    当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC中获取的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。

    6.
      如权利要求4或5所述的方法,其特征在于,所述基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得 到第一次数,包括:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,所述芯片数据总线为与所述LMI连接的数据总线;
    基于所述获取次数,向所述目标HAC发送指示信息,所述指示信息用于指示所述目标HAC将所述目标数据写请求的写数据划分为所述获取次数次进行发送;
    接收所述目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一次数。

    7.
      如权利要求3-5任一权利要求所述的方法,其特征在于,所述基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据,包括:
    基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求,并将所述子数据读请求进行协议转化,得到数据读命令;
    将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    接收所述SOC的存储资源通过所述SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数;
    当所述第二次数达到第三指定次数时,接收所述SOC的存储资源通过所述SOC数据总线发送所述第三指定次数的下一次读数据的过程中,基于所述第二数据量、所述第二起始地址和所述SOC数据总线的最大数据量,从所述目标数 据读请求中拆分出下一个子数据读请求,并将所述下一个子数据读请求进行协议转化,得到下一个数据读命令;
    当所述第二次数达到第四指定次数时,接收所述SOC的存储资源通过所述SOC数据总线发送所述第四指定次数的下一次读数据的过程中,将所述下一个数据读命令发送给所述SOC数据总线,并将所述第二次数清零,重新统计第二次数,返回上一步骤,直至将所述目标数据读请求拆分完毕。

    8.
      如权利要求3-5任一权利要求所述的方法,其特征在于,所述基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据,包括:
    基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求;
    将所述子数据读请求进行协议转化,得到数据读命令,返回上一步骤,直至将所述目标数据读请求拆分完毕;
    将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    逐次接收所述SOC的存储资源通过所述SOC数据总线发送的读数据。

    9.
      如权利要求1所述的方法,其特征在于,所述方法还包括:
    对于每个HAC,当向所述SOC数据总线发送属于所述HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数,以及对发送的数据读命令个数进行统计,得到第二命令个数;
    当所述第一命令个数等于第一个数阈值时,停止接收所述HAC发送的类型 为数据写请求的数据访问请求,直至所述第一命令个数小于所述第一个数阈值;
    当所述第二命令个数等于第二个数阈值时,停止接收所述HAC发送的类型为数据读请求的数据访问请求,直至所述第二命令个数小于所述第二个数阈值。

    10.
      一种数据访问设备,其特征在于,所述设备包括:
    接收模块,用于在每个时钟周期,当检测到多个硬件加速器HAC通过与所述多个HAC分别连接的硬件加速器接口HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求;
    存储模块,用于基于接收的数据访问请求的类型,将所述接收的数据访问请求存储在逻辑主接口LMI的数据队列中;
    数据访问模块,用于基于所述LMI的数据队列中的目标数据访问请求携带的数据量、所述目标数据访问请求携带的起始地址和片上系统SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。

    11.
      如权利要求10所述的设备,其特征在于,所述存储模块包括:
    存储单元,用于如果接收的数据访问请求的类型为数据写请求,则将所述接收的数据访问请求存储在LMI的第一数据队列中最后一个数据访问请求之后,所述第一数据队列用于存储数据写请求;
    所述存储单元,还用于如果接收的数据访问请求的类型为数据读请求,则将所述接收的数据访问请求存储在所述LMI的第二数据队列中最后一个数据访问请求之后,所述第二数据队列用于存储数据读请求。

    12.
      如权利要求10所述的设备,其特征在于,所述数据访问模块包括:
    获取单元,用于从LMI的第一数据队列中,获取目标数据写请求,以及从所述LMI的第二数据队列中,获取目标数据读请求;
    写入单元,用于基于所述目标数据写请求携带的第一数据量、所述目标数 据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中;
    读取单元,用于基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据。

    13.
      如权利要求12所述的设备,其特征在于,所述写入单元包括:
    获取子单元,用于基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    拆分子单元,用于当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,并将所述子数据写请求进行协议转化,得到数据写命令,所述数据写命令携带第一子数据量和第一子起始地址;
    发送子单元,用于当所述第一次数达到第二指定次数时,从所述目标HAC中获取所述第二指定次数的下一次写数据的过程中,将所述数据写命令发送给所述SOC数据总线,并将所述第一次数清零,重新统计第一次数,返回上一拆分子单元,直至将所述目标数据写请求拆分完毕;
    所述发送子单元,还用于当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC中获取所述数据写命令的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。

    14.
      如权利要求12所述的设备,其特征在于,所述写入单元包括:
    获取子单元,用于基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    拆分子单元,用于当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,将所述子数据写请求进行协议转化,得到数据写命令,返回本拆分子单元,直至将所述目标数据写请求拆分完毕;
    发送子单元,用于将所述数据写命令发送给所述SOC数据总线,所述数据写命令携带第一子数据量和第一子起始地址;
    所述发送子单元,还用于当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC中获取的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。

    15.
      如权利要求13或14所述的设备,其特征在于,
    所述获取子单元,具体用于:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,所述芯片数据总线为与所述LMI连接的数据总线;
    基于所述获取次数,向所述目标HAC发送指示信息,所述指示信息用于指示所述目标HAC将所述目标数据写请求的写数据划分为所述获取次数次进行发送;
    接收所述目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一次数。

    16.
      如权利要求12-14任一权利要求所述的设备,其特征在于,所述读取单元包括:
    拆分子单元,用于基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求,并将所述子数据读请求进行协议转化,得到数据读命令;
    发送子单元,用于将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    接收子单元,用于接收所述SOC的存储资源通过所述SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数;
    所述拆分子单元,还用于当所述第二次数达到第三指定次数时,接收所述SOC的存储资源通过所述SOC数据总线发送所述第三指定次数的下一次读数据的过程中,基于所述第二数据量、所述第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出下一个子数据读请求,并将所述下一个子数据读请求进行协议转化,得到下一个数据读命令;
    所述发送子单元,还用于当所述第二次数达到第四指定次数时,接收所述SOC的存储资源通过所述SOC数据总线发送所述第四指定次数的下一次读数据的过程中,将所述下一个数据读命令发送给所述SOC数据总线,并将所述第二次数清零,重新统计第二次数,返回上一拆分子单元,直至将所述目标数据读请求拆分完毕。

    17.
      如权利要求12-14任一权利要求所述的设备,其特征在于,所述读取单元包括:
    拆分子单元,用于基于所述目标数据读请求携带的第二数据量、所述目标 数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求;
    协议转化子单元,用于将所述子数据读请求进行协议转化,得到数据读命令,返回上一拆分子单元,直至将所述目标数据读请求拆分完毕;
    发送子单元,用于将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    接收子单元,用于逐次接收所述SOC的存储资源通过所述SOC数据总线发送的读数据。

    18.
      如权利要求10所述的设备,其特征在于,所述设备还包括:
    统计模块,用于对于每个HAC,当向所述SOC数据总线发送属于所述HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数,以及对发送的数据读命令个数进行统计,得到第二命令个数;
    停止模块,用于当所述第一命令个数等于第一个数阈值时,停止接收所述HAC发送的类型为数据写请求的数据访问请求,直至所述第一命令个数小于所述第一个数阈值;
    所述停止模块,还用于当所述第二命令个数等于第二个数阈值时,停止接收所述HAC发送的类型为数据读请求的数据访问请求,直至所述第二命令个数小于所述第二个数阈值。

    说明书

    数据访问方法及设备
    技术领域
    本发明涉及计算机领域,特别涉及一种数据访问方法及设备。
    背景技术
    随着芯片复杂度的不断增加,单个芯片内HAC(英文:Hardware Accelerator;中文:硬件加速器)的数量越来越多,且HAC对SOC(英文:System On Chip;中文:片上系统)的存储资源进行数据访问是HAC执行业务过程中比不可少的环节。
    目前,HAC对SOC的存储资源进行数据访问的具体过程可以为:如图1所示,每个HAC分别连接一个HAC-IF(英文:Hardware Accelerator Interface;中文:硬件加速器接口),当每个HAC接收到数据访问请求时,该HAC将该数据访问请求发送给与其连接的HAC-IF,该HAC-IF基于指定数据量和该数据访问请求携带的数据量,在每个时钟周期,从该数据访问请求中拆分出一个子数据访问请求,子数据访问请求携带的子数据量小于或等于指定数据量。其中,指定数据量小于或等于SOC数据总线要求的最大数据量。之后,该HAC-IF将该子数据访问请求进行协议转化,得到数据访问命令,使该数据访问命令满足SOC数据总线的协议。该HAC-IF将该数据访问命令发送给SOC数据总线,当SOC数据总线检测到多个HAC-IF发送的数据访问命令时,基于每个HAC-IF接收的数据访问请求的优先级,接收优先级最高的数据访问请求拆分后的数据访问命令,并基于该数据访问命令,对SOC的存储资源进行数据访问。
    在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
    SOC数据总线为每个HAC-IF均提供一个访问接口,当HAC的数量增加时, SOC数据总线需要提供的访问接口也会增加;并且在每个HAC-IF内均需布置相同的拆分数据访问请求的逻辑和协议转化的逻辑,资源浪费较多。
    发明内容
    为了解决现有技术的问题,本发明实施例提供了一种数据访问方法及设备。所述技术方案如下:
    第一方面,提供了一种数据访问方法,所述方法包括:
    在每个时钟周期,当检测到多个硬件加速器HAC通过与所述多个HAC分别连接的硬件加速器接口HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求;
    基于接收的数据访问请求的类型,将所述接收的数据访问请求存储在逻辑主接口LMI的数据队列中;
    基于所述LMI的数据队列中的目标数据访问请求携带的数据量、所述目标数据访问请求携带的起始地址和片上系统SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。
    结合第一方面,在上述第一方面的第一种可能的实现方式中,所述基于接收的数据访问请求的类型,将所述接收的数据访问请求存储在逻辑主接口LMI的数据队列中,包括:
    如果接收的数据访问请求的类型为数据写请求,则将所述接收的数据访问请求存储在LMI的第一数据队列中最后一个数据访问请求之后,所述第一数据队列用于存储数据写请求;
    如果接收的数据访问请求的类型为数据读请求,则将所述接收的数据访问请求存储在所述LMI的第二数据队列中最后一个数据访问请求之后,所述第二数据队列用于存储数据读请求。
    结合第一方面,在上述第一方面的第二种可能的实现方式中,所述基于所述LMI的数据队列中的目标数据访问请求携带的数据量、所述目标数据访问请 求携带的起始地址和片上系统SOC数据总线的最大数据量,对SOC的存储资源进行数据访问,包括:
    从LMI的第一数据队列中,获取目标数据写请求,以及从所述LMI的第二数据队列中,获取目标数据读请求;
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中;
    基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据。
    结合第一方面的第二种可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中,包括:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,并将所述子数据写请求进行协议转化,得到数据写命令,所述数据写命令携带第一子数据量和第一子起始地址;
    当所述第一次数达到第二指定次数时,从所述目标HAC中获取所述第二指定次数的下一次写数据的过程中,将所述数据写命令发送给所述SOC数据总线,并将所述第一次数清零,重新统计第一次数,返回上一步骤,直至将所述目标 数据写请求拆分完毕;
    当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC中获取所述数据写命令的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。
    结合第一方面的第二种可能的实现方式,在上述第一方面的第四种可能的实现方式中,所述基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中,包括:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,将所述子数据写请求进行协议转化,得到数据写命令,返回本步骤,直至将所述目标数据写请求拆分完毕;
    将所述数据写命令发送给所述SOC数据总线,所述数据写命令携带第一子数据量和第一子起始地址;
    当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC中获取的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。
    结合第一方面的第三种可能的实现方式或者第一方面的第四种可能的实现方式,在上述第一方面的第五种可能的实现方式中,所述基于所述目标数据写 请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,包括:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,所述芯片数据总线为与所述LMI连接的数据总线;
    基于所述获取次数,向所述目标HAC发送指示信息,所述指示信息用于指示所述目标HAC将所述目标数据写请求的写数据划分为所述获取次数次进行发送;
    接收所述目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一次数。
    结合第一方面的第二种可能的实现方式、第一方面的第三种可能的实现方式或者第一方面的第四种可能的实现方式,在上述第一方面的第六种可能的实现方式中,所述基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据,包括:
    基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求,并将所述子数据读请求进行协议转化,得到数据读命令;
    将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    接收所述SOC的存储资源通过所述SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数;
    当所述第二次数达到第三指定次数时,接收所述SOC的存储资源通过所述 SOC数据总线发送所述第三指定次数的下一次读数据的过程中,基于所述第二数据量、所述第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出下一个子数据读请求,并将所述下一个子数据读请求进行协议转化,得到下一个数据读命令;
    当所述第二次数达到第四指定次数时,接收所述SOC的存储资源通过所述SOC数据总线发送所述第四指定次数的下一次读数据的过程中,将所述下一个数据读命令发送给所述SOC数据总线,并将所述第二次数清零,重新统计第二次数,返回上一步骤,直至将所述目标数据读请求拆分完毕。
    结合第一方面的第二种可能的实现方式、第一方面的第三种可能的实现方式或者第一方面的第四种可能的实现方式,在上述第一方面的第七种可能的实现方式中,所述基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据,包括:
    基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求;
    将所述子数据读请求进行协议转化,得到数据读命令,返回上一步骤,直至将所述目标数据读请求拆分完毕;
    将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    逐次接收所述SOC的存储资源通过所述SOC数据总线发送的读数据。
    结合第一方面,在上述第一方面的第八种可能的实现方式中,所述方法还包括:
    对于每个HAC,当向所述SOC数据总线发送属于所述HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数,以 及对发送的数据读命令个数进行统计,得到第二命令个数;
    当所述第一命令个数等于第一个数阈值时,停止接收所述HAC发送的类型为数据写请求的数据访问请求,直至所述第一命令个数小于所述第一个数阈值;
    当所述第二命令个数等于第二个数阈值时,停止接收所述HAC发送的类型为数据读请求的数据访问请求,直至所述第二命令个数小于所述第二个数阈值。
    第二方面,提供了一种数据访问设备,所述设备包括:
    接收模块,用于在每个时钟周期,当检测到多个硬件加速器HAC通过与所述多个HAC分别连接的硬件加速器接口HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求;
    存储模块,用于基于接收的数据访问请求的类型,将所述接收的数据访问请求存储在逻辑主接口LMI的数据队列中;
    数据访问模块,用于基于所述LMI的数据队列中的目标数据访问请求携带的数据量、所述目标数据访问请求携带的起始地址和片上系统SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。
    结合第二方面,在上述第二方面的第一种可能的实现方式中,所述存储模块包括:
    存储单元,用于如果接收的数据访问请求的类型为数据写请求,则将所述接收的数据访问请求存储在LMI的第一数据队列中最后一个数据访问请求之后,所述第一数据队列用于存储数据写请求;
    所述存储单元,还用于如果接收的数据访问请求的类型为数据读请求,则将所述接收的数据访问请求存储在所述LMI的第二数据队列中最后一个数据访问请求之后,所述第二数据队列用于存储数据读请求。
    结合第二方面,在上述第二方面的第二种可能的实现方式中,所述数据访问模块包括:
    获取单元,用于从LMI的第一数据队列中,获取目标数据写请求,以及从 所述LMI的第二数据队列中,获取目标数据读请求;
    写入单元,用于基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将所述目标数据写请求的写数据写入SOC的存储资源中;
    读取单元,用于基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述SOC的存储资源中读取所述目标数据读请求的读数据。
    结合第二方面的第二种可能的实现方式,在上述第二方面的第三种可能的实现方式中,所述写入单元包括:
    获取子单元,用于基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    拆分子单元,用于当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,并将所述子数据写请求进行协议转化,得到数据写命令,所述数据写命令携带第一子数据量和第一子起始地址;
    发送子单元,用于当所述第一次数达到第二指定次数时,从所述目标HAC中获取所述第二指定次数的下一次写数据的过程中,将所述数据写命令发送给所述SOC数据总线,并将所述第一次数清零,重新统计第一次数,返回上一拆分子单元,直至将所述目标数据写请求拆分完毕;
    所述发送子单元,还用于当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC中获取所述数据写命令的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。
    结合第二方面的第二种可能的实现方式,在上述第二方面的第四种可能的实现方式中,所述写入单元包括:
    获取子单元,用于基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,所述目标HAC为发送所述目标数据写请求的HAC;
    拆分子单元,用于当所述第一次数达到第一指定次数时,从所述目标HAC中获取所述第一指定次数的下一次写数据的过程中,基于所述第一数据量、所述第一起始地址和所述SOC数据总线的最大数据量,从所述目标数据写请求中拆分出一个子数据写请求,将所述子数据写请求进行协议转化,得到数据写命令,返回本拆分子单元,直至将所述目标数据写请求拆分完毕;
    发送子单元,用于将所述数据写命令发送给所述SOC数据总线,所述数据写命令携带第一子数据量和第一子起始地址;
    所述发送子单元,还用于当接收到所述SOC数据总线返回的数据写响应时,将多次从所述目标HAC中获取的写数据,逐次发送给所述SOC数据总线,使所述SOC数据总线按照所述第一子数据量和所述第一子起始地址,将接收的写数据写入SOC的存储资源中。
    结合第二方面的第三种可能的实现方式或者第二方面的第四种可能的实现方式,在上述第二方面的第五种可能的实现方式中,
    所述获取子单元,具体用于:
    基于所述目标数据写请求携带的第一数据量、所述目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,所述芯片数据总线为与所述LMI连接的数据总线;
    基于所述获取次数,向所述目标HAC发送指示信息,所述指示信息用于指示所述目标HAC将所述目标数据写请求的写数据划分为所述获取次数次进行发送;
    接收所述目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一次数。
    结合第二方面的第二种可能的实现方式、第二方面的第三种可能的实现方式或者第二方面的第四种可能的实现方式,在上述第二方面的第六种可能的实现方式中,所述读取单元包括:
    拆分子单元,用于基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求,并将所述子数据读请求进行协议转化,得到数据读命令;
    发送子单元,用于将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    接收子单元,用于接收所述SOC的存储资源通过所述SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数;
    所述拆分子单元,还用于当所述第二次数达到第三指定次数时,接收所述SOC的存储资源通过所述SOC数据总线发送所述第三指定次数的下一次读数据的过程中,基于所述第二数据量、所述第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出下一个子数据读请求,并将所述下一个子数据读请求进行协议转化,得到下一个数据读命令;
    所述发送子单元,还用于当所述第二次数达到第四指定次数时,接收所述SOC的存储资源通过所述SOC数据总线发送所述第四指定次数的下一次读数据的过程中,将所述下一个数据读命令发送给所述SOC数据总线,并将所述第二次数清零,重新统计第二次数,返回上一拆分子单元,直至将所述目标数据读请求拆分完毕。
    结合第二方面的第二种可能的实现方式、第二方面的第三种可能的实现方式或者第二方面的第四种可能的实现方式,在上述第二方面的第七种可能的实 现方式中,所述读取单元包括:
    拆分子单元,用于基于所述目标数据读请求携带的第二数据量、所述目标数据读请求携带的第二起始地址和所述SOC数据总线的最大数据量,从所述目标数据读请求中拆分出一个子数据读请求;
    协议转化子单元,用于将所述子数据读请求进行协议转化,得到数据读命令,返回上一拆分子单元,直至将所述目标数据读请求拆分完毕;
    发送子单元,用于将所述数据读命令发送给所述SOC数据总线,使所述SOC数据总线将所述数据读命令发送给SOC的存储资源,所述数据读命令中携带第二子数据量和第二子起始地址;
    接收子单元,用于逐次接收所述SOC的存储资源通过所述SOC数据总线发送的读数据。
    结合第二方面,在上述第二方面的第八种可能的实现方式中,所述设备还包括:
    统计模块,用于对于每个HAC,当向所述SOC数据总线发送属于所述HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数,以及对发送的数据读命令个数进行统计,得到第二命令个数;
    停止模块,用于当所述第一命令个数等于第一个数阈值时,停止接收所述HAC发送的类型为数据写请求的数据访问请求,直至所述第一命令个数小于所述第一个数阈值;
    所述停止模块,还用于当所述第二命令个数等于第二个数阈值时,停止接收所述HAC发送的类型为数据读请求的数据访问请求,直至所述第二命令个数小于所述第二个数阈值。
    本发明实施例提供的技术方案带来的有益效果是:在本发明实施例中,通过LMI对HAC发送的数据访问请求进行仲裁、拆分以及协议转化,节省了拆分逻辑和协议转化逻辑的重复资源,并且LMI与SOC数据总线连接,SOC数据总线只需为LMI提供访问接口,无需为每个HAC-IF提供数据访问接口,减 少了SOC数据总线的访问接口数量。
    附图说明
    为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
    图1是现有技术提供的一种数据访问系统架构图;
    图2是本发明实施例提供的一种数据访问系统架构图;
    图3是本发明实施例提供的一种数据访问方法流程图;
    图4是本发明实施例提供的另一种数据访问方法流程图;
    图5是本发明实施例提供的一种数据访问设备结构示意图;
    图6是本发明实施例提供的另一种数据访问设备结构示意图。
    具体实施方式
    为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
    图2是本发明实施例提供的一种数据访问系统架构图。参见图2,该数据访问系统包括多个HAC、多个HAC-IF、LMI(英文:Logic Master Interface;中文:逻辑主接口)、SOC数据总线和SOC的多个存储资源。该多个HAC的输出端与多个HAC-IF的输入端分别连接,且一个HAC可以连接至少一个HAC-IF,每个HAC-IF的输出端分别与LMI的输入端连接,LMI的输出端与SOC数据总线的输入端连接,SOC数据总线的输出端与该多个存储资源分别连接。该多个HAC用于对HAC执行业务过程中产生的任务进行调度,并生成对应的第一数据访问请求;该多个HAC-IF用于将HAC生成的第一数据访问请求发送给LMI,且该多个HAC-IF的输出端接口相同,也即是,LMI只需提供多个相同的接口与 多个HAC-IF连接,LMI用于对该多个HAC-IF发送的第一数据访问请求进行仲裁、拆分和协议转化,从而将协议转化后的数据访问命令发送给SOC数据总线;SOC数据总线将接收的数据访问命令发送给对应的存储资源,实现对SOC的存储资源进行访问。
    图3是本发明实施例提供的一种数据访问方法流程图。参见图3,该方法包括:
    步骤301:在每个时钟周期,当检测到多个HAC通过与该多个HAC分别连接的HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求。
    步骤302:基于接收的数据访问请求的类型,将接收的数据访问请求存储在LMI的数据队列中。
    步骤303:基于LMI的数据队列中的目标数据访问请求携带的数据量、目标数据访问请求携带的起始地址和SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。
    在本发明实施例中,通过LMI对HAC发送的数据访问请求进行仲裁、拆分以及协议转化,节省了拆分逻辑和协议转化逻辑的重复资源,并且LMI与SOC数据总线连接,SOC数据总线只需为LMI提供访问接口,无需为每个HAC-IF提供数据访问接口,减少了SOC数据总线的访问接口数量。
    可选地,基于接收的数据访问请求的类型,将接收的数据访问请求存储在LMI的数据队列中,包括:
    如果接收的数据访问请求的类型为数据写请求,则将接收的数据访问请求存储在LMI的第一数据队列中最后一个数据访问请求之后,第一数据队列用于存储数据写请求;
    如果接收的数据访问请求的类型为数据读请求,则将接收的数据访问请求存储在LMI的第二数据队列中最后一个数据访问请求之后,第二数据队列用于存储数据读请求。
    可选地,基于LMI的数据队列中的目标数据访问请求携带的数据量、目标数据访问请求携带的起始地址和SOC数据总线的最大数据量,对SOC的存储资源进行数据访问,包括:
    从LMI的第一数据队列中,获取目标数据写请求,以及从LMI的第二数据队列中,获取目标数据读请求;
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将目标数据写请求的写数据写入SOC的存储资源中;
    基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从SOC的存储资源中读取目标数据读请求的读数据。
    可选地,基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将目标数据写请求的写数据写入SOC的存储资源中,包括:
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送目标数据写请求的HAC;
    当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数据量,从目标数据写请求中拆分出一个子数据写请求,并将该子数据写请求进行协议转化,得到数据写命令,该数据写命令携带第一子数据量和第一子起始地址;
    当第一次数达到第二指定次数时,从目标HAC中获取第二指定次数的下一次写数据的过程中,将该数据写命令发送给SOC数据总线,并将第一次数清零,重新统计第一次数,返回上一步骤,直至将目标数据写请求拆分完毕;
    当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取 数据写命令的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    可选地,基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将目标数据写请求的写数据写入SOC的存储资源中,包括:
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送目标数据写请求的HAC;
    当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数据量,从目标数据写请求中拆分出一个子数据写请求,将该子数据写请求进行协议转化,得到数据写命令,返回本步骤,直至将目标数据写请求拆分完毕;
    将该数据写命令发送给SOC数据总线,该数据写命令携带第一子数据量和第一子起始地址;
    当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    可选地,基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,包括:
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,该芯片数据总线为与LMI连接的数据总线;
    基于该获取次数,向目标HAC发送指示信息,该指示信息用于指示目标HAC将目标数据写请求的写数据划分为获取次数次进行发送;
    接收目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一 次数。
    可选地,基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从SOC的存储资源中读取目标数据读请求的读数据,包括:
    基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求,并将该子数据读请求进行协议转化,得到数据读命令;
    将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址;
    接收SOC的存储资源通过SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数;
    当第二次数达到第三指定次数时,接收SOC的存储资源通过SOC数据总线发送该第三指定次数的下一次读数据的过程中,基于第二数据量、第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出下一个子数据读请求,并将下一个子数据读请求进行协议转化,得到下一个数据读命令;
    当第二次数达到第四指定次数时,接收SOC的存储资源通过SOC数据总线发送第四指定次数的下一次读数据的过程中,将该下一个数据读命令发送给SOC数据总线,并将第二次数清零,重新统计第二次数,返回上一步骤,直至将目标数据读请求拆分完毕。
    可选地,基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从SOC的存储资源中读取目标数据读请求的读数据,包括:
    基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求;
    将该子数据读请求进行协议转化,得到数据读命令,返回上一步骤,直至 将目标数据读请求拆分完毕;
    将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址;
    逐次接收SOC的存储资源通过SOC数据总线发送的读数据。
    可选地,该方法还包括:
    对于每个HAC,当向SOC数据总线发送属于该HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数,以及对发送的数据读命令个数进行统计,得到第二命令个数;
    当第一命令个数等于第一个数阈值时,停止接收该HAC发送的类型为数据写请求的数据访问请求,直至第一命令个数小于第一个数阈值;
    当第二命令个数等于第二个数阈值时,停止接收该HAC发送的类型为数据读请求的数据访问请求,直至第二命令个数小于第二个数阈值。
    上述所有可选技术方案,均可按照任意结合形成本发明的可选实施例,本发明实施例对此不再一一赘述。
    图4是本发明实施例提供的一种数据访问方法流程图。参见图4,该方法包括:
    步骤401:对于每个HAC,当该HAC生成数据访问请求时,将该数据访问请求通过与该HAC连接的HAC-IF发送给LMI。
    具体地,对于每个HAC,当该HAC生成数据访问请求时,如果与该HAC连接的HAC-IF为多个,则该HAC可以从与其连接的多个HAC-IF中,选择一个处于空闲状态的HAC-IF,之后,将生成的数据访问请求发送给选择的HAC-IF。当选择的HAC-IF接收到该数据访问请求时,将该数据访问请求发送给LMI。
    在本发明实施例中,一个HAC可以连接多个HAC-IF,该HAC生成的数据访问请求可以通过该多个HAC-IF发送给LMI,提升了系统的并行调度性能。并且通过LMI连接HAC与SOC数据总线,实现了HAC与SOC数据总线的解耦。
    步骤402:LMI在每个时钟周期,当检测到多个HAC通过与该多个HAC分别连接的HAC-IF发送的数据访问请求时,基于该多个数据访问请求的优先级,接收优先级最高的数据访问请求。
    具体地,在每个时钟周期,当LMI检测到多个HAC通过与该多个HAC分别连接的HAC-IF发送的数据访问请求时,LMI获取该多个数据访问请求的优先级,从该多个数据访问请求中,选择优先级最高的数据访问请求,并接收优先级最高的数据访问请求。
    需要说明的是,在当前时钟周期,LMI未接收的数据访问请求,在下一个时钟周期,LMI还可以基于上述仲裁的方法,接收优先级最高的数据访问请求。其中,在本发明实施例中,LMI在每个时钟周期,选择并接收优先级最高的数据访问请求的方法可以称为LMI对多个数据访问请求的仲裁。
    比如,在第一时钟周期,LMI检测到3个数据访问请求,分别为数据访问请求1、数据访问请求2和数据访问请求3,数据访问请求1的优先级大于数据访问请求2的优先级,数据访问请求2的优先级大于数据访问请求3的优先级,因此,LMI在第一时钟周期选择并接收数据访问请求1。在第二时钟周期,如果没有新的HAC生成数据访问请求,则LMI会检测到数据访问请求2和数据访问请求3,由于数据访问请求2的优先级大于数据访问请求3的优先级,因此,在第二时钟周期,LMI会选择并接收数据访问请求2。
    需要说明的是,当HAC-IF对数据访问请求进行拆分和协议转化、SOC数据总线对数据访问命令进行仲裁时,如果该HAC-IF发送的数据访问命令所属的数据访问请求的优先级最高,当HAC-IF与SOC数据总线之间的通道出现异常时,SOC数据总线在当前时刻就无法处理该HAC-IF发送的数据访问命令,进而会影响后续其他HAC-IF发送的数据访问命令的处理,需要对HAC-IF、HAC、数据总线等都进行复位。而在本发明实施例中,LMI接收HAC发送的数据访问请求,并将接收的数据访问请求存储在LMI的数据队列中,如此,当HAC-IF与LMI之间的通道出现故障时,LMI会继续将数据队列中存储的该HAC发送 的数据访问请求进行处理,不会影响与该HAC的数据访问请求处于同一数据队列中的其他数据访问请求的处理,支持单个HAC出现异常可以自恢复,不会影响其余HAC对SOC存储资源的访问,此时,需要对出现异常的HAC进行复位,无需对LMI、SOC数据总线等进行复位。
    另外,将数据访问请求存储在LMI的数据队列中,如此,HAC无需等上一个数据访问请求处理完毕之后,才发送下一个数据访问请求,只需确定上一个数据访问请求被LMI接收并存储在数据队列中,就可以发送下一个数据访问请求,支持HAC连续地发送数据访问请求,最大化地利用LMI与HAC之间的数据总线,提高总线利用率。
    步骤403:LMI基于接收的数据访问请求的类型,将接收的数据访问请求存储在LMI的数据队列中,LMI包括第一数据队列和第二数据队列,第一数据队列用于存储数据写请求,第二数据队列用于存储数据读请求。
    具体地,如果接收的数据访问请求的类型为数据写请求,则LMI将接收的数据访问请求存储在第一数据队列中最后一个数据访问请求之后;如果接收的数据访问请求的类型为数据读请求,则将接收的数据访问请求存储在第二数据队列中最后一个数据访问请求之后。
    需要说明的是,在本发明实施例中,第一数据队列和第二数据队列均可以为先入先出的数据队列,比如FIFO(英文:First Input First Output;中文:先入先出),本发明实施例对此不做具体限定。另外,在本发明实施例中,每个HAC生成的数据访问请求之间互不影响,因此,可以将数据读请求存储在一个数据队列中,将数据写请求存储在另一个数据队列中,且该两个数据队列可以相互独立,互不影响,进而可以并行地访问SOC的存储资源。
    通过上述401-403的步骤,LMI可以在每个时钟周期接收一个优先级最高的数据访问请求,并存储在LMI的数据队列中。并且在LMI接收优先级最高的数据访问请求的同时,还可以根据如下404-411的步骤,对LMI的数据队列中存储的数据访问请求进行并行处理。另外,第一数据队列中存储的数据访问请求 和第二数据队列中存储的数据访问请求之间互不影响,因此,可以通过如下405-408的步骤是对第一数据队列中存储的数据访问请求进行处理,通过如下409-411的步骤对第二数据队列中存储的数据访问请求进行处理,且405-408的步骤可以与409-411的步骤并行执行。
    步骤404:LMI从第一数据队列中,获取目标数据写请求,以及从第二数据队列中,获取目标数据读请求。
    具体地,LMI从第一数据队列中,选择排列在第一位的数据访问请求,将选择的数据访问请求确定为目标数据写请求,以及从第二数据队列中,选择排列在第一位的数据访问请求,将选择的数据访问请求确定为目标数据读请求。
    步骤405:LMI基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送目标数据写请求的HAC。
    具体地,LMI基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,芯片数据总线为与LMI连接的数据总线。基于该获取次数,向目标HAC发送指示信息,该指示信息用于指示目标HAC将目标数据写请求的写数据划分为获取次数次进行发送。当目标HAC接收到该指示信息时,目标HAC基于该获取次数,将目标数据写请求的写数据进行划分,得到多个写数据块,并将划分后得到的多个写数据块,在多个连续的时钟周期,分别发送给LMI。LMI接收目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一次数。
    LMI基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数的具体操作可以为:LMI基于目标数据写请求携带的第一起始地址,判断第一起始地址与目标HAC中存储写数据的起始存储地址是否地址对齐,如果地址对齐,则将目标数据写请求携带的第一数据量除以芯片数据总线的位宽,得到获取次 数。如果地址不对齐,则将芯片数据总线的位宽减去第一起始地址对应的比特,得到获取数据量,之后,将第一数据量除以获取数据量,将得到的数值向上取整,得到获取次数。
    比如,芯片数据总线的位宽为16bit,第一数据量为48bit,如果第一起始地址为0bit对应位置,目标HAC中存储写数据的起始存储地址为0bit对应位置,那么两者地址对齐。此时,将第一数据量48bit除以芯片数据总线的位宽16bit,得到获取次数为3。如果第一起始地址为1bit对应位置,目标HAC中存储写数据的起始存储地址为0bit对应位置,那么两者地址不对齐,将芯片数据总线的位宽16bit减去第一起始地址对应的1bit,得到获取数据量为15bit,之后,将第一数据量48bit除以获取数据量15bit,得到的数值为3.2,将3.2向上取整,得到获取次数为4。
    再比如,获取次数为3,则目标HAC将目标数据写请求的写数据进行划分,得到3个数据块,并在3个连续的时钟周期,分别将该3个数据块发送给LMI,使LMI在3个时钟周期,分别从目标HAC中获取一次写数据。
    需要说明的是,与LMI连接的数据总线包括LMI与SOC数据总线之间的数据总线,还包括LMI与HAC-IF连接的数据总线,且该两个数据总线的位宽相同。另外,判断地址是否对齐的方法可以参考相关技术,并且当地址对齐时,总线每次能传输多少的数据量,地址不对齐时,总线每次又能传输多少的数据量都可以参考相关技术。
    步骤406:当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数据量,从目标数据写请求中拆分出一个子数据写请求,并将该子数据写请求进行协议转化,得到数据写命令,该数据写命令携带第一子数据量和第一子起始地址。
    具体地,将第一次数与第一指定次数进行比较,当第一次数等于第一指定次数时,接收目标HAC发送第一指定次数的下一次写数据的过程中,基于SOC 数据总线的最大数据量,将第一数据量进行划分,得到多个第一子数据量,且多个第一子数据量小于或等于SOC数据总线的最大数据量。获取第一子起始地址,生成子数据写请求,该子数据写请求携带第一子数据量和第一子起始地址。将该子数据写请求进行协议转化,得到数据写命令,该数据写命令携带第一子数据量和第一子起始地址。
    获取第一子起始地址包括:对于第一个拆分出的子数据写请求,该子数据写请求的第一子起始地址为第一起始地址。对于其他子数据写请求,该其他子数据写请求的第一子起始地址为上一个子数据写请求的结束地址之后连续的地址。也即是,基于第一子数据量和上一个拆分的子数据写请求携带的第一子起始地址,计算当前拆分的子数据写请求的第一子起始地址,其他子数据写请求为第一个拆分出的子数据写请求之后拆分出的子数据写请求。另外,基于第一子数据量和上一个拆分的子数据写请求携带的第一子起始地址,计算当前拆分的子数据写请求的第一子起始地址的方法可以参考现有方式,本发明实施例对此不做详细阐述。
    在本发明实施例中,从目标HAC中获取写数据时,存在数据反馈的延迟时间,并且从目标数据写请求中拆分子数据写请求只需一个时钟周期,因此,优选地,可以设置第一指定次数为每个子数据写请求的写数据获取次数减去2,也即是,第一子数据量对应的写数据获取次数减去2。这样,在获取当前子数据写请求的倒数第二次写数据的过程中,可以从目标数据写请求中拆分出当前子数据写请求,有效利用数据反馈的延迟时间,提高了数据访问效率。
    当然,第一指定次数还可以为每个子数据写请求的写数据获取次数减去3、4等,且第一指定次数大于1即可,本发明实施例对此不做具体限定。
    需要说明的是,在本发明实施例中,SOC数据总线单次访问的数据量一定,因此,在本发明实施例中,如果目标数据写请求携带的第一数据量大于SOC数据总线的最大数据量时,需要对目标数据写请求进行拆分,使拆分后的子数据写请求携带的第一子数据量小于或等于SOC数据总线单次访问的最大数据量。 而为了尽可能地提高数据访问效率,可以使第一子数据量尽可能地等于SOC数据总线单次访问的最大数据量。
    步骤407:当第一次数达到第二指定次数时,从目标HAC中获取第二指定次数的下一次写数据的过程中,将该数据写命令发送给SOC数据总线,并将第一次数清零,重新统计第一次数,返回步骤406,直至将目标数据写请求拆分完毕。
    具体地,将第一次数与第二指定次数进行比较,当第一次数等于第二指定次数时,接收目标HAC发送的第二指定次数的下一次写数据的过程中,将该数据写命令发送给SOC数据总线,使SOC数据总线将该数据写命令发送给SOC的存储资源,并将第一次数清零。当再接收到目标HAC发送的写数据时,重新对接收写数据的次数进行统计,也即是,重新统计第一次数,返回步骤406,直至将目标数据写请求拆分完毕。
    在本发明实施例中,从目标HAC中获取写数据时,存在数据反馈的延迟时间,并且将数据写命令发送给SOC数据总线只需一个时钟周期,因此,优选地,可以设置第二指定次数为每个子数据写请求的写数据获取次数减去1,也即是,第一子数据量对应的写数据获取次数减去1。这样,在获取当前子数据访问请求的最后一次写数据的过程中,可以将该数据写命令发送给SOC数据总线,有效利用数据反馈的延迟时间,提高了数据访问效率。
    步骤408:当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取该数据写命令的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中,结束操作。
    具体地,当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取该数据写命令的写数据,逐次发送给SOC数据总线,使SOC数据总线将该写数据发送给SOC的存储资源,由SOC的存储资源按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    在本发明实施例中,通过上述405-408的步骤,在下一个数据写命令发送之前,预先从目标数据写请求中拆分该下一个数据写命令,并且在上一个数据写命令的最后一次写数据发送的同时,将下一个数据写命令发送给SOC数据总线,使写操作实现流水操作,进而保证SOC数据总线的有效利用,并且通过此方式,还可以防止写数据未发送出去,过多的数据写命令无效占住SOC存储资源的端口,导致其余总线的访问者无法访问。
    可选地,在本发明实施例中,不仅可以通过上述405-408的步骤,将目标数据写请求进行拆分、协议转化等操作,实现对SOC的存储资源的访问,还可以通过如下(1)-(4)的步骤来实现,包括:
    (1)、基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送目标数据写请求的HAC。
    本步骤与上述步骤405相同,在此不再进行赘述。
    (2)、当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数据量,从目标数据写请求中拆分出一个子数据写请求,将该子数据写请求进行协议转化,得到数据写命令,返回本步骤,直至将目标数据写请求拆分完毕。
    在本发明实施例中,通过步骤(2),可以在连续的多个时钟周期中,对目标数据写请求进行拆分,得到多个子数据写请求,从而对该多个子数据写请求进行协议转化,得到多个数据写命令。
    (3)、将该数据写命令发送给SOC数据总线,该数据写命令携带第一子数据量和第一子起始地址。
    (4)、当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    对目标数据写请求进行拆分的过程中,每得到一个数据写命令,可以在拆分下一个子数据写请求的过程中,将该数据写命令发送给SOC数据总线,如此,将多个数据写命令在多个时钟周期,连续地发送给SOC数据总线,从而将该多个数据写命令的写数据发送给SOC数据总线。
    步骤409:LMI基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求,并将该子数据读请求进行协议转化,得到数据读命令。
    具体地,基于SOC数据总线的最大数据量,将目标数据读请求携带的第二数据量进行划分,得到多个第二子数据量,且多个第二子数据量小于或等于SOC数据总线单次访问的最大数据量。获取第二子起始地址,生成子数据读请求,该子数据读请求携带第二子数据量和第二子起始地址。将该子数据读请求进行协议转化,得到数据读命令。
    获取第二子起始地址包括:对于第一个拆分出的子数据读请求,该子数据读请求的第二子起始地址为第二起始地址。对于其他子数据读请求,该其他子数据读请求的第二子起始地址为上一个子数据读请求的结束地址之后连续的地址。也即是,基于第二子数据量和上一个拆分的子数据读请求携带的第二子起始地址,计算当前拆分的子数据读请求的第二子起始地址,其他子数据读请求为第一个拆分出的子数据读请求之后拆分出的子数据读请求。而基于第二子数据量和上一个拆分的子数据读请求携带的第二子起始地址,计算当前拆分的子数据读请求的第二子起始地址的方法可以参考现有的方法,本发明实施例对此不做详细阐述。
    在本发明实施例中,从SOC的存储资源中获取读数据时,存在数据反馈的延迟时间,并且从目标数据读请求中拆分子数据读请求只需一个时钟周期,因此,优选地,可以设置第三指定次数为每个子数据读请求的读数据获取次数减去2,也即是,第二子数据量对应的读数据获取次数减去2。这样,在获取当前子数据读请求的倒数第二次读数据的过程中,可以从目标数据读请求中拆分出 下一个子数据读请求,有效利用数据反馈的延迟时间,提高了数据访问效率。
    当然,第三指定次数还可以为每个子数据读请求的读数据获取次数减去3、4等,且第三指定次数大于1即可,本发明实施例对此不做具体限定。
    需要说明的是,在本发明实施例中,SOC数据总线单次访问的数据量一定,因此,在本发明实施例中,如果目标数据读请求携带的第二数据量大于SOC数据总线的最大数据量时,需要对目标数据读请求进行拆分,使拆分后的子数据读请求携带的第二子数据量小于或等于SOC数据总线单次访问的最大数据量。而为了尽可能地提高数据访问效率,可以使第二子数据量尽可能地等于SOC数据总线单次访问的最大数据量。
    步骤410:LMI将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址。
    具体地,将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址。当SOC的存储资源接收到该SOC数据总线发送的数据读命令时,可以根据该数据读命令携带的第二子数据量和第二子起始地址,从SOC的存储资源中,获取该数据读命令的读数据。SOC的存储资源基于第二子数据量、第二子起始地址和芯片数据总线的位宽,计算将该读数据发送给LMI的发送次数。基于该发送次数,将该读数据进行划分,得到多个读数据块,将划分得到的多个读数据块,在多个连续的时钟周期,通过SOC数据总线分别发送给LMI。
    SOC的存储资源基于第二子数据量、第二子起始地址和芯片数据总线的位宽,计算将该读数据发送给LMI的发送次数的具体操作可以为:基于第二子起始地址,判断第二子起始地址与SOC的存储资源中存储读数据的起始存储地址是否地址对齐,如果地址对齐,则将第二子数据量除以芯片数据总线的位宽,得到发送次数。如果地址不对齐,则将芯片数据总线的位宽减去第二子起始地址对应的比特,得到发送数据量,之后,将第二子数据量除以发送数据量,将 得到的数值向上取整,得到发送次数。
    步骤411:LMI接收SOC的存储资源通过SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数。
    由于SOC的存储资源是在多个连续的时钟周期,将读数据通过SOC数据总线发送给LMI,因此,LMI接收到读数据时,可以对接收读数据的次数进行统计,得到第二次数。
    步骤412:当第二次数达到第三指定次数时,接收SOC的存储资源通过SOC数据总线发送第三指定次数的下一次读数据的过程中,基于第二数据量、第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出下一个子数据读请求,并将下一个子数据读请求进行协议转化,得到下一个数据读命令。
    在本发明实施例中,接收SOC数据总线发送的读数据时,存在数据反馈的延迟时间,并且从目标数据读请求中拆分子数据读请求只需一个时钟周期,因此,优选地,可以设置第三指定次数为每个子数据读请求的读数据发送次数减去2,也即是,第二子数据量对应的读数据发送次数减去2。这样,在获取当前子数据读请求的倒数第二次读数据的过程中,从目标数据读请求中拆分出下一个的子数据读请求,有效利用数据反馈的延迟时间,提高了数据访问效率。
    步骤413:当第二次数达到第四指定次数时,接收SOC的存储资源通过SOC数据总线发送第四指定次数的下一次读数据的过程中,将下一个数据读命令发送给SOC数据总线,并将第二次数清零,重新统计第二次数,返回步骤412,直至将目标数据读请求拆分完毕。
    具体地,将第二次数与第四指定次数进行比较,当第二次数等于第四指定次数时,接收SOC的存储资源通过SOC数据总线发送第四指定次数的下一次读数据的过程中,将下一个数据读命令发送给SOC数据总线,使SOC数据总线将下一个数据读命令发送给SOC的存储资源,并将第二次数清零。当再接收到SOC的存储资源通过SOC数据总线发送的读数据时,重新对接收读数据的次数进行统计,也即是,重新统计第二次数,返回步骤412,直至将目标数据读请求拆分 完毕。
    在本发明实施例中,接收SOC的存储资源通过SOC数据总线发送的读数据时,存在数据反馈的延迟时间,并且将数据读命令通过SOC数据总线发送给SOC的存储资源只需一个时钟周期,因此,优选地,可以设置第四指定次数为每个子数据读请求的读数据发送次数减去1,也即是,第二子数据量对应的读数据发送次数减去1。这样,在获取当前子数据读请求的最后一次读数据的过程中,将下一个数据读命令通过SOC数据总线发送给SOC的存储资源,有效利用数据反馈的延迟时间,提高了数据访问效率。
    在本发明实施例中,通过上述409-413的步骤,在下一个数据读命令发送之前,预先从目标数据读请求中拆分该下一个数据读命令,并且在上一个数据读命令的最后一次读数据接收的同时,将下一个数据读命令发送给SOC数据总线,使读操作也实现流水操作,进而保证SOC数据总线的有效利用,并且通过此方式,还可以防止读数据未接收到,过多的数据读命令无效占住SOC存储资源的端口,导致其余总线的访问者无法访问。
    可选地,在本发明实施例中,不仅可以通过上述409-413的步骤,将目标数据读请求进行拆分、协议转化等操作,实现对SOC的存储资源的访问,还可以通过如下(1)-(4)的步骤来实现,包括:
    (1)、基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求。
    本步骤与上述步骤409相同,在此不再进行赘述。
    (2)、将该子数据读请求进行协议转化,得到数据读命令,返回步骤(1),直至将目标数据读请求拆分完毕。
    在本发明实施例中,通过步骤(1)和(2),可以在连续的多个时钟周期中,对目标数据读请求进行拆分,得到多个子数据读请求,从而对该多个子数据读请求进行协议转化,得到多个数据读命令。
    (3)、将数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址。
    (4)、逐次接收SOC的存储资源通过SOC数据总线发送的读数据。
    对目标数据读请求进行拆分的过程中,每得到一个数据读命令,可以在拆分下一个子数据读请求的过程中,将该数据读命令发送给SOC数据总线,如此,将多个数据读命令在多个时钟周期,连续地发送给SOC数据总线,从而从SOC的存储资源中获取该多个数据读命令的读数据。
    需要说明的是,在本发明实施例中,LMI与SOC数据总线连接,如下,SOC数据总线只需为LMI提供一个访问接口即可,减少了SOC数据总线的接口数目,降低了成本,进而也使SOC数据总线接收的命令的维持时序较好。另外,通过LMI对数据访问请求进行拆分和协议转化,也即是,只需在LMI内布置拆分数据访问请求的逻辑和协议转化的逻辑,无需在每个HAC-IF内布置拆分数据访问请求的逻辑和协议转化的逻辑,避免了重复资源的浪费。
    进一步地,对于每个HAC,当向SOC数据总线发送属于该HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数;以及对发送的数据读命令个数进行统计,得到第二命令个数;当第一命令个数等于第一个数阈值时,停止接收该HAC发送的类型为数据写请求的数据访问请求,直至第一命令个数小于第一个数阈值。当第二命令个数等于第二个数阈值时,停止接收该HAC发送的类型为数据读请求的数据访问请求,直至第二命令个数小于第二个数阈值。
    可选地,在本发明实施例中,第一个数阈值和第二个数阈值是事先设置的,且第一个数阈值和第二个数阈值可以相等,也可以不相等,本发明实施例对此不做具体限定。另外,对于不同的HAC,第一个数阈值可以不同,第二个数阈值也可以不同,也即是,不同的HAC可以具有不同的第一个数阈值,也可以具有不同的第二个数阈值,本发明实施例对此同样不做具体限定。
    其中,通过统计HAC发送命令个数,对LMI中接收该HAC发送的数据访问请求的数量进行控制,实现了流量控制,提高了LMI的处理速度,进而也会提高数据访问的速度,并且还防止高优先级的数据访问请求频繁大量地访问SOC的存储资源。
    在本发明实施例中,通过LMI对HAC发送的数据访问请求进行仲裁、拆分以及协议转化,节省了拆分逻辑和协议转化逻辑的重复资源,并且LMI与SOC数据总线连接,SOC数据总线只需为LMI提供访问接口,无需为每个HAC-IF提供数据访问接口,减少了SOC数据总线的访问接口数量。另外,在本发明实施例中,可以并行地对写操作和读操作进行处理,且写操作和读操作可以分别进行流水操作,提高了总线利用率,并且有效利用了数据反馈的延迟时间,提高了数据访问的效率。
    图5是本发明实施例提供的一种数据访问设备结构示意图。参见图5,该设备包括:
    接收模块501,用于在每个时钟周期,当检测到多个HAC通过与该多个HAC分别连接的HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求;
    存储模块502,用于基于接收的数据访问请求的类型,将接收的数据访问请求存储在LMI的数据队列中;
    数据访问模块503,用于基于LMI的数据队列中的目标数据访问请求携带的数据量、目标数据访问请求携带的起始地址和SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。
    可选地,存储模块502包括:
    存储单元,用于如果接收的数据访问请求的类型为数据写请求,则将接收的数据访问请求存储在LMI的第一数据队列中最后一个数据访问请求之后,第一数据队列用于存储数据写请求;
    该存储单元,还用于如果接收的数据访问请求的类型为数据读请求,则将接收的数据访问请求存储在LMI的第二数据队列中最后一个数据访问请求之后,第二数据队列用于存储数据读请求。
    可选地,数据访问模块503包括:
    获取单元,用于从LMI的第一数据队列中,获取目标数据写请求,以及从LMI的第二数据队列中,获取目标数据读请求;
    写入单元,用于基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将目标数据写请求的写数据写入SOC的存储资源中;
    读取单元,用于基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从SOC的存储资源中读取目标数据读请求的读数据。
    可选地,写入单元包括:
    获取子单元,用于基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送该目标数据写请求的HAC;
    拆分子单元,用于当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数据量,从目标数据写请求中拆分出一个子数据写请求,并将该子数据写请求进行协议转化,得到数据写命令,该数据写命令携带第一子数据量和第一子起始地址;
    发送子单元,用于当第一次数达到第二指定次数时,从目标HAC中获取第二指定次数的下一次写数据的过程中,将该数据写命令发送给SOC数据总线,并将第一次数清零,重新统计第一次数,返回上一拆分子单元,直至将目标数据写请求拆分完毕;
    发送子单元,还用于当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取该数据写命令的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    可选地,写入单元包括:
    获取子单元,用于基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送该目标数据写请求的HAC;
    拆分子单元,用于当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数据量,从目标数据写请求中拆分出一个子数据写请求,将该子数据写请求进行协议转化,得到数据写命令,返回本拆分子单元,直至将目标数据写请求拆分完毕;
    发送子单元,用于将该数据写命令发送给SOC数据总线,该数据写命令携带第一子数据量和第一子起始地址;
    发送子单元,还用于当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    可选地,
    获取子单元,具体用于:
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,该芯片数据总线为与LMI连接的数据总线;
    基于该获取次数,向目标HAC发送指示信息,该指示信息用于指示目标HAC将目标数据写请求的写数据划分为获取次数次进行发送;
    接收目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一次数。
    可选地,读取单元包括:
    拆分子单元,用于基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求,并将拆分的子数据读请求进行协议转化,得到数据读命令;
    发送子单元,用于将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址;
    接收子单元,用于接收SOC的存储资源通过SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数;
    拆分子单元,还用于当第二次数达到第三指定次数时,接收SOC的存储资源通过SOC数据总线发送第三指定次数的下一次读数据的过程中,基于第二数据量、第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出下一个子数据读请求,并将下一个子数据读请求进行协议转化,得到下一个数据读命令;
    发送子单元,还用于当第二次数达到第四指定次数时,接收SOC的存储资源通过SOC数据总线发送第四指定次数的下一次读数据的过程中,将下一个数据读命令发送给SOC数据总线,并将第二次数清零,重新统计第二次数,返回上一拆分子单元,直至将目标数据读请求拆分完毕。
    可选地,读取单元包括:
    拆分子单元,用于基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求;
    协议转化子单元,用于将拆分的子数据读请求进行协议转化,得到数据读 命令,返回上一拆分子单元,直至将目标数据读请求拆分完毕;
    发送子单元,用于将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址;
    接收子单元,用于逐次接收SOC的存储资源通过SOC数据总线发送的读数据。
    可选地,该设备还包括:
    统计模块,用于对于每个HAC,当向SOC数据总线发送属于该HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数,以及对发送的数据读命令个数进行统计,得到第二命令个数;
    停止模块,用于当第一命令个数等于第一个数阈值时,停止接收该HAC发送的类型为数据写请求的数据访问请求,直至第一命令个数小于第一个数阈值;
    停止模块,还用于当第二命令个数等于第二个数阈值时,停止接收该HAC发送的类型为数据读请求的数据访问请求,直至第二命令个数小于第二个数阈值。
    在本发明实施例中,通过LMI对HAC发送的数据访问请求进行仲裁、拆分以及协议转化,节省了拆分逻辑和协议转化逻辑的重复资源,并且LMI与SOC数据总线连接,SOC数据总线只需为LMI提供访问接口,无需为每个HAC-IF提供数据访问接口,减少了SOC数据总线的访问接口数量。
    图6是本发明实施例提供的一种数据访问设备结构示意图。参见图6,该设备包括:
    接收机601,用于在每个时钟周期,当检测到多个HAC通过与该多个HAC分别连接的HAC-IF发送的数据访问请求时,基于多个数据访问请求的优先级,接收优先级最高的数据访问请求。
    存储器602,用于基于接收的数据访问请求的类型,将接收的数据访问请求 存储在LMI的数据队列中。
    处理器603,还用于基于LMI的数据队列中的目标数据访问请求携带的数据量、目标数据访问请求携带的起始地址和SOC数据总线的最大数据量,对SOC的存储资源进行数据访问。
    可选地,存储器602具体用于:
    如果接收的数据访问请求的类型为数据写请求,则将接收的数据访问请求存储在LMI的第一数据队列中最后一个数据访问请求之后,第一数据队列用于存储数据写请求;
    如果接收的数据访问请求的类型为数据读请求,则将接收的数据访问请求存储在LMI的第二数据队列中最后一个数据访问请求之后,第二数据队列用于存储数据读请求。
    可选地,处理器603具体用于:
    从LMI的第一数据队列中,获取目标数据写请求,以及从LMI的第二数据队列中,获取目标数据读请求;
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和SOC数据总线的最大数据量,将目标数据写请求的写数据写入SOC的存储资源中;
    基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从SOC的存储资源中读取目标数据读请求的读数据。
    可选地,处理器603具体用于:
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送目标数据写请求的HAC;
    当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数 据量,从目标数据写请求中拆分出一个子数据写请求,并将该子数据写请求进行协议转化,得到数据写命令,该数据写命令携带第一子数据量和第一子起始地址;
    当第一次数达到第二指定次数时,从目标HAC中获取第二指定次数的下一次写数据的过程中,将该数据写命令发送给SOC数据总线,并将第一次数清零,重新统计第一次数,返回上一步骤,直至将目标数据写请求拆分完毕;
    当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取数据写命令的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    可选地,处理603具体用于:
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,从目标HAC中获取写数据,并对获取写数据的次数进行统计,得到第一次数,目标HAC为发送目标数据写请求的HAC;
    当第一次数达到第一指定次数时,从目标HAC中获取第一指定次数的下一次写数据的过程中,基于第一数据量、第一起始地址和SOC数据总线的最大数据量,从目标数据写请求中拆分出一个子数据写请求,将该子数据写请求进行协议转化,得到数据写命令,返回本步骤,直至将目标数据写请求拆分完毕;
    将该数据写命令发送给SOC数据总线,该数据写命令携带第一子数据量和第一子起始地址;
    当接收到SOC数据总线返回的数据写响应时,将多次从目标HAC中获取的写数据,逐次发送给SOC数据总线,使SOC数据总线按照第一子数据量和第一子起始地址,将接收的写数据写入SOC的存储资源中。
    可选地,处理器603具体用于:
    基于目标数据写请求携带的第一数据量、目标数据写请求携带的第一起始地址和芯片数据总线的位宽,计算从目标HAC中获取写数据的获取次数,该芯片数据总线为与LMI连接的数据总线;
    基于该获取次数,向目标HAC发送指示信息,该指示信息用于指示目标HAC将目标数据写请求的写数据划分为获取次数次进行发送;
    接收目标HAC发送的写数据,并对接收写数据的次数进行统计,得到第一次数。
    可选地,处理器603具体用于:
    基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求,并将该子数据读请求进行协议转化,得到数据读命令;
    将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址;
    接收SOC的存储资源通过SOC数据总线发送的读数据,对接收读数据的次数进行统计,得到第二次数;
    当第二次数达到第三指定次数时,接收SOC的存储资源通过SOC数据总线发送该第三指定次数的下一次读数据的过程中,基于第二数据量、第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出下一个子数据读请求,并将下一个子数据读请求进行协议转化,得到下一个数据读命令;
    当第二次数达到第四指定次数时,接收SOC的存储资源通过SOC数据总线发送第四指定次数的下一次读数据的过程中,将该下一个数据读命令发送给SOC数据总线,并将第二次数清零,重新统计第二次数,返回上一步骤,直至将目标数据读请求拆分完毕。
    可选地,处理器603具体用于:
    基于目标数据读请求携带的第二数据量、目标数据读请求携带的第二起始地址和SOC数据总线的最大数据量,从目标数据读请求中拆分出一个子数据读请求;
    将该子数据读请求进行协议转化,得到数据读命令,返回上一步骤,直至将目标数据读请求拆分完毕;
    将该数据读命令发送给SOC数据总线,使SOC数据总线将该数据读命令发送给SOC的存储资源,该数据读命令中携带第二子数据量和第二子起始地址;
    逐次接收SOC的存储资源通过SOC数据总线发送的读数据。
    可选地,该设备还包括:
    处理器603,还用于对于每个HAC,当向SOC数据总线发送属于该HAC的数据写命令和数据读命令时,对发送的数据写命令个数进行统计,得到第一命令个数,以及对发送的数据读命令个数进行统计,得到第二命令个数;
    处理器603,还用于当第一命令个数等于第一个数阈值时,停止接收该HAC发送的类型为数据写请求的数据访问请求,直至第一命令个数小于第一个数阈值;
    处理器603,还用于当第二命令个数等于第二个数阈值时,停止接收该HAC发送的类型为数据读请求的数据访问请求,直至第二命令个数小于第二个数阈值。
    在本发明实施例中,通过LMI对HAC发送的数据访问请求进行仲裁、拆分以及协议转化,节省了拆分逻辑和协议转化逻辑的重复资源,并且LMI与SOC数据总线连接,SOC数据总线只需为LMI提供访问接口,无需为每个HAC-IF提供数据访问接口,减少了SOC数据总线的访问接口数量。
    需要说明的是:上述实施例提供的数据访问设备在数据访问时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据访问设备与数据访问方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
    本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于 一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
    以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

    关 键  词:
    数据 访问 方法 设备
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:数据访问方法及设备.pdf
    链接地址:https://www.zhuanlichaxun.net/p-176741.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1