<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=181 </link><title>基于FPGA的RS编码器的设计与实现</title><author>cindy</author><pubDate>2009-12-01 9:32:41</pubDate><description><![CDATA[<strong>1 </strong><a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/RS编码">RS编码</a><strong>原理</strong>
<p>　　RS编码是一种线性的块编码，其表示形式为RS(N，K)。当编码器接收到一个数据信息序列，该数据信息序列被分割成若干长度为K的信息块，并通过运算将每个数据信息块编码成长度为N的编码数据块。在RS码中的码元符号不是二进制而是多进制符号，其中2m进制使用更为广泛。能纠正t个错的RS码具有，如表1参数所示。上述参数，t表明最多可以纠正t个随机错误符号。</p>
<p>&nbsp;<img alt="" src="http://editerupload.eaw.com.cn/200903/5dbbe09644ceb9dbbc1d7f35627f52af.jpg" width="580" height="151" /></p>
<p>&nbsp;</p>
<p>　　由于RS码是对多进制符号纠错，RS码可用于纠正突发错误，比如能纠两个八进制符号错误的RS(7，3)码，每个符号可用3 bit二进制符号表示。八进制的RS(7，3)码相当于二进制的(21，9)码，因此纠两个符号就相当于纠连续6 bit二进制符号的突发错误，然而二进制的(2l，9)码却没有纠6 bit突发错误的能力，它能纠任何2个随机错误以及长度&le;4的突发错误。</p>
<p>　　通用的RS编码的运算步骤：</p>
<p>　　(1)确定RS编码器的生成多项式g(x)，这里选用了最为常用的生成多项式，如式(1)所示。</p>
<p><img alt="" src="http://editerupload.eaw.com.cn/200903/c20f38854e10d35e5281b2e56411f790.jpg" width="580" height="97" /></p>
<p>&nbsp;</p>
<p>　　式中a定义为m阶初等多项式p(x)的根它可生成全部GF域的元素。(有关GF域的内容可参阅相关书籍)。</p>
<p>　　以RS(15，9)为例，RS(15，9)的生成多项式，如式(2)</p>
<p>&nbsp;</p>
<img alt="" src="http://editerupload.eaw.com.cn/200903/a9465e49a28c5600dd1f6c00af0ea663.jpg" width="580" height="87" />
<p>&nbsp;</p>
<p>　　(2)通过对取模运算产生校验信息多项式p(x)如式(3)</p>
<p><img alt="" src="http://editerupload.eaw.com.cn/200903/aa554408f7f8843980627fe2a8db7926.jpg" width="580" height="56" /><br />
<br />
　　式中m(x)表示RS编码码字中的数据信息，它是K一1阶的线性多项式。</p>
<p>　　(3)通过加法运算生成最终的编码后的多项式c(x)如式(4)</p>
<p><img alt="" src="http://editerupload.eaw.com.cn/200903/6d4ce5c65ee81d536a844ec80ef47549.jpg" width="580" height="54" />&nbsp;</p>
<p>　　RS码的编码主要是围绕码的生成多项式g(x)进行的，一旦生成多项式确定了，则码就完全确定了。</p>
<p>　　<strong>2 RS编码的设计实现</strong></p>
<p>　　在一些特定应用域中，RS码的设计与实现是比较困难的。RS码是在有限域上进行的代数运算，不同于常用的二进制系统，实现相对复杂一些，其复杂度主要决定于有限域的大小、码字的长度、采用的编码算法等，编码器的实现方式主要有以下几种：</p>
<p>　　(1)微处理器实现的RS编码。</p>
<p>　　通用的微处理器采用查表(Table&mdash;lookup)方法可以实现RS编码，首先需要产生有限域运算中的系数，存于内存中，就可以通过查表的方法实现编码了。</p>
<p>　　(2)利用DSP实现的RS编码。</p>
<p>　　DSP早已成为传统微处理器的一种替代品，现在的DSP芯片已能对一些特定的应用提供并行的处理结构，可以在DSP芯片中完成RS编码，不过DSP不是专为实现纠错中需要的特定功能设计的，同样也可以采用查表的方法在DSP中实现快速有限域运算。</p>
<p>　　(3)ASIC实现的RS编码。</p>
<p>　　ASIC是专用集成电路，由LSI&mdash;Logic Corpera&mdash;tion设计的ASIC芯片，有3 kB的RAM和4 kB的ROM，是实现高速编码器的最佳选择。</p>
<p>　　(4)<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/FPGA">FPGA</a>实现的RS编码。</p>
<p>　　FPGA能够快速和经济地将电路描述转化为硬件实现，而且对设计的修订也比较方便。而通常的ASIC需要的设计时间较长，制作费用也较高，也不便于调整。所以本设计是基于FPGA的RS编码设计。</p>
<p>　　如图1所示为本设计所采用的编码器的结构。</p>
<p><img alt="" src="http://editerupload.eaw.com.cn/200903/9552f97c5da18b8441ca91580f23c907.jpg" width="580" height="349" />&nbsp;</p>
<p>　　其工作原理如下：</p>
<p>　　(1)寄存器R0~R2t-1全部清零。开关接通A点，然后信息位分为两路送电路中，一路直接送入C(x)，一路送入除法电路并进行移位。每一个时钟移一个字节；</p>
<p>　　(2)在k个时钟结束的时候，信息位全部输入，完成除法功能。此时移位寄存器里保留了余式r(x)的系数，这就是RS码的校验位；</p>
<p>　　(3)在k+1个时钟到来的时候，开关接通B点。寄存器中的数据依次移出，送入信道。在经过2t个时钟后数据全部移出，得到2t个校验位。这2t个校验位跟在原先的尼个信息位的后面，组成(n，k)码输出。这样就完成了RS码的编码；</p>
<p>　　(4)寄存器R0～R2t-1全部清零，重复步骤(1)、(2)、(3)，完成对下一组RS码的编码。</p>
<p>　　<strong>3 RS编码乘法器的Verilog语言描述</strong></p>
<p>　　下面以RS(15，9)为例描述有限域的乘法实现思路如下：</p>
<p><img alt="" src="http://editerupload.eaw.com.cn/200903/a0014ea9ce2cf87b348ecb352b77c918.jpg" width="580" height="315" />&nbsp;</p>
<p><img alt="" src="http://editerupload.eaw.com.cn/200903/5419727210fc6d7f02a96e8ed0639994.jpg" width="580" height="747" />&nbsp;</p>
<p>&nbsp;</p>
<p>　　根据上面的式子可以写出RS(15，9)的6个乘法器。如：与g0相乘的结果</p>
<p>&nbsp;</p>
<img alt="" src="http://editerupload.eaw.com.cn/200903/8b4ccc29013fd3233d8a79a701853e91.jpg" width="580" height="649" />
<p>&nbsp;</p>
<p>　　其余乘法器的描述方法与此类似。完成对乘法域的语言描述，剩下的工作就是对加法器的描述了，由于加法实现比较简单，这里就不做介绍了。接下来就是控制输出信息位还是校验位的开关都是比较好设计的。</p>
<p>　　<strong>4 RS编码器的仿真</strong></p>
<p>　　本设计是实现了RS(15，9)的编码，本设计编码器的模块框图，如图2所示。</p>
<p>&nbsp;</p>
<p>&nbsp;<img alt="" src="http://editerupload.eaw.com.cn/200903/941fb11c3f1542d5376047f9e7068f82.jpg" width="580" height="359" /></p>
<p>　　各信号说明如下：</p>
<p>　　本设计信号时钟clk周期是40 ns，clrn是复位号，data表示信息输入有效，enable表示启动编码器，开始编码，x是4 bit信息符号，y是编码生成的4 bit码字。由下图编码图形可知，一次编码周期需要590．0 ns，最大编码速率为l700 MHz。因此，一次编码需要15个时钟周期。在25 MHz的时钟下，RS编码器仿真时序图，如图3和图4所示，并由仿真图可看出，本算法的编码速度高时延间隔不到半个周期。</p>
<p><br />
&nbsp;<img alt="" src="http://editerupload.eaw.com.cn/200903/db1c1f5a8e681c6b1c1105f58bf48085.jpg" width="580" height="616" />&nbsp;</p>
<p>　　RS编码测试数据如下：</p>
<p>　　输入信息：0，1，2，3，4，5，6，7，8；</p>
<p>　　编码器输出：0，1，2，3，4，5，6，7，8，B，C，0，5，7。</p>
<p>　　<strong>5 结束语</strong></p>
<p>　　RS编码的所有运算都是建立在有限域的基础上的，其中乘法器的设计是其编码技术的关键。本设计实现了RS(15，9)的编码设计和仿真，仿真输出结果与理论分析一致，基于相同的原理，可以实现任意数据块长度的RS编码器设计。</p>
<p>&nbsp;</p>]]></description></item></channel></rss>