一种位宽变换的实现方法及系统
技术领域
本发明涉及通信技术领域,具体涉及一种位宽变换的实现方法及系统。
背景技术
在实际应用中,很多应用涉及到位宽变换,例如光传输设备领域、以太网领域等,但是不同应用需要位宽变换的参数不一致。现有的技术中,都是针对特定的应用开发出特定的方法来实现位宽变换,通用性较低。并且,针对每种不同的参数(不同的被转换位宽和转换位宽),都要重新开发相应的方法来实现位宽变换的功能,导致开发时间过长。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种位宽变换的实现方法及系统,可以实现位宽的灵活配置,提高通用性,缩短开发时间。
为达到以上目的,一方面,采取一种位宽变换的实现方法,包括步骤:比较被转换位宽m和转换位宽n,在m≠n时,计算m和n的最小公倍数,并计算最小公倍数除以m的值为a和最小公倍数除以n的值为b;
当m>n时,计算一个转换周期内的拼接向量,计算一个转换周期内的每次转换对应的拼接计数器的值,将输入信号缓存b-a拍,得到b-a个移位信号,根据拼接向量和拼接计数器的值得到输出信号;
当m<n时,将输入信号缓存a-b拍,得到a-b个移位信号,将转换周期内同一转换时刻的输入信号以及移位信号组合成多位宽信号,从当前转换时刻的多位宽信号中提取输出信号。
优选的,当m=n时,将输入信号直接传输到输出信号。
优选的,一个转换周期内,总共需要转换的次数为m和n的最小公倍数除以n。
优选的,所述拼接向量的位宽为m和n的最小公倍数除以n,拼接向量的每个比特对应一个转换周期内的一次转换,拼接向量的最低比特即最右侧的比特位定义为比特0;当一个转换周期内某次转换需要拼接时,相应比特置1,否则相应比特置0;一个转换周期内的每次转换依次对应拼接向量的一个比特,且第一次转换对应拼接向量的比特0。
优选的,通过m/n的整数值,计算第一次拼接发生在该转换周期内的第几次转换处,该次转换的数值为所述整数值加1,且该次转换对应的比特置1;后续每次拼接的两个输入数据中,后一个输入数据的剩余比特个数为r,当r%n≠0时,通过计算r/n的整数值,得到下一次拼接发生在该转换周期内的第几次转换处,该次转换的数值为上次转换的数值加上所述整数值再加1,且该次转换对应比特置1;直至r%n=0,结束该转换周期的计算。
优选的,计算一个转换周期内的每次转换对应的拼接计数器的值包括:在一个转换周期内,依次计算拼接向量对应比特的取值,若取值为1时,拼接计数器保持上一次的值;取值为0时,拼接计数器的值加1;其中,每个转换周期内第一次转换计算出的拼接计数器的值为0,每次转换拼接计数器计算一次取值。
优选的,当m>n时,根据拼接向量和拼接计数器的值得到输出信号包括:当拼接向量的第k比特的值为0时,表示该转换周期内第k+1次转换不需要拼接,所述第k+1次转换输出的数据内容为data(cnt)的第m-(n*k)%m-1到第m-(n*k)%m-n个比特,cnt为拼接计数器的值。
优选的,当m>n时,根据拼接向量和拼接计数器的值得到输出信号包括:当拼接向量的第k比特的值为1时,表示该转换周期内第k+1次转换需要拼接,则第k+1次转换输出的数据内容为data(cnt+1)的第m-(n*k)%m-1个到第0个比特以及data(cnt)的第m-1个到第m-(n-(m-(n*k)%m))个比特的组合,cnt为拼接计数器的值。
优选的,当m<n时,将转换周期内同一转换时刻的输入信号以及移位信号组合成多位宽信号data_sum,其位宽为(a-b+1)*m,信号data(a-b)的最高比特放在data_sum的最高比特位,data0的最低比特放在data_sum的最低比特位;转换周期内第k+1次转换提取的数据内容为第(a-b+1)*m-1-(n-m)*k到(a-b+1)*m-(n-m)*k-n个比特,k=0、1…(b-1);其中data0为输入信号,data(a-b)为第a-b个移位信号。
本发明还提供一种位宽变换的实现系统,包括:
比较模块,其用于比较被转换位宽m和转换位宽n;
拼接计数器,其用于当m>n时,对每个转换周期内的每次转换计数;
计算模块,其用于在m≠n时,计算m和n的最小公倍数,并计算最小公倍数除以m的值为a和最小公倍数除以n的值为b;还用于当m>n时,计算一个转换周期内的拼接向量;
输出模块,其用于当m>n时,将输入信号缓存b-a拍,得到b-a个移位信号,根据拼接向量和拼接计数器的值得到输出信号;还用于当m<n时,将输入信号缓存a-b拍,得到a-b个移位信号,将转换周期内同一转换时刻的输入信号以及移位信号组合成多位宽信号,当前转换时刻的多位宽信号中提取输出信号。
优选的,所述输出模块还用于在比较模块判断出m=n时,直接将输入信号作为输出信号输出。
优选的,所述计算模块包括:
最小公倍数计算单元,其用于计算m和n的最小公倍数;
拼接向量计算单元,其用于当m>n时,计算一个转换周期内的拼接向量。
上述技术方案具有如下有益效果:
通过提供最小公倍数计算函数、拼接向量计算函数、以及拼接计数器计算函数,得到各个函数的值,根据这些函数值可自动将输入信号转换为不同位宽的输出信号。本发明对被转换位宽和转换位宽的位宽参数无要求,便于移植,提高通用性;而且适用于不同的参数,不用重新开发方法,大大缩减了开发时间。
附图说明
图1为本发明位宽变换的实现方法实施例的示意图;
图2为本发明位宽变换的实现方法另一实施例的输出数据提取示意图;
图3为本发明位宽变换的实现方法再一实施例的输出数据提取示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
如图1所示,本实施例提供一种位宽变换的实现方法,包括步骤:
S1.接收输入的参数(包括被转换位宽和转换位宽),比较被转换位宽m和转换位宽n,如果m>n,进入S2;如果m<n,进入S4;如果m=n,进入S6。
S2.计算m和n的最小公倍数,并计算最小公倍数除以m,得到的值为a,计算最小公倍数除以n,得到的值为b,则a<b;并且b为一个转换周期内,总共需要转换的次数。计算一个转换周期内的拼接向量,计算一个转换周期内的每次转换对应的拼接计数器的值。
S3.将输入信号缓存b-a拍,得到b-a个移位信号,根据拼接向量和拼接计数器的值提取输出信号,结束。
S4.同样计算m和n的最小公倍数,并计算最小公倍数除以m,得到的值为a,计算最小公倍数除以n,得到的值为b,则a>b;并且b为一个转换周期内,总共需要转换的次数。
S5.将输入信号缓存a-b拍,得到a-b个移位信号,将转换周期内同一转换时刻的输入信号以及移位信号组合成多位宽信号,当前转换时刻的多位宽信号中提取输出信号,结束。
S6.将输入信号直接传输到输出信号,结束。
上述步骤中,最小公倍数等于两个数据的乘积除以最大公约数,最大公约数可以使用辗转相除法求得。
上述拼接向量的位宽为m和n的最小公倍数除以n,拼接向量具有多个比特,每个比特依次对应一个转换周期内的每次转换,拼接向量的最低比特即最右侧的比特位定义为比特0,且比特0对应第一次转换。例如,当一个转换周期内,某次转换需要拼接时,相应比特置1,否则相应比特置0,一个转换周期内的第1次转换对应拼接向量的比特0,第2次转换对应比特1,第3次转换对应比特2,并依次类推。
基于上述实施例,提供一种m>n时,如何计算拼接向量、拼接计数器的值以及得到输出信号的具体实施例,计算拼接向量包括如下步骤:
a201.通过m/n的整数值,计算第一次拼接发生在该转换周期内的第几次转换处,该次转换的数值为所述整数值加1,且该次转换对应的比特置1。例如m/n的整数值为q1,得到第一次拼接发生在该转换周期内的第(q1+1)次转换处,则第1~q1次转换不需要拼接,拼接向量的比特(q1-1)到比特0取值为0,比特q1取值为1。
a202.进行第一次拼接,具体为该转换周期内,第一个输入数据的比特(m%n-1)到比特0,与第二个输入数据的比特(m-1)到比特(m-(n-m%n))的组合。
a203.计算拼接的两个数据中,后一个输入数据的剩余比特个数r,判断r%n是否等于0,若果是,r%n=0,进入a205;如果否,r%n≠0,进入a204。
a204.计算r/n的整数值,得到下一次拼接发生在该转换周期内的第几次转换处,该次转换的数值为上次转换的数值加上所述整数值再加1,且该次转换对应比特置1;然后转入a203。
例如,r/n的整数值为q2,说明第二次拼接发生在该转换周期内的第((q1+1)+(q2+1))次转换处,即(q1+q2+2),而拼接向量的比特比转换次数少1,则拼接向量的比特(q1+q2+1)置为1。第二次拼接,将该转换周期内第二个输入数据的比特(r1%n-1)到比特0,和第三个输入数据的比特(m-1)到比特(m-(n-r1%n))进行了组合。当第二次拼接完成后,后一个输入数据的剩余比特个数r为m-(n-r1%n),转入a203进行下一次判断。
a205.结束该转换周期的判断,计算出多次拼接发生在哪些转换处,得到整个转换周期内的拼接向量数值,以及输出数据使用哪些比特。
本实施例中还包括一个转换周期内的每次转换对应的拼接计数器的值,用于计算从哪一组移位信号中提取输出数据。具体方法是计算一个转换周期内的每次转换对应的拼接向量为0的个数,即在一个转换周期内,依次计算拼接向量对应比特的取值,若取值为1时,拼接计数器保持上一次的值;取值为0时,拼接计数器的值加1;其中,每个转换周期内第一次转换计算出的拼接计数器的值为0,每次转换拼接计数器计算一次取值。
例如:
一个转换周期内的第1次转换对应的拼接计数器的值:当拼接向量比特0的取值为0时,拼接计数器的取值为0;
一个转换周期内的第2次转换对应的拼接计数器的值:当拼接向量比特1的取值为0时,拼接计数器的值加1,否则保持上一次转换时的值;
一个转换周期内的第3次转换对应的拼接计数器的值:当拼接向量比特2的取值为0时,拼接计数器的值加1,否则保持上一次转换时的值;
依次类推,可得到一个转换周期内的每次转换对应的拼接计数器的值。
当m>n时,根据拼接向量和拼接计数器的值得到输出信号包括:
通过data(cnt)表示输入和移位信号,输入信号定义为data0,使用移位寄存器,将输入信号缓存b-a拍,得到b-a个移位信号,分别定义为data1、data2、data3…data(b-a)。
当拼接向量的第k比特的值为0时,表示该转换周期内第k+1次转换不需要拼接,则该转换周期内第k+1次转换输出的数据内容为data(cnt)的第m-(n*k)%m-1到第m-(n*k)%m-n个比特;其中,cnt为拼接计数器的值。
当拼接向量的第k比特的值为1时,表示该转换周期内第k+1次转换需要拼接,则第k+1次转换输出的数据内容为data(cnt+1)的第m-(n*k)%m-1个到第0个比特以及data(cnt)的第m-1个到第m-(n-(m-(n*k)%m))个比特的组合,cnt为拼接计数器的值。
基于上述实施例,提供一种m<n时,提取输出信号的具体方法,其包括:
计算m和n的最小公倍数,并计算最小公倍数除以m,得到的值为a,计算最小公倍数除以n,得到的值为b,则a>b。
输入信号定义为data0,使用移位寄存器,将输入信号缓存a-b拍,得到a-b个移位信号,分别定义为data1、data2、data3…data(a-b)。将转换周期内同一转换时刻的输入信号以及移位信号组合成多位宽信号data_sum,其位宽为(a-b+1)*m,信号data(a-b)的最高比特放在data_sum的最高比特位,data0的最低比特放在data_sum的最低比特位。从转换周期内当前转换时刻的data_sum信号中提取输出信号,如转换周期内第k+1次转换提取的数据内容为第(a-b+1)*m-1-(n-m)*k到(a-b+1)*m-(n-m)*k-n个比特,k=0、1…(b-1),其中data0为输入信号,data(a-b)为第a-b个移位信号。
根据上述实施例,提供一种被转换位宽m=9,转换位宽n=4的实现方法。其中,m>n,计算被转换位宽m和转换位宽n的最小公倍数为36,一个转换周期内总共需要转换的次数为m和n的最小公倍数除以n,即为9。
设计一个多位宽的拼接向量,拼接向量的位宽为m和n的最小公倍数除以n,即为9。当一个转换周期内某次转换需要拼接时,则拼接向量的相应比特置1,否则置0;例如:第1次转换对应比特0,第2次转换对应比特1,以此类推,得到第9次转换对应比特8。
拼接向量的具体计算包括:
b101.计算m/n的整数值q1,计算结果为q1=2,得到第一次拼接发生在该转换周期内的(q1+1)次转换处,即第3次转换处,说明第1~2次转换不需要拼接,则拼接向量比特1到比特0的取值为0,比特2置1。
b102.第一次拼接使用了该转换周期内第一个输入数据的比特(m%n-1)到比特0,即比特0,以及第二个输入数据的比特(m-1)到比特(m-(n-m%n)),即比特8~6。
b103.第一次拼接完成后,该转换周期内第二个输入数据剩余比特个数r定义为r1=m-(n-m%n),即为6,且r1%n不等于0。计算r/n的整数值q2,计算的结果为q2=1,得到第二次拼接发生在该转换周期内的第((q1+1)+(q2+1))次转换处,即第5次转换处,所以拼接向量比特4取值为1。
b104.第二次拼接使用了该转换周期内第二个输入数据的比特(r1%n-1)到比特0,即比特1~0,和第三个输入数据的比特(m-1)到比特(m-(n-r1%n)),即比特8~7。
b105.第二次拼接完成后,该次拼接的第二个输入数据的剩余比特个数r定义为r2=m-(n-r1%n),即为7,且r2%n不为0,计算r2%n的整数值q3,结果为q3=1,得到第三次拼接发生在该转换周期内的第((q1+1)+(q2+1)+(q3+1))次转换处,即第7次转换处,即拼接向量比特6的取值为1。
b106.第三次拼接使用了该转换周期内第三个输入数据的比特(r2%n-1)到比特0,即比特2~0,和第四个输入数据的比特(m-1)到比特(m-(n-r2%n)),即为比特8。
b107.第三次拼接完成后,新的剩余比特个数r为r3=m-(n-r2%n),即为8,且r3%n为0,则结束拼接向量的计算,拼接向量的剩余比特全为0。由此得到拼接向量比特8~0为001010100,其中最右侧为最低位,即为比特0,最左侧为最高位,即为比特8。
本实施例中,通过计算一个转换周期内的每次转换对应的拼接向量为0的个数,来计算从哪一组移位信号中提取输出数据,具体包括:
拼接向量比特0为0,该转换周期内第1次转换对应的拼接计数器的值为0;
拼接向量比特1为0,该转换周期内第2次转换对应的拼接计数器的值为1;
拼接向量比特2为1,该转换周期内第3次转换对应的拼接计数器的值为1;
拼接向量比特3为0,该转换周期内第4次转换对应的拼接计数器的值为2;
拼接向量比特4为1,该转换周期内第5次转换对应的拼接计数器的值为2;
拼接向量比特5为0,该转换周期内第6次转换对应的拼接计数器的值为3;
拼接向量比特6为1,该转换周期内第7次转换对应的拼接计数器的值为3;
拼接向量比特7为0,该转换周期内第8次转换对应的拼接计数器的值为4;
拼接向量比特8为0,该转换周期内第9次转换对应的拼接计数器的值为5。
如图2所示,本实施例中,将输入信号移位,根据前面所述的拼接向量和拼接计数器的值,可得到输出信号。其中,m和n的最小公倍数除以m等于a,得到a=4;m和n的最小公倍数除以n等于b,得到b=9。输入信号定义为data0,在一个转换周期内,输入信号连续输入的数据内容为d0、d1、d2、d3;使用移位寄存器,将输入数据缓存b-a=5拍,得到5个移位信号,分别定义为data1、data2…data5,其中data0、data1…data5的数据位宽均为9;根据拼接向量、拼接计数器的值提取输出信号具体包括:
一个转换周期内的第1次转换对应的拼接向量的比特0为0,则该转换周期内的第1次转换不需要拼接,则第1次转换输出的数据内容为data(cnt)的第m-(n*k)%m-1到第m-(n*k)%m-n个比特,即为data0的第8到第5个比特,此时data0的数据内容为d0,故第1次转换提取的数据内容为d0的比特8~5。
一个转换周期内的第2次转换对应的拼接向量的比特1为0,则该转换周期内的第2次转换不需要拼接,则第2次转换输出的数据内容为data(cnt)的第m-(n*k)%m-1到第m-(n*k)%m-n个比特,即为data1的第4到第1个比特,此时data1的数据内容为d0,故第2次转换提取的数据内容为d0的比特4~1。
一个转换周期内的第3次转换对应的拼接向量的比特2为1,则该转换周期内的第3次转换需要拼接,则第3次转换输出的数据内容为data(cnt+1)的第m-(n*k)%m-1个到第0个比特和data(cnt)的第m-1个到第m-(n-(m-(n*k)%m))个比特的组合,即为data2的第0个和data1的第8个到第6个比特的组合,此时data2的数据内容为d0,data1的数据内容为d1,故第3次转换提取的数据内容为d0的比特0和d1的比特8~6。
一个转换周期内的第4次转换对应的拼接向量的比特3为0,则该转换周期内的第4次转换不需要拼接,则第4次转换输出的数据内容为data(cnt)的第m-(n*k)%m-1到第m-(n*k)%m-n个比特,即为data2的第5个到第2个比特,此时data2的数据内容为d1,故第4次转换提取的数据内容为d1的比特5~2。
一个转换周期内的第5次转换对应的拼接向量的比特4为1,则该转换周期内的第5次转换需要拼接,则第5次转换输出的数据内容为data(cnt+1)的第m-(n*k)%m-1个到第0个比特和data(cnt)的第m-1个到第m-(n-(m-(n*k)%m))个比特的组合,即为data3的第1个到第0个比特和data2的第8个到第7个比特的组合,此时data3的数据内容为d1,data2的数据内容为d2,故第5次转换提取的数据内容为d1的比特1~0和d2的比特8~7。
按照上面的内容依次类推,可得到后续第6到9次转换输出的数据内容。由此可见,输出信号可按照顺序依次提取输入数据内容。
本发明还提供一种被转换位宽m=4,转换位宽n=9的实现方法。其中,m<n,计算被转换位宽m和转换位宽n的最小公倍数为36,一个转换周期内总共需要转换的次数为m和n的最小公倍数除以n,即为4。
如图3所示,将输入信号移位,得到输出信号具体包括:m、n的最小公倍数除以m等于a,则a=9;m、n的最小公倍数除以n等于b,则b=4。输入信号定义为data0,在一个转换周期内,输入信号连续输入的数据内容为d0、d1、d2、d3…d8。使用移位寄存器,将输入信号缓存a-b=5拍,得到5个移位信号,分别定义为data1、data2、data3…data5,其中data0、data1…data5的数据位宽为4。将转换周期内同一转换时刻的输入信号以及移位信号组合成多位宽信号data_sum,其位宽为(a-b+1)*m,即为24,信号data5的最高比特放在data_sum的最高比特位,data0的最低比特放在data_sum的最低比特位;从转换周期内当前转换时刻的data_sum信号中提取输出信号,如转换周期内第k+1次转换提取的数据内容为第(a-b+1)*m-1-(n-m)*k到(a-b+1)*m-(n-m)*k-n个比特,k=0、1…(b-1)。
当信号data5的数据内容为d0时,为该转换周期内的第1次转换,此时data_sum的数据内容为{d0,d1,d2,d3,d4,d5},从当前时刻的data_sum中提取的数据比特范围为(9-4+1)*4-1-(9-4)*0到(9-4+1)*4-(9-4)*0-9个比特,即data_sum的比特23~15,即提取的数据内容为d0的所有比特、d1的所有比特、以及d2的比特3的组合。
当信号data5的数据内容为d1时,为该转换周期内的第2次转换,此时data_sum的数据内容为{d1,d2,d3,d4,d5,d6},从当前时刻的data_sum中提取的数据比特范围为(9-4+1)*4-1-(9-4)*1到(9-4+1)*4-(9-4)*1-9个比特,即data_sum的比特18~9,即提取的数据内容为d2的比特2~0、d3的所有比特、以及d4的比特3~2的组合。
依次类推,得到当信号data5的数据内容为d3时,为该转换周期内的第4次转换,此时data_sum的数据为{d3,d4,d5,d6,d7,d8},从当前时刻的data_sum中提取的数据比特范围为(9-4+1)*4-1-(9-4)*3到(9-4+1)*4-(9-4)*3-9个比特,即data_sum的比特8~0,即提取的数据内容为d6的比特0、d7的所有比特、以及d8的所有比特的组合。
至此将该转换周期内的d0、d1…d8数据内容分别按照顺序提取,得到输出信号,该转换周期结束。
基于上述各实施例,提供一种位宽变换的实现系统,包括比较模块、拼接计数器、计算模块和输出模块。
比较模块,用于比较被转换位宽m和转换位宽n的大小。
拼接计数器,用于当m>n时,对每个转换周期内的每次转换计数。
计算模块,用于在m≠n时,计算m和n的最小公倍数,并计算最小公倍数除以m的值为a和最小公倍数除以n的值为b。还用于当m>n时,计算一个转换周期内的拼接向量。进一步的,计算模块包括最小公倍数计算单元和拼接向量计算单元,最小公倍数计算单元计算m和n的最小公倍数;拼接向量计算单元用于当m>n时,计算一个转换周期内的拼接向量。
输出模块,用于当m>n时,将输入信号缓存b-a拍,得到b-a个移位信号,根据拼接向量和拼接计数器的值得到输出信号。还用于当m<n时,将输入信号缓存a-b拍,得到a-b个移位信号,将转换周期内同一转换时刻的输入信号以及移位信号组合成多位宽信号,从当前转换时刻的多位宽信号中提取输出信号。还用于在比较模块判断出m=n时,直接将输入信号作为输出信号输出。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。