用FPGA实现数据远距离的高精度传输
第4位第5位第6位第7位最高位00100100101001010010101001010100101010100101010101101101101011010110101011010101101010101101010101
对8个位远逐位编码,8个生成矩阵为1维矢量。因此用FPGA实现编码时,采用查表法更方便,如表2所列。
之所以选用010等作为码字,是因为01相间在组合为帧发送时,可以减少连0或连1的出现概率。
(4)帧结构实现交错发送技术
为纠突发错,码字要按交错格式发送。因此,用帧实现码字的交错,数据发端按帧发送,数据收端按帧解码。8个码字共48位(6字节),加帧头2字节,所以,帧为8字节。为说明帧结构,暂以字母表示码字各位:
码字0:a2a1a0;码字3:d4d3d2ed1d0;
码字1:b2b1b0;码字4:e6e5e4e3e2e1e0;
码字2:c4c3c2c1c0;码字5:f6f5f4f3f2f1f0;
码字6:g8g7g6g5g4g3g2g1g0;
码字7:h8h7h6h5h4h3h2h1h0;
帧结构如表3所列。
图5纠突发错仿真图
利用帧头1和帧头2的重合特点来检测帧头,因为码字交错发送时相邻两字节对应位基本01相间的。由表3可得,第3字节到第8字节,相邻字节至少有6位不相同。因此可借用汉明距的纠错思想,认为帧头1和2不重合的位在2位以内,则表示正确收到帧头。
表3
帧头111010100帧头211010100第3字节a0c0e0f6f0g0g6h0第4字节a1c1e2d0f1g1g7h1第5字节a2c2e2d1f2g2g8h2第6字节b0c3e3d2f3g3h6h3第7字节b1c4e4d3f4g4h7h4第8字节b2e6e5d4f5g5h8h5
3FPGA实现设计
(1)单工条件下的实现
用两块FPGA分别实现编码器和解码器。按前面的编解码原理,编码器接收子站8位信息和1位同步,输出8字节×8位帧结构编码作远程传输,解码器收到帧结构编码,输出8位信息和1位同步给基站。(在实际应用中,子基站两MPU还要加入通常的累加和检错或偶校验检错。因不属编解码内容,不作讨论。)
单工电路原理如图2。
为检验电路设计,假设输入信号为11001010,编码输出的帧结构为表4。
表4
帧头111010100=D4帧头211010100=D4第3字节00000111=07第4字节11111000=FB第5字节00000111=07第6字节11111010=FA第7字节00000101=05第8字节10111010=BA
编码器仿真图如图3。
同步信号clk_in上升沿到来时,编码器读入数据信息11001010,并按内部的波特率clk;在下降沿产生正确的帧格式编码输出(D4、D4、07、FB、07、FA、05、BA)。
解码器的仿真图如图4所示。
当解码器判断收到帧头(两个D4),则将同步信号clk_out置高,再按内部波特率clk在上升沿收6字节的帧结构码字,在同步信号的下降沿输出译码(11001010)。
纠突发错仿真图如图5所示。
当传输过程出现突发错时,第5字节改为FF,第7字节改为00,译码器给出信息11001010。
纠突发错仿真图如图5所示。
当传输过程出现突发错时,第5字节改为FF,第7字节改为00,译码器给出信息11001010。
因为信息最低位的编码能纠1位错,最高位能纠4位错,所以,当第3~5字节、第6~8字节分别出现一个8位的突发错,译码器均能完全纠正。出现多个突发错时,相应的信息低位将出错,但信息高位因具有更多位的纠错能力而仍能保持准确性。我们设计的目标也正是尽可能保证高位的正确,以保证精度。
(2)基于单工的双工通信
此时一片FPGA内集成了编码器和解码器,与MPU相连的数据通信接口仍为8位数据线,由MPU发W/R写读信号来控制编解码,因此同一时间只能单向传送数据,编解码不能同时进行。准确地说,为半双工通信。(要改为全双工,须将MPU的数据线 《用FPGA实现数据远距离的高精度传输(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/166410.html
对8个位远逐位编码,8个生成矩阵为1维矢量。因此用FPGA实现编码时,采用查表法更方便,如表2所列。
之所以选用010等作为码字,是因为01相间在组合为帧发送时,可以减少连0或连1的出现概率。
(4)帧结构实现交错发送技术
为纠突发错,码字要按交错格式发送。因此,用帧实现码字的交错,数据发端按帧发送,数据收端按帧解码。8个码字共48位(6字节),加帧头2字节,所以,帧为8字节。为说明帧结构,暂以字母表示码字各位:
码字0:a2a1a0;码字3:d4d3d2ed1d0;
码字1:b2b1b0;码字4:e6e5e4e3e2e1e0;
码字2:c4c3c2c1c0;码字5:f6f5f4f3f2f1f0;
码字6:g8g7g6g5g4g3g2g1g0;
码字7:h8h7h6h5h4h3h2h1h0;
帧结构如表3所列。
图5纠突发错仿真图
利用帧头1和帧头2的重合特点来检测帧头,因为码字交错发送时相邻两字节对应位基本01相间的。由表3可得,第3字节到第8字节,相邻字节至少有6位不相同。因此可借用汉明距的纠错思想,认为帧头1和2不重合的位在2位以内,则表示正确收到帧头。
表3
帧头111010100帧头211010100第3字节a0c0e0f6f0g0g6h0第4字节a1c1e2d0f1g1g7h1第5字节a2c2e2d1f2g2g8h2第6字节b0c3e3d2f3g3h6h3第7字节b1c4e4d3f4g4h7h4第8字节b2e6e5d4f5g5h8h5
3FPGA实现设计
(1)单工条件下的实现
用两块FPGA分别实现编码器和解码器。按前面的编解码原理,编码器接收子站8位信息和1位同步,输出8字节×8位帧结构编码作远程传输,解码器收到帧结构编码,输出8位信息和1位同步给基站。(在实际应用中,子基站两MPU还要加入通常的累加和检错或偶校验检错。因不属编解码内容,不作讨论。)
单工电路原理如图2。
为检验电路设计,假设输入信号为11001010,编码输出的帧结构为表4。
表4
帧头111010100=D4帧头211010100=D4第3字节00000111=07第4字节11111000=FB第5字节00000111=07第6字节11111010=FA第7字节00000101=05第8字节10111010=BA
编码器仿真图如图3。
同步信号clk_in上升沿到来时,编码器读入数据信息11001010,并按内部的波特率clk;在下降沿产生正确的帧格式编码输出(D4、D4、07、FB、07、FA、05、BA)。
解码器的仿真图如图4所示。
当解码器判断收到帧头(两个D4),则将同步信号clk_out置高,再按内部波特率clk在上升沿收6字节的帧结构码字,在同步信号的下降沿输出译码(11001010)。
纠突发错仿真图如图5所示。
当传输过程出现突发错时,第5字节改为FF,第7字节改为00,译码器给出信息11001010。
纠突发错仿真图如图5所示。
当传输过程出现突发错时,第5字节改为FF,第7字节改为00,译码器给出信息11001010。
因为信息最低位的编码能纠1位错,最高位能纠4位错,所以,当第3~5字节、第6~8字节分别出现一个8位的突发错,译码器均能完全纠正。出现多个突发错时,相应的信息低位将出错,但信息高位因具有更多位的纠错能力而仍能保持准确性。我们设计的目标也正是尽可能保证高位的正确,以保证精度。
(2)基于单工的双工通信
此时一片FPGA内集成了编码器和解码器,与MPU相连的数据通信接口仍为8位数据线,由MPU发W/R写读信号来控制编解码,因此同一时间只能单向传送数据,编解码不能同时进行。准确地说,为半双工通信。(要改为全双工,须将MPU的数据线 《用FPGA实现数据远距离的高精度传输(第2页)》