该图说明了加入通用化定位模块后的数据组成。仍以图2所述矩阵为例,而且列初始位置小的一组1的数据从存储器1中读出,列初始位置大的一组1从存储器2中读出。当数据初始化到两个存储器内之后,进行水平运算的时候,首先提取第0行的数据以实线表示,此时的通用定位模块的定位位输出是0,输出到CNU进行运算的数据前端的定位位也是0。随着数据读取的进行,当进行到以虚线表示的第2行进行数据读取的时候,存储器1对应那组1达到了存储器的还没有到达存储器的最右侧,而此时从存储器2中读出的数据已经经过了该存储器的最右侧,开始重新从最左边读数,因此定位位被通用定位模块加1,变为1。
这样进行数据的读取工作,直到读完该循环子矩阵中所有的数据,所有读出的数据都在首位增加了一个“定位位”,然后被送往CNU参与水平运算。
www.55dianzi.com
增加了通用定位模块对CNU的结构也有所影响。文献中曾给出CNU运算结果的四维存储方法,存储的信息包括最小值,次小值,最小值的位置和符号位,该存储方法大大节约了存储器开销。然而当每个循环子矩阵中不止有一组1的时候,采用了通用化的定位模块,从存储器中读出的数据也增加了一位“定位位”,此时的CNU结构需要发生改变,来适应做出的调整。具体变化如图7所示。
图中的输入端数据的头部都加入了一位“定位位”,该位不参与CNU的比较运算过程,因此单独将改为取出,在图中最下方标记出来。
若每个循环子矩阵中有两组1,使用图7中的CNU进行运算的时候,CNU的输入端总是把每个列块对应的两个M存储器中的存储器1连接在比较器的上方接口,存储器2连接在比较器的下方接口,例如D000连接第一列块的存储器1,D001连接第一列块的存储器2。这样进行的排列在“位置标记”模块的输出端可以得到最小值的位置是在D000~D111中的哪一个。然后将这一输出前加上该列块的“定位位”信息进行存储,这一行数据的其他“定位位”信息全部删除。
在垂直运算的过程中,需要利用上述信息确定求列和时参与运算数据的具体位置。列运算的实现方案如图8所示。现在假设进行循环子矩阵的第一列的列运算,需要得到的信息是第1列两个数据的值。下面以第2行第1列的数据为例进行说明。
第2行的数据经过水平运算后存储在R存储器中的对应位置上,该位置存储信息的格式如图中最左侧所示。若水平运算求得的最小值不在该子矩阵的列块范围内,那么该子矩阵中所有的数据全部以该行最小值输出参与垂直运算。
但是若水平运算求得的最小值在该子矩阵的列块内,那么就需要用“穿越”的方法确定所需数据在该列块中是水平方向上的第几个数据,确定了这一点后,就能够利用水平运算的结果中的“定位位”来判断该值是最小值还是次小值了。
从整个实现过程中可以看出,陔通用模块引入之后,可以通过流水的操作来消除对速度的影响,而且该模块的引入没有对存储资源构成任何多余的消耗。
另外从该方法的实现过程可以看出,该方法适用于BP算法、最小和算法以及最小和算法的改进算法,所以该方法也具有良好的算法通用性。
通过ISE中Xinlin公司V5-330芯片上的仿真可以看出该方法的资源消耗情况。时钟频率120 MHz。
6 结束语
本章还介绍了通用化模块的设计方法,针对循环子矩阵中不止有一组1的情况,利用了校验矩阵中循环子矩阵的自身特点,设计了能够自动识别1排列情况的模块,以利于垂直运算过程中自动调用水平运算的结果。该模块的加入不会对译码速度和存储资源造成任何消耗,而且有助于未来成熟高效地开发高速译码设备。
本文关键字:通用 综合-其它,单片机-工控设备 - 综合-其它