LDPC码数据分配通用模块设计方案
硬件实现的过稃中该参数的实现手段如图4所示。本文引用地址:http://www.amcfsurvey.com/article/153700.htm
经过对原数值的两次移位,得到该数值的四分值,通过减法达到(1/λk)为0.75的目的。
4 通用化模块设计
下面的讨论不失一般性,以每个循环子矩阵巾有3组1为例进行说明。
如图5所示。A,B,C 3条线从“初始列号”开始向右侧进行编排,由于C线的ver_pos_C(ver_pos_A、ver_pos_B、ver_pos_C分别指循环子矩阵中每组1的列初始位置)值最大,即C线在最右端.这也就意味着在经过511—1—ver_pos_C(511是每个循环子矩阵的大小)行的运算之后,C线首先将要从最左边重新开始循环。因此,下面进行的数据初始化顺序从A,B,C,变为C,A,B,以此类推。
总而言之,每当排在最右侧的一条线到达最右侧的列时,下一步的CNU运算就将其变为本子矩阵的最先处理的数据。因为有这样的运行规律,于是形象的称这种运行方式为“反弹”。即,每当排在最右侧的线碰撞到循环子矩阵的右侧壁时便发生“反弹”,横向处理数据的顺序便进行一次向右的循环移位,将最右侧线的数据移到最左边,其他的数据顺序不变。
如此循环,直到把该循环子矩阵中所有的“1”位置全部处理完毕。每当循环子矩阵中发生一次“碰壁”后“定位位”就加1。
想要知道每条线横向的先后顺序就需要用到前面提到的“穿越”方法。首先确定3条水平直线,3条水平直线位于hor_pos_A,hor_pos_B,hor_pos_C位置上,记为hor_A,hor_B,hor_C,如图5所示。A,B,C 3条线从“初始行号”位置开始向右侧进行编排,A,B,C中的每条线,每当穿越hor_A,hor_B,hor_C中的直线时,A,B,C的横向计数便加1,因为每穿越一次除它本身之外的线时,在它左边就多一条线。因此本方法称之为“穿越”。
先以C线为例进行说明。C线从hor_pos_C点歼始,向右侧移动,当C线的行号“穿越”第一个除hor_C以外的水平直线hor_B的时候.此时C线上数据的编号加1。
5 加入通用化模块的高速译码实现方案
从上面的分析的出结论,当存储器内的数据进行向右侧的循环移位的时候,每当到达最右侧,通用定位模块检测到这一信息便将通用定位模块的输出加1。存储在定位位内。具体说明参见如图6所示。
该图说明了加入通用化定位模块后的数据组成。仍以图2所述矩阵为例,而且列初始位置小的一组1的数据从存储器1中读出,列初始位置大的一组1从存储器2中读出。当数据初始化到两个存储器内之后,进行水平运算的时候,首先提取第0行的数据以实线表示,此时的通用定位模块的定位位输出是0,输出到CNU进行运算的数据前端的定位位也是0。随着数据读取的进行,当进行到以虚线表示的第2行进行数据读取的时候,存储器1对应那组1达到了存储器的还没有到达存储器的最右侧,而此时从存储器2中读出的数据已经经过了该存储器的最右侧,开始重新从最左边读数,因此定位位被通用定位模块加1,变为1。
这样进行数据的读取工作,直到读完该循环子矩阵中所有的数据,所有读出的数据都在首位增加了一个“定位位”,然后被送往CNU参与水平运算。
评论