很幼稚的想法就是最一开始居然想级联几个串行扰码器来实现并行,但是扰码是一个和你前后数据息息相关的设计,拆分并行并不可取,因为他只是将串行转化成并行而已。那如何转变成为并行呢? 首先扰码器的作用就是用来将有序数据流变成随机(无序)数据流。而且不是简单的无序,是要求扰码之后的数据流是类白噪声数据流。而且扰码器扰码之后,解扰器要解的开,恢复得回去。这就需要我们常说的本原多项式了。这些都是原理性内容不再一一阐述了。
如果要想做扰码器,首先要知道自己的扰码器最长周期是多少位的。例如在我们的工程中,由于扰码只是其中的一个部分,他需要承接上面发送数据的格式,这样一来,根据相关标准中指定的扰码多项式选择这样的一个扰码多项式。如果单纯的去做一个扰码器可以选择其他周期较短较简单的扰码多项式。
确定扰码多项式之后,下一个工作就是设计。
扰码的规则就是根据本原多项式系数为一的项的指数进行扰码。简单话说,扰码当前状态输出的扰码数值,是由当前状态和之前发送状态数值进行模二加法运算(异或)将结果输出。而具体是之前的那个状态呢?就是本院多项式中系数为一的项,如我们上面的例子中系数为1的项指数为39和58,那么我们就要将当前状态和前第39项与58项进行模二加法运算,算出来的值输出。示意图如下。
有些小机灵鬼可能已经发现这个图不就是是个电路图吗?没错,它确实也是一个电路图。由于扰码器每一项输出都与之前的状态有关,我们使用移位寄存器逐项存储扰码后的数据值,对应本原多项式中的系数为1的项数值与输入数值进行模二运算输出为当前数据,并将它存储进移位寄存器中供后面扰码时使用。
在许多工程项目中,在通信接口的设计中,通信协议对于扰码器的工作频率要求非常高,但是由于串行扰码器是1bit进行的,如果再要求频率过高的话,FPGA是无法实现如此高频率的。所以我们要对其进行并行化处理,以此达到高速的要求。
并行扰码器设计基于串行扰码器,其对应的本原多项式依然是,而其输入输出关系可以由上述扰码器输入输出的逻辑关系推导而出。按规则规范,扰码器与解扰器数据位的输入输出均为64位宽。
在上述的扰码器中,将反馈移位寄存器中零时刻存储值为为,扰码器输入与移位寄存器中数据与或的结果,即下一时刻输入至第一个寄存器的数据为,输入数据为scram_in。表示第S为寄存器在N时刻的存储值。由扰码器的输入输出关系可推导出在下一时钟到来时,各级寄存器中存储的数值满足以下关系:
(1)
以此类推,在第39个时钟到来时,第39位寄存器寄存器中已经是,故将公式中迭代为该公式,即可进行下次运算。
并行扰码结构就是由上述扰码多项式经过严格推演并进行处理,其结果推导为下式,推导出扰码结果的每一位输出都与当前输入以及在此之前的输出相关。由于后电路的要求,每一位一个扰码输出保持到下一次的扰码操作,作为下一次扰码的前一次输出参与下一轮的扰码操作,保持了扰码的连续性。由于扰码/解扰过程与本原多项式都有关,且扰码过程中每一位的输出都与其对应的寄存器数据位有关,故扰码解码实现时必须选择相同的本原多项式和初始值
就这样串行扰码器就设计出来了
|