数据拼接模块及数据传递方法、介质、电子设备、芯片与流程
未命名
09-24
阅读:66
评论:0
1.本技术涉及芯片技术领域,具体涉及一种数据拼接模块及数据传递方法、存储介质、电子设备、芯片。
背景技术:
2.如图1所示,定义前级模块为a模块,后级模块为b模块,在soc设计中经常出现a模块输出的数据,因为有效部分没有按b模块要求的占满整个数据位宽而必须在a模块和b模块之间加入一个数据拼接模块(join模块)的场景,数据拼接模块负责将a模块输出的数据结构转为b模块要求的数据结构;数据拼接模块内部包含判断逻辑和数据缓存,其中,判断逻辑用于判断当前哪些数据缓存需要更新,数据缓存用于存放a模块输出的有效数据,join需要等到有效数据填满数据缓存之后才能输出给b模块。
3.比如,如图2所示,a模块输出的数据位宽为256bit,b模块输入位宽为256bit,a模块输出的有效部分以字节为单位(一个字节对应8bit),a模块第一个输出的数据里面只有bit[220:141]有效(下文称为a0,80bit),第二个输出数据里只有bit[200:121]有效(下文称为a1,80bit),第三个输出数据只有bit[150:55]有效(下文称为a2,96bit),由于a0、a1、a2三个数据的有效部分加起来才够b模块的输入位宽256bit,所以给到b模块的第一个数据需要用a0、a1、a2三个数据拼接起来。
[0004]
如图3所示,由于每次a模块输出时,有效字节可能放置在任意位置,这导致b模块入口每个字节可能来自a模块出口的任意字节,在实现上直接让数据拼接模块内部的数据缓存的每个字节做mux(multiplexer,多路复用器);比如,a模块的输出位宽是32字节,对应256bit(每个字节为8bit),b模块的输入位宽也是32字节,导致数据拼接模块数据缓存的每个字节都需要32mux1电路(32mux1电路用于从32个输入中选择一个作为输出),也就是每个bit都需要一个32mux1电路(数据拼接模块内部的数据缓存也是32字节,用以匹配b模块的输入位宽),一个32mux1电路将占用31个基础单元,基础单元为一个2mux1电路,那么数据拼接模块内部的256bit数据缓存总共需要256bit*31=7936个基础单元,这样的soc设计方案存在以下问题:需要的基础单元个数非常多,而且基础单元个数会随着a模块/b模块的位宽的增大而增加,基础单元个数太多将影响芯片的成本和功耗;同时,需要把a模块输出的每个bit连接到32个32mux1电路上,走线数太多将影响后端的布局布线,进而影响时序。
技术实现要素:
[0005]
本技术的目的在于提供一种数据拼接模块及数据传递方法、计算机可读存储介质、电子设备、芯片,以降低芯片的成本和功耗,减少走线。
[0006]
为实现上述目的,本技术实施例提供一种数据拼接模块,包括:接收单元,用于接收第一数据和invld信号,所述invld信号指示所述第一数据的高位无效字节数;
左移单元,用于根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据;右移单元,用于根据pos信号对第二数据进行逐级右移,获得第三数据,使得所述第三数据中的有效字节与所述pos信号指示的地址对齐;其中所述pos信号用于指示所述第一数据的有效数据在数据缓存单元中的存储地址;数据缓存单元,用于存储所述第三数据的有效字节;其中,当数据缓存单元中填满有效数据时,输出缓存数据。
[0007]
在一些实施例中,若所述第一数据、第二数据和第三数据的位宽均为m个字节,所述invld信号和pos信号均为n个bit的信号,则m和n满足以下关系:m小于或等于2的n次方。
[0008]
在一些实施例中,所述左移单元,具体用于:从高到低依次获取所述invld信号的每一个bit的值,并根据每一个bit的值进行数据左移;当获取到所述invld信号的第i个bit的值时,若所述invld信号的第i个bit的值为1,则取left-data
i+1
的低k个字节赋值给left-datai的高k个字节,且left-datai的低m-k个字节赋值为0;若所述第i个bit的值为0,则取所述left-data
i+1
的全部字节赋值给left-datai;;left-data
n+1
为所述第一数据;left-data1为所述第二数据;i等于1~n。
[0009]
在一些实施例中,所述右移单元,具体用于:从高到低依次获取所述pos信号的每一个bit的值,并根据所述pos信号的每一个bit的值进行数据右移;当获取到所述pos信号的第i个bit的值时,若所述pos信号的第i个位为1,则将取right-data
i+1
的高k个字节赋值给right-datai的低g个字节,且right-datai的高m-g个字节赋值为0,若所述pos信号的第i个位为0,则将right-data
i+1
的全部字节赋值给right-datai;其中,;right-data
n+1
为所述第二数据,right-data1为所述第三数据;i等于1~n。
[0010]
本技术实施例还提供一种基于所述数据拼接模块实现的数据传递方法,包括:接收第一数据和invld信号,所述invld信号指示所述第一数据的高位无效字节数;根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据;根据pos信号对第二数据进行逐级右移,获得第三数据,使得所述第三数据中的有效字节与所述pos信号指示的地址对齐,其中所述pos信号用于指示所述第一数据的有效数据在数据缓存单元中的存储地址;存储所述第三数据的有效字节;其中,当数据缓存单元中填满有效数据时,输出缓存数据。
[0011]
在一些实施例中,若所述第一数据、第二数据和第三数据的位宽均为m个字节,所述invld信号和pos信号均为n个bit的信号,则m和n满足以下关系:m小于或等于2的n次方。
[0012]
在一些实施例中,所述根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据,具体包括:从高到低依次获取所述invld信号的每一个bit的值,并根据每一个bit的值进行数据左移;
当获取到所述invld信号的第i个bit的值时,若所述invld信号的第i个bit的值为1,则取left-data
i+1
的低k个字节赋值给left-datai的高k个字节,且left-datai的低m-k个字节赋值为0;若所述第i个bit的值为0,则取所述left-data
i+1
的全部字节赋值给left-datai;,left-data
n+1
为所述第一数据,left-data1为所述第二数据;i等于1~n。
[0013]
在一些实施例中,所述根据pos信号对第二数据进行逐级右移,获得第三数据,具体包括:从高到低依次获取所述pos信号的每一个bit的值,并根据所述pos信号的每一个bit的值进行数据右移;当获取到所述pos信号的第i个bit的值时,若所述pos信号的第i个位为1,则将取right-data
i+1
的高k个字节赋值给right-datai的低g个字节,且right-datai的高m-g个字节赋值为0,若所述pos信号的第i个位为0,则将right-data
i+1
的全部字节赋值给right-datai;其中,;right-data
n+1
为所述第二数据,right-data1为所述第三数据;i等于1~n。
[0014]
本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现如上所述的数据传递方法。
[0015]
本技术实施例还提供一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的数据传递方法。
[0016]
本技术实施例还提供一种芯片,包括所述的数据拼接模块,或者所述的电子设备。
[0017]
本技术实施例提供了一种数据拼接模块及数据传递方法、计算机可读存储介质、电子设备、芯片,采用逐级移位的方式对前级模块输出的数据依次进行左移和右移,逐级移位的方式每次只需要移动一位或者一组位,就可以完成相应的操作,因此所需的硬件资源会相对减少,本技术实施例通过左移加右移的方式直接匹配到待更新数据的位置,避免了直接mux导致的资源(2mux1电路/基础单元个数)过大和时序紧张,降低芯片的成本和功耗,特别是对于比较宽的数据总线来说,逐级移位方式可以在不需要过多资源的情况下,很容易地实现大规模的数据处理;同时,由于硬件资源的下降,将直接利好后端的布局布线,降低组合逻辑级数,提升电路的工作频率,进而提升芯片的性能。
附图说明
[0018]
为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0019]
图1为在前后级模块间增加数据拼接模块的示意图。
[0020]
图2为后级模块要求有效数据从高位开始并占满整个数据位宽的示意图。
[0021]
图3为数据拼接模块数据缓存的每个字节可能来自前级模块的任意一个字节的示意图。
[0022]
图4为本技术一个实施例中的一种数据拼接模块的框架结构图。
[0023]
图5为本技术一个实施例中的数据左移示意图。
[0024]
图6为本技术一个实施例中的数据右移示意图。
[0025]
图7为本技术一个实施例中更新数据拼接模块数据缓存示意图。
[0026]
图8为本技术一个实施例中的一种数据传递方法的流程图。
具体实施方式
[0027]
附图的详细说明意在作为本技术的当前优选实施例的说明,而非意在代表本技术能够得以实现的仅有形式。应理解的是,相同或等同的功能可以由意在包含于本技术的精神和范围之内的不同实施例完成。
[0028]
参阅图4,本技术的一个实施例提供一种数据拼接模块,包括:接收单元,用于接收前级模块输出的第一数据和invld信号,所述invld信号指示所述第一数据的高位无效字节数;所述前级模块例如图1中所示的a模块;具体而言,所述invld信号可以用多个二进制位来表示。
[0029]
左移单元,用于根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据;具体而言,左移用于移除a输出信号中高位的无效字节,如图5所示,比如前级模块输出的第一数据中高2字节都是无效的,那么就将第一数据左移2字节*8bit=16位,通过左移,使得信号的有效数据从高位开始摆放。
[0030]
右移单元,用于根据pos信号对第二数据进行逐级右移,获得第三数据,使得所述第三数据中的有效字节与所述pos信号指示的地址对齐;其中所述pos信号用于指示所述第一数据的有效数据在数据缓存单元中的存储地址;具体而言,所述pos信号可以用多个二进制位来表示,"join"模块通常会接收两个或多个输入数据流,并根据特定的条件将它们合并成一个输出流;其中,"pos"信号指的是位置信号(position signals),用于指示输入流中数据元素的顺序;当输入流中的数据元素到达数据拼接模块时,"pos"信号会告诉模块元素的位置,以确保正确地进行合并操作,通过使用这个位置信息,数据拼接模块可以确定如何匹配两个(或多个)输入流中的数据,并生成相应的输出。举个例子,前级模块先输入只有byte255有效的数据a1,那么数据拼接模块需要把a1的byte255放到数据缓存的byte255;前级模块再输入只有byte0有效的数据a2,那么此时数据拼接模块需要把a2的byte0放到数据缓存的byte254,这个byte254就是待接收数据的位置,图6为第二数据右移的示意图。
[0031]
数据缓存单元,用于存储所述第三数据的有效字节;其中,当数据缓存单元中填满有效数据时,输出缓存数据给后级模块,所述后级模块例如是图1中所示的b模块;具体而言,例如图7所示,所述第一数据、第二数据和第三数据的位宽均为256bit,数据拼接模块的逻辑判断256bit的数据缓存的待更新位置(记为pos)为byte100,同时,第三数据的有效部分长度为10个字节,那么就将数据缓存的byte100~byte91更新为第三数据的byte100~byte91,同时将所述pos信号更新为byte90的位置,数据拼接模块内部的数据缓存在凑满256bit的有效数据后就会输出给后级模块。
[0032]
本实施例采用逐级移位的方式对前级模块输出的数据依次进行左移和右移,逐级移位的方式每次只需要移动一位或者一组位,就可以完成相应的操作,本实施例通过左移加右移的方式直接匹配到待更新数据的位置,避免了直接mux导致的资源(2mux1电路/基础单元个数)过大和时序紧张,因此所需的硬件资源会相对减少,降低芯片的成本和功耗,特
别是对于比较宽的数据总线来说,逐级移位方式可以在不需要过多资源的情况下,很容易地实现大规模的数据处理;同时,由于硬件资源的下降,将直接利好后端的布局布线,降低组合逻辑级数,提升电路的工作频率,进而提升芯片的性能。
[0033]
在一些实施例中,若所述第一数据、第二数据和第三数据的位宽均为m个字节,所述invld信号和pos信号均为n个bit的信号,则m和n满足以下关系:m小于或等于2的n次方。
[0034]
例如,m为32时,n为5,即所述第一数据、第二数据和第三数据的位宽均为32个字节(256bit),invld信号和pos信号均5个bit的信号,每个bit为0/1,例如是,00100、01010、10110等,从右往左分别为第1个bit至第5个bit。
[0035]
在一些实施例中,所述左移单元,具体用于:从高到低依次获取所述invld信号的每一个bit的值,并根据每一个bit的值进行数据左移;当获取到所述invld信号的第i个bit的值时,若所述invld信号的第i个bit的值为1,则取left-data
i+1
的低k个字节赋值给left-datai的高k个字节,且left-datai的低m-k个字节赋值为0;若所述第i个bit的值为0,则取所述left-data
i+1
的全部字节赋值给left-datai;;left-data
n+1
为所述第一数据,left-data1为所述第二数据;i等于1~n。
[0036]
例如,在m=32、n=5的场景中,left-datai为32字节数据,所述左移单元,具体用于:判断所述invld信号的第5个bit(i=5,bit4)的值是否为1,若所述invld信号的bit4为1,则取所述第一数据的低16个字节赋值给left-data5的高16个字节,left-data5的低16个字节赋值为0;若所述invld信号的bit4为0,则取所述第一数据的全部字节赋值给left-data5;判断所述invld信号的第4个bit(i=4,bit3)的值是否为1,若所述invld信号的bit3为1,则取所述left-data5的低24个字节赋值给left-data4的高24个字节,left-data4的低8个字节赋值为0;若所述invld信号的bit3为0,则取所述left-data5的全部字节赋值给left-data4;判断所述invld信号的第3个bit(i=3,bit2)的值是否为1,若所述invld信号的bit2为1,则取所述left-data4的低28个字节赋值给left-data3的高28个字节,left-data3的低4个字节赋值为0;若所述invld信号的bit2为0,则取所述left-data4的全部字节赋值给left-data3;判断所述invld信号的第2个bit(i=2,bit1)的值是否为1,若所述invld信号的bit1为1,则取所述left-data3的低30个字节赋值给left-data2的高30个字节,left-data2的低2个字节赋值为0;若所述invld信号的bit1为0,则取所述left-data3的全部字节赋值给left-data2;判断所述invld信号的第1个bit(i=1,bit0)的值是否为1,若所述invld信号的bit0为1,则取所述left-data2的低31个字节赋值给left-data1的高31个字节,left-data2的低1个字节赋值为0;若所述invld信号的bit0为0,则取所述left-data2的全部字节赋值给left-data1;所述left-data1即是所述第二数据。
[0037]
需说明的是,比如invld信号的值为6,对应二进制的00110,从二进制可以看出,invld信号的值此时等于bit4+bit3+bit2+bit1+bit0=0+0+4+2+0;由于0不影响invld信号的值,可以看出只有4和2会影响invld信号的值,此时左移6就相当于先左移4再左移2。
[0038]
在本实施例的设计中,所述左移单元实现以上判断的过程,需要使用一个2mux1电
路来选择要进行不同步数的左移操作的寄存器,实现左移操作,在这个过程中,由于每次左移操作的输出结果都是256位信号,因此需要把256位信号的每一位都连接到2mux1电路中,以实现选择不同的左移步数。因此,在本实施例的设计中需要使用5个2mux1电路来实现这个过程,每个2mux1电路只需要选择两个输入信号之一,输出一个信号,所以需要一个2mux1电路来选择每一个输入信号的每一位。由于每个2mux电路需要选择256位信号的每一位,所以总共需要256次选择,即需要256个2mux1电路,而总共的步数和判断次数为5步,因此总共需要的2mux1数目为5步*256位*(1个2mux/1位)=1280个2mux1。
[0039]
在一些实施例中,所述右移单元,具体用于:从高到低依次获取所述pos信号的每一个bit的值,并根据所述pos信号的每一个bit的值进行数据右移;当获取到所述pos信号的第i个bit的值时,若所述pos信号的第i个位为1,则将取right-data
i+1
的高k个字节赋值给right-datai的低g个字节,且right-datai的高m-g个字节赋值为0,若所述pos信号的第i个位为0,则将right-data
i+1
的全部字节赋值给right-datai;其中,;right-data
n+1
为所述第二数据,right-data1为所述第三数据;i等于1~n。
[0040]
例如,在m=32、n=5的场景中,right-datai为32字节数据,所述右移单元,具体用于:判断所述pos信号的第5个bit(i=5,bit4)的值是否为1,若所述pos信号的bit4为1,则取所述第二数据的高16个字节赋值给right-data5的低16个字节,right-data5的高16个字节赋值为0,若所述pos信号的bit4为0,则将所述第二数据的全部字节赋值给right-data5;判断所述pos信号的第4个bit(i=4,bit3)的值是否为1,若所述pos信号的bit3为1,则取所述right-data5的高24个字节赋值给right-data4的低24个字节,right-data4的高8个字节赋值为0,若所述pos信号的bit3为0,则将所述right-data5的全部字节赋值给right-data4;判断所述pos信号的第3个bit(i=3,bit2)的值是否为1,若所述pos信号的bit2为1,则取所述right-data4的高28个字节赋值给right-data3的低28个字节,right-data3的高4个字节赋值为0,若所述pos信号的bit2为0,则将所述right-data4的全部字节赋值给right-data3;判断所述pos信号的第2个bit(i=2,bit1)的值是否为1,若所述pos信号的bit1为1,则取所述right-data3的高30个字节赋值给right-data2的低30个字节,right-data2的高2个字节赋值为0,若所述pos信号的bit1为0,则将所述right-data3的全部字节赋值给right-data2;判断所述pos信号的第1个bit(i=1,bit0)的值是否为1,若所述pos信号的bit0为1,则取所述right-data2的高31个字节赋值给right-data1的低31个字节,right-data2的高1个字节赋值为0,若所述pos信号的bit0为0,则将所述right-data2的全部字节赋值给right-data1。
[0041]
具体而言,与左移类似,右移中由于每步都是获得256bit,所以每步都需要256个2mux,总的2mux1个数为256*5=1280。
[0042]
通过以上实施例的描述可知,对于前级模块输出256bit,后级模块输入256bit的
场景,传统方案需要7936个2mux1;而本实施例的方案只需要1280*2=2560个2mux,资源(2mux1电路/基础单元个数)为传统方案的32.26%。如果前级模块、后级模块的位宽变得更大,比如都是512bit,那么资源将是传统方案的19.05%(传统方案的资源是32256,本实施例的方案的资源是512bit*6步移位*2次移位=6144)。此处只比较了mux的资源,没有比较数据拼接模块内部数据缓存和判断逻辑的资源,因为不管是本实施例的方案还是传统方案,数据拼接模块内的资源不变。由于资源的下降,将直接利好后端的布局布线,降低组合逻辑级数,提升电路的工作频率,进而提升soc芯片的性能。
[0043]
参阅图8,本技术的另一个实施例还提供一种基于上述实施例所述数据拼接模块实现的数据传递方法,包括如下步骤:步骤s10,接收第一数据和invld信号,所述invld信号指示所述第一数据的高位无效字节数;具体而言,所述前级模块例如图1中所示的a模块;所述invld信号可以用多个二进制位来表示。
[0044]
步骤s20,根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据;具体而言,左移用于移除a输出信号中高位的无效字节,如图5所示,比如前级模块输出的第一数据中高2字节都是无效的,那么就将第一数据左移2字节*8bit=16位,通过左移,使得信号的有效数据从高位开始摆放。
[0045]
步骤s30,根据pos信号对第二数据进行逐级右移,获得第三数据,使得所述第三数据中的有效字节与所述pos信号指示的地址对齐,其中所述pos信号用于指示所述第一数据的有效数据在数据缓存单元中的存储地址;具体而言,所述pos信号可以用多个二进制位来表示,"join"模块通常会接收两个或多个输入数据流,并根据特定的条件将它们合并成一个输出流;其中,"pos"信号指的是位置信号(position signals),用于指示输入流中数据元素的顺序;当输入流中的数据元素到达数据拼接模块时,"pos"信号会告诉模块元素的位置,以确保正确地进行合并操作,通过使用这个位置信息,数据拼接模块可以确定如何匹配两个(或多个)输入流中的数据,并生成相应的输出。举个例子,前级模块先输入只有byte255有效的数据a1,那么数据拼接模块需要把a1的byte255放到数据缓存的byte255;前级模块再输入只有byte0有效的数据a2,那么此时数据拼接模块需要把a2的byte0放到数据缓存的byte254,这个byte254就是待接收数据的位置,图6为第二数据右移的示意图。
[0046]
步骤s40,将所述第三数据的有效字节存储至所述数据缓存单元中;其中,当数据缓存单元中填满有效数据时,输出缓存数据;所述后级模块例如是图1中所示的b模块;具体而言,例如图7所示,所述第一数据、第二数据和第三数据的位宽均为256bit,数据拼接模块的逻辑判断256bit的数据缓存的待更新位置(记为pos)为byte100,同时,第三数据的有效部分长度为10个字节,那么就将数据缓存的byte100~byte91更新为第三数据的byte100~byte91,同时将所述pos信号更新为byte90的位置,数据拼接模块内部的数据缓存在凑满256bit的有效数据后就会输出给后级模块。
[0047]
本实施例方法采用逐级移位的方式对前级模块输出的数据依次进行左移和右移,
逐级移位的方式每次只需要移动一位或者一组位,就可以完成相应的操作,本实施例通过左移加右移的方式直接匹配到待更新数据的位置,避免了直接mux导致的资源(2mux1电路/基础单元个数)过大和时序紧张,因此所需的硬件资源会相对减少,降低芯片的成本和功耗,特别是对于比较宽的数据总线来说,逐级移位方式可以在不需要过多资源的情况下,很容易地实现大规模的数据处理;同时,由于硬件资源的下降,将直接利好后端的布局布线,降低组合逻辑级数,提升电路的工作频率,进而提升芯片的性能。
[0048]
在一些实施例中,若所述第一数据、第二数据和第三数据的位宽均为m个字节,所述invld信号和pos信号均为n个bit的信号,则m和n满足以下关系:m小于或等于2的n次方。
[0049]
例如,m为32时,n为5,即所述第一数据、第二数据和第三数据的位宽均为32个字节(256bit),invld信号和pos信号均5个bit的信号,每个bit为0/1,例如是,00100、01010、10110等,从右往左分别为第1个bit至第5个bit。
[0050]
在一些实施例中,所述步骤s20,具体包括:从高到低依次获取所述invld信号的每一个bit的值,并根据每一个bit的值进行数据左移;当获取到所述invld信号的第i个bit的值时,若所述invld信号的第i个bit的值为1,则取left-data
i+1
的低k个字节赋值给left-datai的高k个字节,且left-datai的低m-k个字节赋值为0;若所述第i个bit的值为0,则取所述left-data
i+1
的全部字节赋值给left-datai;;left-data
n+1
为所述第一数据,left-data1为所述第二数据;i等于1~n。
[0051]
例如,在m=32、n=5的场景中,left-datai为32字节数据,所述步骤s20,具体包括:步骤s201,判断所述invld信号的第5个bit(i=5,bit4)的值是否为1,若所述invld信号的bit4为1,则取所述第一数据的低16个字节赋值给left-data5的高16个字节,left-data5的低16个字节赋值为0;若所述invld信号的bit4为0,则取所述第一数据的全部字节赋值给left-data5;步骤s202,判断所述invld信号的第4个bit(i=4,bit3)的值是否为1,若所述invld信号的bit3为1,则取所述left-data5的低24个字节赋值给left-data4的高24个字节,left-data4的低8个字节赋值为0;若所述invld信号的bit3为0,则取所述left-data5的全部字节赋值给left-data4;步骤s203,判断所述invld信号的第3个bit(i=3,bit2)的值是否为1,若所述invld信号的bit2为1,则取所述left-data4的低28个字节赋值给left-data3的高28个字节,left-data3的低4个字节赋值为0;若所述invld信号的bit2为0,则取所述left-data4的全部字节赋值给left-data3;步骤s204,判断所述invld信号的第2个bit(i=2,bit1)的值是否为1,若所述invld信号的bit1为1,则取所述left-data3的低30个字节赋值给left-data2的高30个字节,left-data2的低2个字节赋值为0;若所述invld信号的bit1为0,则取所述left-data3的全部字节赋值给left-data2;步骤s205,判断所述invld信号的第1个bit(i=1,bit0)的值是否为1,若所述invld信号的bit0为1,则取所述left-data2的低31个字节赋值给left-data1的高31个字节,left-data2的低1个字节赋值为0;若所述invld信号的bit0为0,则取所述left-data2的全部字节赋值给left-data1;所述left-data1即是所述第二数据。
data2的高1个字节赋值为0,若所述pos信号的bit0为0,则将所述right-data2的全部字节赋值给right-data1。
[0056]
具体而言,与左移类似,右移中由于每步都是获得256bit,所以每步都需要256个2mux,总的2mux1个数为256*5=1280。
[0057]
通过以上实施例的描述可知,对于前级模块输出256bit,后级模块输入256bit的场景,传统方案需要7936个2mux1;而本实施例的方案只需要1280*2=2560个2mux,资源(2mux1电路/基础单元个数)为传统方案的32.26%。如果前级模块、后级模块的位宽变得更大,比如都是512bit,那么资源将是传统方案的19.05%(传统方案的资源是32256,本实施例的方案的资源是512bit*6步移位*2次移位=6144)。此处只比较了mux的资源,没有比较数据拼接模块内部数据缓存和判断逻辑的资源,因为不管是本实施例的方案还是传统方案,数据拼接模块内的资源不变。由于资源的下降,将直接利好后端的布局布线,降低组合逻辑级数,提升电路的工作频率,进而提升soc芯片的性能。
[0058]
以上所描述的实施例的数据拼接模块仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现实施例的数据拼接模块的方案的目的。
[0059]
上述实施例的数据拼接模块若以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
[0060]
本技术的另一个实施例还提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现如上述实施例所述的数据传递方法。
[0061]
具体而言,所述计算机可读存储介质可以包括:能够携带所述计算机程序指令的任何实体或记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。
[0062]
本技术的另一个实施例提出一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述的数据传递方法。
[0063]
其中,电子设备还可以包括连接不同组件(包括存储器和处理器)的总线。存储器可以包括易失性存储器形式的计算机可读介质,例如随机存取存储器(ram)和/或高速缓存存储器。存储器也可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本技术各实施例的功能。电子设备也可以与一个或多个外部设备(例如键盘、指向设备、显示器等)通信,还可与一个或者多个使得用户能与该电子设备交互的设备通信,和/或与使得该电子设备能与一个或多个其他计算设备进行通信的任何设备(例如网卡)通信,这种通信可以通过输入/输出(i/o)接口进行,并且,电子设备还可以通过网络适配器与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。
[0064]
本技术的另一个实施例还提出一种芯片,包括上述实施例所述的数据拼接模块,或者上述实施例所述的电子设备。
[0065]
以上已经描述了本技术的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
技术特征:
1.一种数据拼接模块,其特征在于,包括:接收单元,用于接收第一数据和invld信号,所述invld信号指示所述第一数据的高位无效字节数;左移单元,用于根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据;右移单元,用于根据pos信号对第二数据进行逐级右移,获得第三数据,使得所述第三数据中的有效字节与所述pos信号指示的地址对齐;其中所述pos信号用于指示所述第一数据的有效数据在数据缓存单元中的存储地址;数据缓存单元,用于存储所述第三数据的有效字节;其中,当数据缓存单元中填满有效数据时,输出缓存数据。2.根据权利要求1所述的数据拼接模块,其特征在于,若所述第一数据、第二数据和第三数据的位宽均为m个字节,所述invld信号和pos信号均为n个bit的信号,则m和n满足以下关系:m小于或等于2的n次方。3.根据权利要求2所述的数据拼接模块,其特征在于,所述左移单元,具体用于:从高到低依次获取所述invld信号的每一个bit的值,若所述invld信号的第i个bit的值为1,则将left-data
i+1
的低k个字节赋值给left-date的高k个字节,且left-data
i
的低m-k个字节赋值为0;若所述第i个bit的值为0,则取所述left-data
i+1
的全部字节赋值给left-data
i
;;left-data
n+1
为所述第一数据;left-data1为所述第二数据;i等于1~n。4.根据权利要求2所述的数据拼接模块,其特征在于,所述右移单元,具体用于:从高到低依次获取所述pos信号的每一个bit的值,并根据所述pos信号的每一个bit的值进行数据右移;当获取到所述pos信号的第i个bit的值时,若所述pos信号的第i个位为1,则将取right-data
i+1
的高k个字节赋值给right-data
i
的低g个字节,且right-data
i
的高m-g个字节赋值为0,若所述pos信号的第i个位为0,则将right-data
i+1
的全部字节赋值给right-data
i
;其中,;right-data
n+1
为所述第二数据;right-data1为所述第三数据;i等于1~n。5.一种基于权利要求1所述数据拼接模块实现的数据传递方法,其特征在于,包括:接收第一数据和invld信号,所述invld信号指示所述第一数据的高位无效字节数;根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据;根据pos信号对第二数据进行逐级右移,获得第三数据,使得所述第三数据中的有效字节与所述pos信号指示的地址对齐,其中所述pos信号用于指示所述第一数据的有效数据在数据缓存单元中的存储地址;将所述第三数据的有效字节存储至所述数据缓存单元中;其中,当数据缓存单元中填满有效数据时,输出缓存数据。6.根据权利要求5所述的方法,其特征在于,若所述第一数据、第二数据和第三数据的位宽均为m个字节,所述invld信号和pos信号均为n个bit的信号,则m和n满足以下关系:m小于或等于2的n次方。7.根据权利要求6所述的方法,其特征在于,所述根据所述invld信号对所述第一数据
进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据,具体包括:从高到低依次获取所述invld信号的每一个bit的值,并根据每一个bit的值进行数据左移;当获取到所述invld信号的第i个bit的值时,若所述invld信号的第i个bit的值为1,则取left-data
i+1
的低k个字节赋值给left-data
i
的高k个字节,且left-data
i
的低m-k个字节赋值为0;若所述第i个bit的值为0,则取所述left-data
i+1
的全部字节赋值给left-data
i
;;left-data
n+1
为所述第一数据;left-data1为所述第二数据;i等于1~n。8.根据权利要求6所述的方法,其特征在于,所述根据pos信号对第二数据进行逐级右移,获得第三数据,具体包括:从高到低依次获取所述pos信号的每一个bit的值,并根据所述pos信号的每一个bit的值进行数据右移;当获取到所述pos信号的第i个bit的值时,若所述pos信号的第i个位为1,则将取right-data
i+1
的高g个字节赋值给right-data
i
的低g个字节,且right-data
i
的高m-g个字节赋值为0,若所述pos信号的第i个位为0,则将right-data
i+1
的全部字节赋值给right-data
i
;其中,;right-data
n+1
为所述第二数据;right-data1为所述第三数据;i等于1~n。9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现如权利要求5~8中任一项所述的数据传递方法。10.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如上述权利要求5~8中任一项所述的数据传递方法。11.一种芯片,其特征在于,包括权利要求1~4中任一项所述的数据拼接模块,或者权利要求10所述的电子设备。
技术总结
本申请涉及数据拼接模块及数据传递方法、介质、电子设备、芯片,包括:接收第一数据和invld信号,所述invld信号指示所述第一数据的高位无效字节数;根据所述invld信号对所述第一数据进行逐级左移,移除所述第一数据中的高位无效字节,得到第二数据;根据pos信号对第二数据进行逐级右移,获得第三数据,使得所述第三数据中的有效字节与所述pos信号指示的地址对齐,其中所述POS信号用于指示所述第一数据的有效数据在数据缓存单元中的存储地址;将所述第三数据的有效字节存储至所述数据缓存单元中;其中,当数据缓存单元中填满有效数据时,输出缓存数据。本申请能够降低芯片的成本和功耗,减少走线。减少走线。减少走线。
技术研发人员:张学利 刘柯
受保护的技术使用者:深圳云豹智能有限公司
技术研发日:2023.08.07
技术公布日:2023/9/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种光学成像镜头和摄像装置的制作方法 下一篇:水上飞船的制作方法