发明内容
本公开的目的是提供一种数据解压系统、图形处理系统、电子组件、电子设备及数据解压方法,旨在提升数据解压效率。
根据本公开的一个方面,提供一种数据解压系统,包括外围模块和解压模块;
外围模块被配置为:从内存读取头文件,并将读取的头文件存储至头文件缓冲区;
外围模块还被配置为:接收目标模块发送的读数据请求,从头文件缓冲区中读取读数据请求对应的头文件,并根据读取的头文件从内存读取相应的压缩数据,以及将读取的压缩数据存储至数据缓冲区;
外围模块还被配置为:在压缩数据从内存全部读回后,向解压模块提交压缩数据对应的解压请求;
解压模块被配置为:响应于解压请求,从数据缓冲区读取解压请求对应的压缩数据,从头文件缓冲区读取解压请求对应的头文件,并根据读取的头文件,对读取的压缩数据进行解压。
本公开一种可行的实现方式中,外围模块包括使能寄存器和基地址寄存器,外围模块还被配置为:在使能寄存器被置位时,从基地址寄存器中读取基地址信息,并根据读取的基地址信息开始从内存读取头文件。
本公开一种可行的实现方式中,外围模块开始从内存读取头文件的时间早于接收到第一个读数据请求的时间。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个;
外围模块还被配置为:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖或者内存中待读取的头文件被读完。
本公开一种可行的实现方式中,外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被外围模块读取的头文件数量越少,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序匹配;
外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件在头文件缓冲区中的位置,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应速度从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的速度越快。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个;
解压模块还被配置为:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则通知外围模块继续从内存读取头文件,将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖或者内存中待读取的头文件被读完。
本公开一种可行的实现方式中,外围模块还被配置为:根据解压模块当前读取的头文件缓冲区中剩余的未被解压模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被解压模块读取的头文件数量越少,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个,其中一个头文件缓冲区是在使能寄存器被置位后开始存储头文件的,另一个头文件缓冲区是在外围模块接收到目标模块发送的第一个读数据请求后开始存储头文件的。
本公开一种可行的实现方式中,头文件缓冲区包括第一存储单元和第二存储单元,第一存储单元和第二存储单元均为双口存储单元;
外围模块在从内存读取头文件,并将读取的头文件存储至头文件缓冲区时,具体被配置为:从内存读取头文件,并将读取的头文件存储至第一存储单元;
外围模块在从头文件缓冲区中读取读数据请求对应的头文件时,具体被配置为:从第一存储单元中读取读数据请求对应的头文件;
外围模块还被配置为:在从第一存储单元中读取读数据请求对应的头文件后,将读取的头文件存储至第二存储单元;
解压模块在从头文件缓冲区读取解压请求对应的头文件时,具体被配置为:从第二存储单元读取解压请求对应的头文件。
本公开一种可行的实现方式中,第一存储单元和第二存储单元的数量均为两个,每个第一存储单元对应一个第二存储单元;
外围模块在将读取的头文件存储至第二存储单元时,具体被配置为:将读取的头文件存储至目标存储单元中,目标存储单元是指存储过该头文件的第一存储单元所对应的第二存储单元;
外围模块还被配置为:根据解压模块当前读取的第二存储单元中剩余的未被解压模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被解压模块读取的头文件数量越少,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,外围模块基于AXI协议从内存读取头文件,两个第一存储单元的存储空间大小相同,且第一存储单元的存储空间为4Kbyte的整数倍;
外围模块还被配置为:根据从内存读回的头文件所对应的地址信息的预设地址位,从两个第一存储单元中选择一个第一存储单元用于存储读回的头文件。
本公开一种可行的实现方式中,外围模块还被配置为基于AXI协议从内存读取头文件,并且每次向内存发送的头文件读取请求均携带预设rid;
外围模块还被配置为:在接收到内存返回的数据后,判断接收到的数据是否携带预设rid,若携带预设rid,则将接收到的数据作为头文件,并存储至第一存储单元,若未携带预设rid,则将接收到的数据作为压缩数据,并存储至数据缓冲区。
根据本公开的另一方面,还提供一种图形处理系统,该图形处理系统包括上述任一实施例中的数据解压系统。
根据本公开的另一方面,还提供一种电子组件,该电子组件包括上述的图形处理系统。在一些使用场景下,该电子组件的产品形式体现为显卡;在另一些使用场景下,该电子组件的产品形式体现为CPU主板。
根据本公开的另一方面,还提供一种电子设备,该电子设备包括上述的电子组件。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机等。
根据本公开的另一方面,还提供一种数据解压方法,方法包括:
外围模块从内存读取头文件,并将读取的头文件存储至头文件缓冲区;
外围模块接收目标模块发送的读数据请求,从头文件缓冲区中读取读数据请求对应的头文件,并根据读取的头文件从内存读取相应的压缩数据,以及将读取的压缩数据存储至数据缓冲区;
外围模块在压缩数据从内存全部读回后,向解压模块提交压缩数据对应的解压请求;
解压模块响应于解压请求,从数据缓冲区读取解压请求对应的压缩数据,从头文件缓冲区读取解压请求对应的头文件,并根据读取的头文件,对读取的压缩数据进行解压。
本公开一种可行的实现方式中,方法还包括:
在使能寄存器被置位时,外围模块从基地址寄存器中读取基地址信息,并根据基地址信息开始从内存读取头文件。
本公开一种可行的实现方式中,外围模块开始从内存读取头文件的时间早于接收到第一个读数据请求的时间。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个;方法还包括:
外围模块在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被所述解压模块读取,若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖或者内存中待读取的头文件被读完。
本公开一种可行的实现方式中,继续从内存读取头文件,包括:
外围模块根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被外围模块读取的头文件数量越少,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序匹配;继续从内存读取头文件,包括:
外围模块根据当前读取的头文件在头文件缓冲区中的位置,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,继续从内存读取头文件,包括:
外围模块根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应速度从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的速度越快。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个;方法还包括:
解压模块在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则通知外围模块继续从内存读取头文件,将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖填满或者内存中待读取的头文件被读完。
本公开一种可行的实现方式中,方法还包括:
外围模块根据解压模块当前读取的头文件缓冲区中剩余的未被解压模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被解压模块读取的头文件数量越少,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个,其中一个头文件缓冲区是在使能寄存器被置位后开始存储头文件的,另一个头文件缓冲区是在外围模块接收到目标模块发送的第一个读数据请求后开始存储头文件的。
本公开一种可行的实现方式中,头文件缓冲区包括第一存储单元和第二存储单元,第一存储单元和第二存储单元均为双口存储单元;
从内存读取头文件,并将读取的头文件存储至头文件缓冲区,包括:从内存读取头文件,并将读取的头文件存储至第一存储单元;
从头文件缓冲区中读取读数据请求对应的头文件,包括:从第一存储单元中读取读数据请求对应的头文件;
方法还包括:外围模块在从第一存储单元中读取读数据请求对应的头文件后,将读取的头文件存储至第二存储单元;
从头文件缓冲区读取解压请求对应的头文件,包括:从第二存储单元读取解压请求对应的头文件。
本公开一种可行的实现方式中,第一存储单元和第二存储单元的数量均为两个,每个第一存储单元对应一个第二存储单元;
外围模块将读取的头文件存储至第二存储单元,包括:外围模块将读取的头文件存储至目标存储单元中,目标存储单元是指存储过该头文件的第一存储单元所对应的第二存储单元;
方法还包括:外围模块根据解压模块当前读取的第二存储单元中剩余的未被解压模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被解压模块读取的头文件数量越少,外部读请求携带的优先级越高。
本公开一种可行的实现方式中,外围模块基于AXI协议从内存读取头文件,两个第一存储单元的存储空间大小相同,且第一存储单元的存储空间为4Kbyte的整数倍;
方法还包括:外围模块根据从内存读回的头文件所对应的地址信息的预设地址位,从两个第一存储单元中选择一个第一存储单元用于存储读回的头文件。
本公开一种可行的实现方式中,外围模块从内存读取头文件,包括:外围模块基于AXI协议从内存读取头文件,并且每次向内存发送的头文件读取请求均携带预设rid;
方法还包括:外围模块在接收到内存返回的数据后,判断接收到的数据是否携带所述预设rid,若携带预设rid,则将接收到的数据作为头文件,并存储至第一存储单元,若未携带预设rid,则将接收到的数据作为压缩数据,并存储至数据缓冲区。
具体实施方式
在介绍本公开实施例之前,应当说明的是:本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
相关技术中,由于解压模块进行数据解压时涉及多次内存读取操作,限制了数据解压速度。以图像数据为例,随着显示格式从1080p到4K,再到8K,对SOC系统带宽带来的压力越来越大,为了减轻图像数据对系统带宽的占用,需要考虑先压缩图像数据再进行总线传输。相应地,显示模块在进行图像显示之前,需要通过解压模块对压缩后的图像数据进行解压。
目前,压缩模块执行数据压缩操作后会输出两部分数据,一部分是压缩数据的头文件header,另外一部分才是真正的压缩数据(即压缩后的数据)。每个头文件至少用于记录该头文件对应的压缩数据的长度。解压模块在解压时,需要首先从内存中读取出一个头文件,然后根据该头文件中记录的信息,再从内存中读取出相应的压缩数据,最后根据该头文件对读取出的压缩数据进行解码。可以看出,解压模块执行解压操作时需要频繁地访问内存,限制了数据解压速度。
本公开的目的是提供一种数据解压系统、图形处理系统、电子组件、电子设备及数据解压方法,旨在提升数据解压效率。
参考图1,图1是本公开一实施例提供的数据解压系统的结构示意图。如图1所示,数据解压系统包括外围模块和解压模块。
在一些具体实施方式中,外围模块和解压模块之间基于一个或多个接口进行信息传递,这些接口可以是request(请求)接口、memory request(内存请求)接口、TileOut(数据输出)接口。
在一些具体实施方式中,外围模块与目标模块通信连接,通信连接是指外围模块可以接收目标模块发送的请求,具体地,目标模块可以基于AXI总线协议向外围模块发送请求。其中,目标模块具体可以是显示模块,例如在将本公开应用于图像数据解压时,显示模块即作为本公开中的目标模块。此外,外围模块可以访问内存,具体地,外围模块可以通过总线访问内存。
如图1所示,外围模块被配置为:从内存读取头文件,并将读取的头文件存储至头文件缓冲区。
外围模块还被配置为:接收目标模块发送的读数据请求,从头文件缓冲区中读取读数据请求对应的头文件,并根据读取的头文件从内存读取相应的压缩数据,以及将读取的压缩数据存储至数据缓冲区。
外围模块还被配置为:在压缩数据从内存全部读回后,向解压模块提交压缩数据对应的解压请求。
解压模块被配置为:响应于解压请求,从数据缓冲区读取解压请求对应的压缩数据,从头文件缓冲区读取解压请求对应的头文件,并根据读取的头文件,对读取的压缩数据进行解压。
如图1所示,在一些具体实施方式中,外围模块可以包括头文件缓冲区和数据缓冲区,头文件缓冲区用于存储外围模块从内存读取的头文件,数据缓冲区用于存储外围模块从内存读取的压缩数据。当外围模块接收到目标模块发送的读数据请求后,可以直接从头文件缓冲区读取该读数据请求对应的头文件,然后根据该头文件从内存读取相应的压缩数据,并将读回的数据存储至数据缓冲区。当一份压缩数据从内存中全部读回后,外围模块向解压模块提交解压请求。解压模块响应于该解压请求,从外围模块的数据缓冲区读取压缩数据和相应头文件,并根据读取的头文件,对读取的压缩数据进行解压。本公开中,外围模块和解压模块相结合,外围模块提前将解压所需的头文件从内存中读回,当接收到目标模块发送的读数据请求后,可以直接根据已经读回的头文件从内存读取压缩数据,解压模块对读回的压缩数据进行解压。上述解压过程中,从接收到读数据请求至相应压缩数据被解压,不需要再临时从内存读取头文件,可以有效缩短解压时间,从而能提升数据解压速率。
在一些具体实施方式中,如图2所示,图2是本公开一实施例提供的数据缓冲区的结构示意图。如图2所示,数据缓冲区包括RID字段存储区、BaseAddr(基地址)字段存储区及数据存储区。如图1所示,外围模块可以包括多个数据缓冲区。
目标模块可以基于AXI协议的outstanding机制向外围模块连续发送多个读数据请求,每个读数据请求分别用于请求对一份压缩数据进行解压,每个读数据请求携带RID和基地址。目标模块每次发送读数据请求时,不需要等待已经发送的读数据请求对应的解压后的数据被返回,就可以向外围模块发送新的读数据请求,如此,外围模块可以同时对多个读数据请求并行处理。外围模块每接收到一个读数据请求后,为该读数据请求分配一个数据缓冲区,并将该读数据请求携带的RID和基地址分别写入该数据缓冲区的RID字段区和BaseAddr字段区。
然后外围模块根据读数据请求携带的基地址,从头文件缓冲区读取该基地址对应的头文件,然后根据读取的头文件从内存读取相应的压缩数据,并将读取的压缩数据存储至读数据请求分配的数据缓冲区。
此外,外围模块可以对每个数据缓冲区进行监控,当某个数据缓冲区中缓冲的压缩数据达到预设数据长度时,确定该压缩数据已经全部从内存中读回。
当外围模块确定出某一份压缩数据被全部读回后,可以通过request接口向解压模块发送解压请求,该解压请求携带了RID字段和基地址。解压模块响应于该解压请求,根据该解压请求携带的基地址,并通过memory request接口,从头文件缓冲区读取出相应头文件。并根据该头文件,解析出压缩数据的长度,然后根据压缩数据的长度和解压请求携带的RID字段,并通过memory request接口,从相应数据缓冲区中读取出压缩数据。外围模块再根据读回的头文件对读回的压缩数据进行解压,并通过TileOut接口,将解压后的数据返回给外围模块,使得外围模块将解压后的数据返回给目标模块。
上述解压过程中,外围模块与解压模块两者形成流水线作业方式,对于解压模块而言,其不需要执行读内存操作,而是在任一数据缓冲区存满一份压缩数据后,就可以对该份压缩数据进行解压,因此上述解压过程具有较高的数据解压效率。
在一些具体实施方式中,如图1所示,外围模块可以包括使能寄存器和基地址寄存器,外围模块还被配置为:在使能寄存器被置位时,从基地址寄存器中读取基地址信息,并根据读取的基地址信息开始从内存读取头文件。
本公开中,外围模块可以与AHB总线连接,设备的其他模块可以通过AHB总线对外围模块的基地址寄存器进行配置,从而将待解压数据的头文件对应的基地址写入基地址寄存器。在配置完基地址寄存器后,设备的其他模块可以通过AHB总线对外围模块的使能寄存器进行置位。当外围模块检测到使能寄存器被置位时(例如当使能寄存器被上电时),从基地址寄存器中读取基地址信息,并根据读取的基地址信息开始从内存读取头文件。例如,在显示视频画面之前,CPU首先对外围模块中的基地址寄存器进行配置,从而将待解压数据的头文件对应的基地址写入基地址寄存器,CPU还对外围模块的使能寄存器进行置位,使得外围模块开始从基地址寄存器中读取基地址信息,并根据读取的基地址信息开始从内存读取头文件。然后,CPU才对显示控制器DC进行配置,使得显示控制器DC开始向外围模块发送读数据请求。
本公开中,外围模块开始从内存读取头文件的时间早于接收到第一个读数据请求的时间。如此,当外围模块接收到第一个读数据请求时,头文件缓冲区已经缓冲有头文件,外围模块可以直接从头文件缓冲区中读取出相应的头文件,而不需要临时从内存读取头文件,从而可以进一步提升数据解压效率。
本公开中,头文件缓冲区的数量可以是两个,当其中一个头文件缓冲区中的头文件已经全部被解压模块解压后,外围模块才继续从内存中读取头文件,并将继续读取的头文件存储至该头文件缓冲区,直至该头文件缓冲区被继续读取的头文件填满,或者内存中的头文件被读完。此外,外围模块在读取头文件时,可以根据另一个头文件缓冲区中剩余的未被读取的头文件数量,以相应优先级继续从内存读取头文件。以下,对外围模块读取头文件的过程做更详细的说明。
在一些具体实施方式中,如图1所示,头文件缓冲区的数量为两个。外围模块还被配置为:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖或者内存中待读取的头文件被读完。
本公开中,两个头文件缓冲区均用于存储外围模块从内存读回的头文件。当外围模块接收到目标模块发送的读数据请求时,外围模块根据读数据请求携带的基地址,从一个头文件缓冲区读取相应的头文件。外围模块在从该头文件缓冲区读取头文件时,还判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取。若是,则说明另一个头文件缓冲区中的每个头文件对应的压缩数据均已经被解压模块所解压,换言之,另一个头文件缓冲区中的头文件已经全部使用完,因此可以继续从内存读取新的头文件,并将新的头文件存储至该另一个头文件缓冲区,以覆盖已经被使用完的头文件。本公开中,外围模块通过上述方式读取和缓冲头文件,可以使得两个头文件缓冲区中至少有一个头文件缓冲区存储有未被使用的头文件,从而避免在数据解压期间因头文件缓冲区中的头文件被全部使用完而导致需要等待外围模块从内存读取新的头文件,如此,本公开可以进一步提升数据解压效率。
在一些具体实施方式中,外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被外围模块读取的头文件数量越少,外部读请求携带的优先级越高。
例如,外围模块可以包括第一计数器和第二计数器,第一计数器用于记录外围模块从一个头文件缓冲区中已经读取的头文件数量,第二计数器用于记录解压模块从另一个头文件缓冲区中已经读取的头文件数量。当外围模块从一个头文件缓冲区读取头文件时,首先判断第二计数器的数值是否达到预设阈值,该预设阈值等于另一个头文件缓冲区最多能存储的头文件数量。如果第二计数器的数值已达到预设阈值,则外围模块根据第一计数器的数值,发送携带相应优先级的外部读请求,从而基于该优先级从内存中读取头文件。
本公开中,根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,一方面可以满足外围模块和解压模块对头文件的需求,使得至少有一个头文件缓冲区中存在未被使用的头文件,另一方面可以在剩余头文件较多的情况下以低优先级读取头文件,从而减少对总线带宽的占用,而在剩余头文件较少的情况下以高优先级读取头文件,从而在剩余头文件被全部使用完之前快速读回新的头文件。
或者在一些具体实施方式中,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序匹配。外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件在头文件缓冲区中的位置,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,外部读请求携带的优先级越高。
本公开中,预设顺序与目标模块发送读数据请求的顺序匹配是指:头文件在头文件缓冲区中从头至尾的排列顺序与目标模块先后发送的多个读数据请求各自对应的头文件的顺序是一致的。例如,目标模块发送的第一个数据读请求对应的头文件是一个头文件缓冲区中的第一个头文件,目标模块发送的第二个数据读请求对应的头文件是该头文件缓冲区中的第二个头文件,目标模块发送的第n个数据读请求对应的头文件是该头文件缓冲区中的第n个头文件,n小于该头文件缓冲区能存储的最大头文件数量。
具体实现时,外围模块可以按照多个头文件各自对应的基地址从内存读取头文件,并按照多个头文件各自对应的基地址将读回的头文件存储至头文件缓冲区。目标模块可以按照多个头文件各自对应的基地址,依次发送多个头文件各自对应的读数据请求,从而使得每个头文件在头文件缓冲区中的存储顺序与目标模块发送读数据请求的顺序匹配。
参考图3,图3是本公开一实施例提供的外围模块读取头文件的示意图。图3中包括两个头文件缓冲区,分别为header buffer_A和header buffer_B。每个头文件缓冲区中存储了多个头文件。图3中,每个头文件缓冲区中的一个方框表示该头文件存储的一个头文件,其中,白色方框表示还没有被外围模块读取的头文件,浅灰色方框表示已经被外围模块读取过但还没有被解压模块读取过的头文件,深灰色方框表示已经被解压模块读取过的头文件,即已经被使用完的头文件,箭头指向的方框是指外围模块当前正在读取的头文件。
本公开中,如前所述,由于每个头文件在头文件缓冲区中的存储顺序与目标模块发送读数据请求的顺序匹配,因此如图3所示,外围模块会按照头文件在头文件缓冲区中的存储顺序,依次从头文件缓冲区中读取头文件。而外围模块在从内存读取压缩数据时,每份压缩数据并不一定按照读数据请求的顺序被依次读回,比如后接收的读数据请求对应的压缩数据反而先被全部读回,而一旦某一份压缩数据被全部读回后,解压模块就需要读取该份压缩数据的头文件,并根据该头文件对该份压缩数据进行解压。因此如图3所示,解压模块并不一定按照头文件在头文件缓冲区中的存储顺序依次读取头文件。
如图3所示,在第一时刻,外围模块正在读取header buffer_B中的一个头文件,而由于header buffer_A中的头文件还没有被解压模块全部读取完,因此此时外围模块不会发起从内存读取头文件的操作。
在第二时刻,外围模块正在读取header buffer_B中的一个头文件,而由于headerbuffer_A中的头文件依然还没有被解压模块全部读取完,因此此时外围模块仍不会发起从内存读取头文件的操作。
在第三时刻,外围模块正在读取header buffer_B中的一个头文件,由于headerbuffer_A中的头文件已经被解压模块全部读取完,因此此时外围模块会发起从内存读取头文件的操作。其中,外围模块在发起从内存读取头文件的操作时,会根据当前读取的头文件在header buffer_B中的位置,以相应优先级从内存读取新的头文件,并将读取的头文件存储至header buffer_A中,直至header buffer_A被新读取的头文件全部覆盖,或者直至内存中待读取的头文件被读完,外围模块才停止从内存读取头文件。由于外围模块当前读取的头文件靠近header buffer_B的尾端,因此外围模块会以较高的优先级从内存读取新的头文件。
在第四时刻,外围模块正在读取header buffer_B中的一个头文件。外围模块从内存新读取的头文件(即新读取的头文件)按预设顺序存储至header buffer_A,但此时新读取的头文件还没有完全覆盖header buffer_A。
在第五时刻,外围模块已经读取完header buffer_B中的全部头文件,外围模块正在读取header buffer_A中的一个头文件,并且外围模块新读取的头文件已经存满了header buffer_A,但是由于header buffer_B中的头文件还没有被解压模块全部读取完,因此此时外围模块不会发起从内存读取头文件的操作。
在第六时刻,外围模块正在读取header buffer_A中的一个头文件,由于headerbuffer_B中的头文件已经被解压模块全部读取完,因此此时外围模块会发起从内存读取头文件的操作。其中,外围模块在发起从内存读取头文件的操作时,会根据当前读取的头文件在header buffer_A中的位置,以相应优先级从内存读取新的头文件,并将读取的头文件存储至header buffer_B中。由于外围模块当前读取的头文件靠近header buffer_A的头端,因此外围模块会以较低的优先级从内存读取新的头文件。
在第七时刻,外围模块正在读取header buffer_A中的一个头文件。外围模块从内存新读取的头文件(即新读取的头文件)按预设顺序存储至header buffer_B,但此时新读取的头文件还没有存满header buffer_B。
具体实现时,可以将外围模块从内存读取头文件的优先级分为N个不同的等级,并将每个头文件缓冲区按照从头至尾的顺序分为N个缓冲段,每个缓冲段分别对应一个优先级等级。其中,越靠近尾端的缓冲段对应的优先级等级越高。为便于理解,示例地,将外围模块从内存读取头文件的优先级分为高、中、低三个等级,并将每个头文件缓冲区按照从头至尾的顺序分为三个缓冲段,头文件缓冲区头端的缓冲段对应高优先级,头文件缓冲区中段的缓冲段对应中优先级,头文件缓冲区尾端的缓冲段对应高优先级。外围模块在以相应优先级从内存读取其余头文件时,根据当前读取的头文件所在的缓冲段,以该缓冲段对应的优先级等级,从内存读取其余头文件。
本公开中,根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,一方面可以满足外围模块和解压模块对头文件的需求,使得至少有一个头文件缓冲区中存在未被使用的头文件,另一方面可以在剩余头文件较多的情况下以低优先级读取头文件,从而减少对总线带宽的占用,而在剩余头文件较少的情况下以高优先级读取头文件,从而在剩余头文件被全部使用完之前快速读回新的头文件。
或者在一些具体实施方式中,外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应速度从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的速度越快。其中,外围模块可以根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,控制从内存读取其余头文件的速度。具体实现时,外围模块可以通过为外部读请求配置优先级的方式,控制从内存读取其余头文件的速度,外部读请求用于从内存中读取头文件。需要说明的是,外围模块除了可以通过配置优先级来控制读取其余头文件的速度,还可以采用其他方式来控制读取其余头文件的速度,本公开对此不做限定。
在一些具体实施方式中,如图1所示,头文件缓冲区的数量为两个。解压模块还被配置为:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则通知外围模块继续从内存读取头文件,将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖或者内存中待读取的头文件被读完。
本公开中,两个头文件缓冲区均用于存储外围模块从内存读回的头文件。当解压模块接收到外围模块提交的解压请求时,解压模块根据解压请求携带的基地址,从一个头文件缓冲区读取相应的头文件。解压模块在从该头文件缓冲区读取头文件时,还判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取。若是,则说明另一个头文件缓冲区中的每个头文件对应的压缩数据均已经被解压模块所解压,另一个头文件缓冲区中的头文件已经全部使用完,因此可以继续通过外围模块从内存读取新的头文件,并将新的头文件存储至该另一个头文件缓冲区,以覆盖已经被使用完的头文件。本公开中,通过上述方式读取和缓冲头文件,可以使得两个头文件缓冲区中至少有一个头文件缓冲区存储有未被使用的头文件,从而避免在数据解压期间因头文件缓冲区中的头文件被全部使用完而导致需要等待外围模块从内存读取新的头文件,如此,本公开可以进一步提升数据解压效率。
在一些具体实施方式中,外围模块还被配置为:根据解压模块当前读取的头文件缓冲区中剩余的未被解压模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被解压模块读取的头文件数量越少,外部读请求携带的优先级越高。
例如,外围模块可以包括第三计数器和第四计数器,第三计数器用于记录解压模块从一个头文件缓冲区中已经读取的头文件数量,第四计数器用于记录解压模块从另一个头文件缓冲区中已经读取的头文件数量。当解压模块从一个头文件缓冲区读取头文件时,判断第四计数器的数值是否达到预设阈值,该预设阈值等于另一个头文件缓冲区最多能存储的头文件数量。如果第四计数器的数值已达到预设阈值,则解压模块通知外围模块继续从内存读取头文件,解压模块根据第三计数器的数值,以相应优先级从内存读取其余头文件。
在一些具体实施方式中,如图1所示,头文件缓冲区的数量为两个,其中一个头文件缓冲区是在使能寄存器被置位后开始存储头文件的,另一个头文件缓冲区是在外围模块接收到目标模块发送的第一个读数据请求后开始存储头文件的。
本公开中,在使能寄存器被置位前,外围模块还没有开始从内存读取头文件,两个头文件缓冲区均为空,或者均没有存储待解压数据对应的头文件。当使能寄存器被置位后,外围模块开始从内存读取头文件,并将读取的头文件存储至两个头文件缓冲区中的一个,当该头文件缓冲区存满头文件后,外围模块暂停从内存读取头文件。当外围模块接收到目标模块发送的第一个读数据请求时,外围模块才继续从内存读取头文件,并将读取的头文件存储至另一个头文件缓冲区。本公开中,按照上述方式读取和缓冲头文件,在目标模块实际开始工作的时候,才继续读取头文件,可以减少总线带宽的占用。
结合图1,本公开对数据解压的整体流程做以下说明:
步骤1:通过AHB总线对外围模块的基地址寄存器进行配置,并在配置完基地址寄存器后,对外围模块的使能寄存器进行置位。
步骤2:在使能寄存器被置位后,外围模块根据基地址寄存器中配置的基地址信息,驱动外部总线从内存中读回头文件,由于此时解压模块还没有正式开始工作,因此可以将读取头文件的优先级设定为中等。
步骤3:对于从内存读回的头文件,存放至头文件缓冲区中。在最开始读取头文件时(即置位使能寄存器时),由于整个头文件缓冲区都是空的(或者没有存储待解压数据对应的头文件),所以第一次读头文件时可以基于AXI outstanding功能发出外部读请求,该外部读请求用于读取头文件。
步骤4:目标模块在完成相关配置后,对外发出读linebuffer的操作,即向外围模块发出读数据请求。
步骤5:外围模块响应于读数据请求,从头文件缓冲区读取相应的头文件,并根据读取的头文件从内存读取相应的压缩数据。
步骤6:对于从内存读回的压缩数据,存放至数据缓冲区。
步骤7:当某一数据缓冲区存满了需要解压的压缩数据后,外围模块开始驱动解压模块的request接口。
步骤8:解压模块收到request接口的信息后,开始驱动memory request接口去读头文件缓冲区和数据缓冲区中的头文件和压缩数据,通过req接口的sb_tag信号发送buffer index。其中,buffer index可以是数据缓冲区的RID字段信息。
步骤9:解压模块通过TileOut接口将解压后的数据送出来,可以利用TileOut接口的sb_tag信号获得buffer Index,然后将结果存放到相应的数据缓冲区。
步骤10:外围模块将解压后的数据发送给目标模块。
本公开实施例还提供一种图形处理系统,该图形处理系统包括上述任一实施例中的数据解压系统。在一些使用场景下,该图形处理系统的产品体现为SOC芯片,SOC芯片上集成了图形处理器。
参考图4,在本公开的一些具体实施方式中,头文件缓冲区可以包括第一存储单元和第二存储单元。
外围模块在从内存读取头文件,并将读取的头文件存储至头文件缓冲区时,具体被配置为:从内存读取头文件,并将读取的头文件存储至第一存储单元。
外围模块在从头文件缓冲区中读取读数据请求对应的头文件时,具体被配置为:从第一存储单元中读取读数据请求对应的头文件。
外围模块还被配置为:在从第一存储单元中读取读数据请求对应的头文件后,将读取的头文件存储至第二存储单元。
解压模块在从头文件缓冲区读取解压请求对应的头文件时,具体被配置为:从第二存储单元读取解压请求对应的头文件。
具体实现时,外围模块从内存读回的头文件被存储至第一存储单元,外围模块在接收到读数据请求后,从第一存储单元读取读数据请求对应的头文件,并根据读取的头文件从内存读取相应的压缩数据,以及将读取的压缩数据存储至数据缓冲区。外围模块把从第一存储单元读取的头文件再存储至第二存储单元。当解压模块接收到解压请求后,解压模块从数据缓冲区读取解压请求对应的压缩数据,从第二存储单元读取相应的头文件,并根据读取的头文件对读取的压缩数据进行解压。
本公开中,由于头文件缓冲区包括第一存储单元和第二存储单元,且第一存储单元和第二存储单元均为双口存储单元,因此,头文件从内存被写入第一存储单元和外围模块从第一存储单元读取头文件这两种操作,可以同时执行,减少读写冲突和总线总裁。同样地,头文件由外围模块写入第二存储单元和解压模块从第二存储单元读取头文件这两种操作,也可以同时执行,减少读写冲突和总线总裁。因此,采用上述具体实施方式,可以进一步提升数据解压效率。
本公开中,第一存储单元和第二存储单元可以选用双口RAM。
在本公开的一些具体实施方式中,第一存储单元和第二存储单元的数量均为两个,每个第一存储单元对应一个第二存储单元。
外围模块在将读取的头文件存储至第二存储单元时,具体被配置为:将读取的头文件存储至目标存储单元中,目标存储单元是指存储过该头文件的第一存储单元所对应的第二存储单元。
外围模块还被配置为:根据解压模块当前读取的第二存储单元中剩余的未被解压模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被解压模块读取的头文件数量越少,外部读请求携带的优先级越高。
如图4所示,头文件缓冲区包括第一存储单元A、第一存储单元B、第二存储单元A及第二存储单元B,其中第一存储单元A与第二存储单元A对应,第一存储单元B与第二存储单元B对应。当外围模块响应于读数据请求,从第一存储单元A中读取出头文件后,外围模块一方面根据读取的头文件从内存读取相应的压缩数据,外围模块另一方面将读取的头文件再存储至第二存储单元A中。同理,当外围模块响应于读数据请求,从第一存储单元B中读取出头文件后,外围模块一方面根据读取的头文件从内存读取相应的压缩数据,外围模块另一方面将读取的头文件再存储至第二存储单元B中。
此外,当解压模块响应于解压请求,从第二存储单元A读取头文件时,外围模块判断第一存储单元B中的头文件(或者判断第二存储单元B中的头文件)是否已经全部给读取,若是,则根据第二存储单元A中剩余的未被读取的头文件数量,发送携带相应优先级的外部读请求。其中,剩余的未被读取的头文件数量越少,外部读请求携带的优先级越高。同理,当解压模块响应于解压请求,从第二存储单元B读取头文件时,外围模块判断第一存储单元A中的头文件(或者判断第二存储单元A中的头文件)是否已经全部给读取,若是,则根据第二存储单元B中剩余的未被读取的头文件数量,发送携带相应优先级的外部读请求。其中,剩余的未被读取的头文件数量越少,外部读请求携带的优先级越高。本公开中,根据第二存储单元中剩余未被读取的头文件数量,发送携带相应优先级的外部读请求,可以在总线带宽占用和确保剩余有足够的头文件可供读取这两者之间,寻求平衡。
在本公开的一些具体实施方式中,外围模块基于AXI协议从内存读取头文件,两个第一存储单元的存储空间大小相同,且第一存储单元的存储空间为4Kbyte的整数倍。
外围模块还被配置为:根据从内存读回的头文件所对应的地址信息的预设地址位,从两个第一存储单元中选择一个第一存储单元用于存储读回的头文件。
考虑到AXI访问不会超过4Kbyte地址的边界,因此本公开中将两个第一存储单元的存储空间设置为相等,且均为4Kbyte(即4K字节)的整数,例如两个第一存储单元的存储空间均为4Kbyte,或者均为8Kbyte。如果两个第一存储单元的存储空间均为4Kbyte,则外围模块可以直接根据从内存读回的头文件所对应的地址信息的第13位,确定出该头文件应该存储的第一存储单元。比如当地址信息的第13位为1时,将头文件存储至第一存储单元A,当地址信息的第13位为0时,将头文件存储至第一存储单元B。
在本公开的一些具体实施方式中,外围模块还被配置为基于AXI协议从内存读取头文件,并且每次向内存发送的头文件读取请求均携带预设rid。
外围模块还被配置为:在接收到内存返回的数据后,判断接收到的数据是否携带预设rid,若携带预设rid,则将接收到的数据作为头文件,并存储至第一存储单元,若未携带预设rid,则将接收到的数据作为压缩数据,并存储至数据缓冲区。
本公开中,外围模块一方面需要基于AXI协议从内存读取头文件,另一方面还需要基于AXI协议从内存读取压缩数据。由于压缩数据的数据量远大于头文件的数据量,本公开中外围模块在读取每笔压缩数据时,可以采用不同的rid,从而使得内存可以乱序返回压缩数据,使得压缩数据具有较高的读取效率。而对于头文件而言,由于其数据量偏低,因此可以在读取每笔头文件时,均携带预设rid,即固定相同的rid。如此,一方面外围模块不需要单独记录每笔头文件读取请求各自对应的rid,另一方面也可以根据内存返回的数据所对应的rid,简单区分出头文件和压缩数据。
本公开实施例还提供一种电子组件,该电子组件包括上述图形处理系统。在一些使用场景下,该电子组件的产品形式体现为显卡;在另一些使用场景下,该电子组件的产品形式体现为CPU主板。
本公开实施例还提供一种电子设备,该电子设备包括上述的电子组件。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
参考图5,图5是本公开一实施例提供的数据解压方法的流程示意图。由于图5提供的数据解压方法与上述实施例中的数据解压系统基于同一发明构思,因此为了避免重复,以下对数据解压方法仅做简要介绍。对于数据解压方法的具体实施方式,可以参考前述数据解压系统。如图5所示,数据解压方法包括以下步骤:
S510:外围模块从内存读取头文件,并将读取的头文件存储至头文件缓冲区。
S520:外围模块接收目标模块发送的读数据请求,从头文件缓冲区中读取读数据请求对应的头文件,并根据读取的头文件从内存读取相应的压缩数据,以及将读取的压缩数据存储至数据缓冲区。
S530:外围模块在压缩数据从内存全部读回后,向解压模块提交压缩数据对应的解压请求。
S540:解压模块响应于解压请求,从数据缓冲区读取解压请求对应的压缩数据,从头文件缓冲区读取解压请求对应的头文件,并根据读取的头文件,对读取的压缩数据进行解压。
本公开中,当外围模块接收到目标模块发送的读数据请求后,可以直接从头文件缓冲区读取该读数据请求对应的头文件,然后根据该头文件从内存读取相应的压缩数据,并将读回的数据存储至数据缓冲区。当一份压缩数据从内存中全部读回后,外围模块向解压模块提交解压请求。解压模块响应于该解压请求,从外围模块的数据缓冲区读取压缩数据和相应头文件,并根据读取的头文件,对读取的压缩数据进行解压。本公开中,解压模块在执行数据解压时,不需要从内存中读取头文件和压缩数据,而可以直接从头文件缓冲区和数据缓冲区快速读取到头文件和压缩数据,并根据头文件对压缩数据进行解压,从而提升数据解压速率。
可选地,数据解压方法还包括:在使能寄存器被置位时,外围模块从基地址寄存器中读取基地址信息,并根据基地址信息开始从内存读取头文件。
可选地,外围模块开始从内存读取头文件的时间早于接收到第一个读数据请求的时间。
可选地,头文件缓冲区的数量为两个。数据解压方法还包括:外围模块在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被所述解压模块读取,若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖或者内存中待读取的头文件被读完。
可选地,外围模块继续从内存读取头文件时,具体包括:外围模块根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被外围模块读取的头文件数量越少,外部读请求携带的优先级越高。
或者可选地,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序匹配。外围模块继续从内存读取头文件时,具体包括:外围模块根据当前读取的头文件在头文件缓冲区中的位置,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,外部读请求携带的优先级越高。
或者可选地,外围模块继续从内存读取头文件时,具体包括:外围模块根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应速度从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的速度越快。
可选地,头文件缓冲区的数量为两个。数据解压方法还包括:解压模块在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则通知外围模块继续从内存读取头文件,将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件全部覆盖或者内存中待读取的头文件被读完。
可选地,数据解压方法还包括:外围模块根据解压模块当前读取的头文件缓冲区中剩余的未被解压模块读取的头文件数量,发送携带相应优先级的外部读请求,外部读请求用于从内存中读取头文件,其中,剩余的未被解压模块读取的头文件数量越少,外部读请求携带的优先级越高。
可选地,头文件缓冲区的数量为两个,其中一个头文件缓冲区是在使能寄存器被置位后开始存储头文件的,另一个头文件缓冲区是在外围模块接收到目标模块发送的第一个读数据请求后开始存储头文件的。
尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。