RS编码FPGA毕业设计 - 图文

更新时间:2024-01-20 12:06:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

内蒙古科技大学毕业设计说明书(毕业论文)

摘 要

RS码是多进制的BCH码,经过长期的发展后,RS编码的原理和编码技术已经十分成熟,具有同时纠正突发错误与随机错误的优点,以纠正突发错误尤为突出。广泛的应用于深空通信、卫星通信、数据传输、数据存储、移动通信、文件传输,数字音频和视频传输。

本论文以RS(7,3)码为例,深入研究了RS码的原理,性质,编码方法。使用Verilog HDL语言和QuartusⅡ6.0软件,建立RS编码模块,并搭建编码系统进行了仿真,得到正确的仿真波形图以及对波形图的仿真分析。在此基础上利用Altera公司芯片型号为FLEX 10K20RC208-4的FPGA下载编码系统,验证了RS编码结果的正确性,能将这一结果应用于实际的通信中。

关键词: RS码;编码系统;仿真分析;FPGA;

I

内蒙古科技大学毕业设计说明书(毕业论文)

Realization of RS Code Based on FPGA

Abstract

RS code is the BCH code of multi-systerm, after a long time of development, the theory and technology of RS code has been rather mature that it can rectify burst error and random error at the same time, especially burst error. It is widely used in deep space communication, satellite communication, data transmission and saving, mobile communication, document transmission, digital audio and video transmission.

This paper takes RS(7,3) code as an example, studies deeply in RS code theory, characteristic and the code method. Uses Verilog HDL language and Quartus II 6.0 software to establish the emulation of setting up the code system and the emulating analysis, and finally obtains the right emulating oscillograph trace and the emulating analysis of oscillograph trace, on the basis of all the conditions, using the chip FLEX 10K20RC208-4 of Altera corporation, downloading the code to achieve the obtainment of the right result from the code, through this result to achieve the goal of utilizing it into actual communication.

Key words: RS code; code system; emulating analysis; FPGA;

II

内蒙古科技大学毕业设计说明书(毕业论文)

目录

摘要 ................................................................................................................................ I Abstract ......................................................................................................................... II 第一章 FPGA及信道编码的发展 .............................................................................. 1

1.1 序言 ................................................................................................................. 1 1.2 FPGA的发展历程 ........................................................................................... 1 1.2.1 FLEX 10K嵌入式可编程逻辑器件简介 .................................................... 2 1.3 FPGA的发展趋势 ........................................................................................... 2 1.4 信道编码的发展 ............................................................................................. 3 1.4.1 信道编码的原因 .......................................................................................... 3 1.4.2 信道编码的定义和分类 .............................................................................. 3 1.5 信道编码定理及其发展 ................................................................................. 4 1.5.1 信道编码定理 .............................................................................................. 4 1.5.2 信道编码的发展 .......................................................................................... 5 1.5.3 信道编码的应用 .......................................................................................... 7 第二章 RS编码原理和算法 ..................................................................................... 10

2.1 RS码的相关代数理论 .................................................................................. 10 2.1.1 有限域 ........................................................................................................ 10 2.1.2 扩展域GF(2m)中的加减法和乘法 ........................................................... 11 2.1.3 有限域的本原多项式 ................................................................................ 12 2.2 RS码及相关算法 .......................................................................................... 13 2.2.1 RS码 ........................................................................................................... 13 2.2.2 RS编码 ....................................................................................................... 13 2.2.3 RS编码的算法 ........................................................................................... 15 第三章 Verilog HDL语言和Quartus II 6.0软件简介 ............................................ 17

3.1 Verilog HDL语言简介 .................................................................................. 17 3.2 Quartus II 6.0软件的使用 ............................................................................. 18 第四章 利用FPGA实现RS编码 ............................................................................ 23

4.1设计思想 ........................................................................................................ 23 4.2模块的搭建与仿真分析 ................................................................................ 23

III

内蒙古科技大学毕业设计说明书(毕业论文)

4.2.1 RS(7,3)编码模块rs_recode的仿真 ........................................................... 23 4.2.2高频分频器模块fp的仿真 ........................................................................ 26 4.2.3编码模块和高频分频器模块在FPGA上的管脚分配 ............................. 26 4.2.4 FPGA试验箱硬件设备的安装 .................................................................. 28 4.2.5在FPGA中观察编码结果 ......................................................................... 30 4.2.6固定信号产生模块sc的仿真 .................................................................... 32 4.2.7并行转串行模块shift的仿真 .................................................................... 33 4.2.8 3分频模块clk_div3和7分频模块clk_div7的仿真 .............................. 34 4.2.9试验结果和对仿真的分析 ......................................................................... 36 第五章 设计总结 ....................................................................................................... 42 参考文献 ..................................................................................................................... 43 附录A RS编码rs_recode的程序 ............................................................................. 44 附录B 高频分频模块fp的程序 .............................................................................. 47 附录C 3分频模块clk_div3的程序 ......................................................................... 48 附录D 7分频模块clk_div7的程序 ......................................................................... 50 附录E并串转换模块shift的程序 ............................................................................ 52 附录F固定信号产生模块sc的程序 ........................................................................ 54 附录G简单的Verilog HDL描述语言 ..................................................................... 55 致 谢 ....................................................................................................................... 57

IV

内蒙古科技大学毕业设计说明书(毕业论文)

第一章 FPGA及信道编码的发展

1.1 序言

作为一种可编程逻辑器件,现场可编程门阵列(Field Programmable Gate Array)的出现是可编程逻辑器件发展变化的必然,它的出现推动着可编程逻辑器件的进一步发展。因此可以说,了解了可编程逻辑器件的发展历程也就了解了FPGA的发展历程。

可编程逻辑器件(Programmable Logic Device,PLD)是20世纪70年代发展起来的一种新型器件,它的应用不仅简化了电路设计、降低了成本、提高了系统的可靠性,而且给数字系统设计带来了革命性的变化。可编程逻辑器件的发展是以微电子制作技术的不断进步为基础的,其结构和工艺的变化经历了一个不断发展变革的过程[1]。

1.2 FPGA的发展历程

20世纪70年代,早期的可编程逻辑器件只有可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(EEPROM) 3种。在这之后,出现了一类结构稍微复杂的可编程芯片,即可编程门阵列(Programmable Logic Array,PLA),PLA在结构上由一个可编程的与阵列和可编程的或阵列构成,阵列规模小,编程过程复杂烦琐,PLA既有现场可编程的,也有掩膜可编程的。在这之后出现了可编程逻辑器件(Programmable Array Logic,PAL),它由一个可编程的与平面和一个固定的或平面构成,是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术EEPROM技术3种。在PAL的基础上,又发展出了一种通用阵列逻辑(Generic Array Logic,GAL),如GAL168V8、GAL22V10等,它采用了输出逻辑宏单元结构和EEPRON工艺,实现了电可擦除、电可改写,由于其输出结构是可编程的逻辑宏单元,因而其设计有很强的灵活性,至今仍有许多应用。

早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但是由于其结构过于简单,只能实现小规模的电路设计。为了弥补这一缺陷,20世纪80年代中期,著名的逻辑器件厂商Altera和Xilinx分别推出了扩展型的复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)和类似于标准门阵列的现场可编程门阵列(Field Programmable Gate Array,FPGA)。CPLD和FPGA的功能基本相同,只是芯片内部原理和结构有些差别,这两种器件兼容了PAL和GAL器件的优点,具有体系结构灵活、逻辑资源丰富、集成度高以及使用范围广等特点,可用于实现较大规模的电路设计,编程也很灵活,所以被广泛应用于产品的原型设计和小批量生产之中。几乎所有使用

1

内蒙古科技大学毕业设计说明书(毕业论文)

PAL、GAL和中小规模通用数字集成电路的场合均可应用CPLD和FPGA器件。

FPGA在器件品种方面,由单一的数字型FPGA发展为超大规模的数字FPGA、新型的模拟FPGA(亦称FPAA)和具有数字和模拟混合的Mixed Signal FPGA(亦称FPMA)。根据现场编程原理不同,应用广泛的数字FPGA主要分为三类:

(1)基于SRAM技术的FPGA,主要的代表公司有美国的Xilinx公司、Atmel公司、Motorola公司等;

(2)基于EPROM、E2-PROM技术的EPLD和CPLD,主要的代表公司有Lattice公司、Altera公司;

(3)基于反熔丝技术的FPGA,代表公司为美国的Actel公司和Crosspoint公司[2]。 1.2.1 FLEX 10K嵌入式可编程逻辑器件简介

本实验所用FPGA的主芯片型号为FLEX 10K20RC208-4,属于Altera公司的FLEX 10K系列的可编程逻辑器件,Altera的FLEX 10K器件是工业界首例嵌入式PLD。FLEX即灵活的逻辑元件矩阵,它结合了所有实现常规门阵列兆功能所需的特性,由于具有高达250000的门单元,FLEX 10K系列提供了密度、速度和集成整个系统,包括多条32位总线,成为一个独立器件的特性。FLEX 10K器件是可重配置的,允许在装货出厂之前100%测试,设计者不需要管理不同ASIC设计产品的详细目录,FLEX 10K器件能够按需要的特定功能在线路板上实现配置。

FLEX 10K结构与嵌入式门阵列的结构相似,由于嵌入式兆功能不能实现自定义,限制了设计者的选择,相比之下,FLEX 10K器件是可编程的,在调试过程中,为使得重复设计变化更方便,它为设计者提供全面控制嵌入式兆功能和通用逻辑。每个FLEX 10K器件包含一个嵌入式阵列和一个逻辑阵列。嵌入式阵列用来实现各种各样的存储器功能或复杂逻辑功能,嵌入式和逻辑阵列的结合提供了嵌入式门阵列的高性能和高密度,使设计能在单个器件上实现整个系统[3]。

1.3 FPGA的发展趋势

自1984年美国Xilinx公司发明FPGA的概念以来,随着深亚微CMOSIC制作技术的发展,FPGA技术以其一系列应用优势,逐渐受到各国电子设计工程师的欢迎。当今FPGA技术已是电子应用领城广受欢迎的实用化技术,成为数字系统科研、样机试制、小批产品即时实现的最佳途径。FPGA技术发展和EDA技术的促进,使得采用通用的设计方法,现场实现用户的单片电子系统已不是遥远的梦想,电子设计的传统方式将发生变革。如今,工艺技术的进步使FPGA性能更强,FPGA器件已经成为当前主流的可

2

内蒙古科技大学毕业设计说明书(毕业论文)

编程逻辑器件之一。经过近20年的发展,可编程逻辑器件已经取得了长足的进步,资源更丰富,使用越来越方便。将来的可编程逻辑器件,密度会更高、速度会更快、功耗会更低,同时还会增加新的功能,向着集成可编程逻辑、CPU、存储器等组件的可编程单片机系统(System On Programmable Chip,SOPC)方向发展。而在新世纪,以FPGA为代表的数字系统现场集成技术正朝着以下几个方向发展:

(1)随着便携式设备需求的增长,对现场可编程器件的低压、低功耗的要求日益迫切。 (2)芯片向大规模系统芯片挺进,力求在大规模应用中取代ASIC。 (3)为增强市场竞争力,各大厂商都在积极推广其知识产权(IP)核心库。 (4)动态可重构技术的发展,将带来系统设计方法的转变[4]。

1.4 信道编码的发展

1.4.1 信道编码的原因

在实际信道上传输数字信号时,由于信道传输特性不理想及加性噪声的影响,接收端所收到的数字信号不可避免的会发生错误。为了在己知信噪比情况下达到一定的比特误码率指标,首先应该合理设计基带信号,选择调制解调方式,采用时域、频域均衡,使比特误码率尽可能降低。但实际上,在许多通信系统中的比特误码率并不能满足实际的需求,此时则必须采用信道编码(即差错控制编码)才能将比特误码率进一步降低,以满足系统指标要求。

差错控制编码的基本实现方法是在发送端将被传输的信息附上一些监督码元,这些多余的码元与信息码元之间以某种确定的规则相互关联、相互约束。接收端按照既定的规则校验信息码元与监督码元之间的关系,一旦传输发生差错,则信息码元与监督码元的关系就受到破坏,从而接收端可以发现错误乃至纠正错误。因此,研究各种编码和译码方法是差错控制编码所要解决的问题。

差错控制编码的目的是为了降低误码率,提高传输的可靠性。编码涉及到的内容也比较广泛,前向纠错编码(FEC)、线性分组码(汉明码、循环码)、RS码、BCH码、FIRE码、交织码、卷积码、TCM编码、Turbo码等都是差错控制编码的研究范畴。 1.4.2 信道编码的定义和分类

所谓的编码信道就是将调制解调包括在信道内的一种模型上的等效果,信源通过编码后被送入编码信道中,经过调制通过发送端在信道中发送,在接收端解调后接收,接收后,再通过解码恢复原始信号,并将恢复的原始信号发送给信宿,整个过程如图1.1所示。

3

内蒙古科技大学毕业设计说明书(毕业论文)

图1.1 通信系统简化模型

如果我们研究的是编码和解码,完全可以将调制解调与信道结合起来等效成一个信道,称之为编码信道。信息与通信系统中的编码有4种形式:信源编码、信道编码、密码编码和多址编码。信源编码解决了通信系统的有效性问题,通过压缩信源冗余信息来提高通信的效率;信道编码则是通过增加冗余位来达到保证通信系统的可靠性(通过牺牲带宽或传输速率来换取可靠性);密码编码则是保证了系统的安全性;多址编码主要是解决多用户通信问题。香农第二编码定理证明:用任意接近信道容量C的传输速率R传送并且传输的差错率可以任意小的编码方法是存在的。信道编码的任务就是寻找这种编码。

1.5 信道编码定理及其发展

1.5.1 信道编码定理

1948年,32岁的电子工程师,著名的数学家Shannon在Bell System Technical Jourmal上发表了一篇题为《通信的数学理论》的论文,从而奠定了信息理论的基础,他正式应用了概率理论研究和分析了通信系统。他将通信系统抽象为图1.2的基本框图,并且成功的定义了信息量的概念,由此提出了熵及信道容量的概念。

图1.2 数字传输系统的基本原理

4

内蒙古科技大学毕业设计说明书(毕业论文)

根据图1.2,信源随机的产生消息,一般用消息的统计特性来描述信源,消息通过信源编码,产生一定的数字序列,再通过信道编码增加冗余提高抗干扰能力。由于噪声源的存在,接收端的信号会有不同程度的畸变,这种畸变是由信道的物理特性和噪声源的统计特性决定的。解调器、信道译码器和信源译码器对接收到的信号进行译码,试图恢复出正确的消息,这个估计的消息最终送给了信宿。Shannon指出了任意给定的信源都有一个称为熵的量,它表征了信源的不确定性,正好是信源的下限(信源编码定理)。同时他还提出了著名的信道编码定理:任意给定的信道都有一个固有的量,称为信道容量。只要信息的传输速率低于信道容量,总可以找到一种编码方法,使得差错概率任意的小;反之,如果信息的传输速率超过信道容量,则不存在这样的编码方法。编码定理表明,信道容量正好等于信息传输速率的上界。

加性白高斯噪声(AWGN)信道是通信理论研究中最重要的信道模型之一。噪声的统计特性服从高斯分布N(0,σ2)。方差σ2=N0/2,N0为双边带噪声功率谱密度,即单位频带内的噪声功率。设传输的每符号的平均能量为Ex,信号周期为T,信道带宽为W,在理想情况下(按Nyquist准则),W=1/T,信号平均功率P=Ex/T。则信道的平均信噪比为:

SNR =P/N0W=Ex/2σ2=RcEb/N0 (1.1)

式中E是每比特的平均能量,Rc为码率,表示编码符号所承载的平均信息比特数(信息量)。由信息论的理论知识可知,在高斯白噪声信道下,信道容量

C = Wlog2(1+SNR) = Wlog2(1+P/WN0) = Wlog2(1+RcEb/N0) (1.2)

对于可靠通信,要求Rc(2Rc-1)/Rc。极限情况下

Eb/N0 = lim(2Rc-1/Rc) = ln 2 = -1.59 dB ,其中R→0; (1.3)

这就是带宽无限高斯白噪声信道的极限传输能力,也称为Shannon限。编码理论发展至今,就是在不断的寻找性能接近Shannon限的码。 1.5.2 信道编码的发展

自从Shannon发表其论文以来,信道编码就开始了迅速的发展。其发展历程如下:第一个分组码是纠正单个错误的Hamming码。在Shannon以前,W.Hamming已经发现了这类码,只是由于技术专利的缘故,于1950年才发表。1954年,J.Golay发现了Golay码。同年,I.S.Reed和D.E.Muller发现了Reed-Muller码(RM码)。1956年,D.SlePian

5

内蒙古科技大学毕业设计说明书(毕业论文)

给出了线性码、群码的系统描述。1957年,E.Prange发现了循环码。1960年,I.S.Reed和G..Solomon发现了Reed-Solomon码(RS码)。同年,R.C.Bose和D.K.Ray-Chaudhuri独立于A.Hocquenghem(1959年)发现了纠多个错误的码,后来人称之为BCH码。1970年,V.D.GoPPa发现了Goppa码。1982年,M.A.Tsfasman,S.G..Vlodut和T.Zink发现了代数几何码。从BCH码,RS码,Goppa码到代数几何码的发展过程中,GV限(Gilbert-Varshamove bound)起着不可忽略的作用。GV限是由E.N.Gilbert和R.R.Varshamov独立发现的。假定我们在有限域上考虑问题,给定一组非负整数n,k,d,只要满足

qn?k??n?1?i??(q?1) (1.4) ??i?i?0??d?2就可构造一个码长为n,维数为k、最小Hamming距离至少为d的q元线性分组码,这就是GV限。记归一化的最小Hamming距离为δ=d/n,编码速率R=k/n。渐近的GV限表明n→∞时,存在线性分组码,使得δ和R均严格大于0。渐近的GV限是衡量某类分组码好坏的一个标准。己经证明了Hamming码、RM码、BCH码等大部分己知的码都是渐近码。

在分组码的理论研究中,RS码扮演着重要的角色。RS码是有限域上的极大距离可分(MDS,maximum distance separable)码,具有参数(n,k,n-k+l),达到了Singleton限d≤n-k+1,从这个意义上讲,RS码是最佳的。BCH码可以看成某个RS码的子域子码,RS码又可以看成BCH码的特例,只不过符号域与位置域相同罢了。RS码的一个码字可以看作是某个多项式(取自一个特定的多项式集合)在一个特定的点集上的值。

卷积码的概念是由P.Elias于1955年发现的。尽管其代数结构和相应的理论结果没有分组码丰富,但由于其译码算法的实用性,因而在编码理论中占有重要地位。级联码(或称级连码,concatenated codes)是由G.D.Forney于1966年提出的。级联码一般以RS码作为外码,以卷积码作为内码。Forney的性能分析表明,级联码的性能改善了很多,而译码复杂度增加的并不多。实用分组码的代数译码算法1966年由E.R.Berlekamp提出的,1969年,Ma- ssey从序列综合的角度重新推导了这一算法,称为Berlekamp-Massey算法。Berlekamp-Massey算法的提出,是分组码走向实用的一个重要的里程碑。与分组码相比,卷积码的一个显著特点是软判决译码算法比硬判决译码算法复杂不了多少。1957年,J.M. Wozeneraft提出了序列译码算法。1964年,R.M. Fano提出的Fano译码算法也属于序列译码算法。1967年,A.J.Viterbi提出了卷积码的最大似然译码算法,后

6

内蒙古科技大学毕业设计说明书(毕业论文)

人称之为Viterbi算法,在通信工程领域得到了广泛应用。

70年代末80年代初,G.Ungerboeck把编码与调制相结合提出了网格编码调制(TCM,trellis-coded modulation)技术,这是编码理论的又一重要里程碑。继TCM之后,编码理论的重大发现当首推1993年C.Berrou,A.Glavieux和P.Thitimajshima发现的Turbo码。模拟结果表明,Turbo码的性能距离Shannon限仅差零点几个dB。尽管Turbo码的模拟性能卓越,其理论分析还很薄弱,或许正是这个原因,Turbo码的出现,在编码领域掀起了研究热潮。在探究Turbo码迭代算法的过程中,出现了一个活跃的研究方向:基于图的码(codes on graphs)。D.J.C.Mackay和R.M.Neal以及别的一些作者重新发现了R.G.Gallager于60年代提出的低密度一致校验(LDPC,low-density parity-check)码,其性能与Turbo码差不多[5]。

纠错编码领域的重要事件:

1948年,香农发表开创性文章《通信的数学理论》; 1950年,汉明发明了汉明码; 1955年,Elias引入了卷积码;

1960年,Bose、Ray-Chaudhuri发明了BCH码,Reed和Solomon提出了RS码; 1962年,Gallager提出LDPC了码;

1967年,Berlekamp引入了BCH/RS码的快速译码算法;

1968年,Gallager发表《Information theory and reliable communication》; 1971年,Viterbi引入了卷积码的最大似然译码; 1972年,BCJR算法的提出; 1982年,Ungerboeck引入编码调制;

1993年,BerrouGlaveieux和Thitimajshima提出了Turbo码; 1995年,MacKay重新发现了LDPC码;

2000年,Aji与McEliece总结了应用消息传递思想进行译码的码型; 2003年,Koetter和Vatdy提出了RS码的代数软判决译码。 以上就是信息理论的创建及信道编码的发展概况[6]。 1.5.3 信道编码的应用

随着信道编码理论的不断发展,信道编码技术在通信工程领域得到了广泛的应用,特别是数字通信的兴起,为信道编码提供了广阔的应用空间。可以毫不夸张的说,编码技术应用在各种数字通信系统中。正是由于应用了该技术,对数据传输进行差错控制,

7

内蒙古科技大学毕业设计说明书(毕业论文)

大大降低了误码率,提高了数据传输的正确率,实现了稳定通信。

纠错码的应用领域包括:深空通信、卫星通信、数据传输、移动通信、文件传输、数字音频和视频传输等。早期的编码理论主要应用于深空通信和卫星通信中。这主要有以下方面的原因:

(1)深空信道是最典型的无记忆AWGN(加性白高斯噪声)信道模型,而Shannon的信道编码定理正是基于此模型提出的一般性结论。理论分析结果和计算机仿真结果几乎和实际系统一致。

(2)深空信道的频带资源丰富,这就允许在系统中采用频带利用率低的码和BPSK调制方式。

(3)由于传输距离远,信号衰减严重,需要采用纠错能力强的码,这意味着译码复杂度提高,数据速率降低。但是,一般的深空通信都是非实时的,功率受限。

正是由于这些原因,纠错码技术自问世以来,就和深空通信结下了不解之缘。在深空通信中先后采用了RM码(软判决最大似然译码)、卷积码(软判决序列译码)及卷积码(软判决Viterbi译码)。1987年,空间数据系统顾问委员会(CCSDS,Consultative Committeeon Space Data Systems)采用(255,233)RS码和(2,1,7)卷积码构成串行级联码作为标准。其编码方案如图1.3所示。

图1.3 CCSDS级联码标准

外码采用RS码,内码为卷积码。外码使用软输入译码算法,由于其译码算法较复杂,内码只能利用软输入硬输出的维特比算法。在数据传输应用中,主要是采用了将编码和调制结合在一起的TCM网格编码调制。它提供了很大的功率增益,同时具有很高的频谱效率。

在计算机存储系统中广泛使用了纠错编码技术,包括高速计算机存储器,磁盘和光盘。使用的码型是著名的RS码。由于该码有极强的纠随机错误的能力及纠一定突发错

8

内蒙古科技大学毕业设计说明书(毕业论文)

误的能力,因此,是近50年来被广泛使用的一种码字。高速计算机存储系统对差错控制有如下要求:

(1)编译码速度要快以保证读写速度。这就要求利用组合逻辑电路来实现并行的编译码。

(2)码率相对要高一些。对高速存储系统而言,码率越低,意味着造价越高。 (3)常见的错误类型是字节型的错误。这与其实现存储的物理机制有关。一些物理损伤(比如光盘的划痕等)引起的错误具有突发的特征。

在半导体存储系统中最有名的码是纠错单检双(SEC/DED)码。其它的还包括SEC/DED/SBED码及SBEC/DBED码。

在光盘和磁盘系统中,所用的纠错码主要是RS码。同时RS码又不断的应用在CD(compact disc)和CD-ROM(CD-read-only memory)中。CD所使用的码字为互交织RS码(CIRC,cross-interleaved RS codes),它是在域GF(28)上,两个最小距离为5的缩短RS码的组合。在CD-ROM中,由于需要更强的纠错能力,因此,除了应用CIRC码外,还附加了循环冗余校验码(CRC,cyclic redundancy check)和两个缩短RS码的乘积码。

纠错码还广泛应用于数字视频系统中,由于在数字视频系统中要求差错控制能高速译码,因此直到20世纪90年代,强力纠错码才应用到该系统中。在1990年制定的ITU-TH.261标准中,建议使用(511,493)BCH码,这是第一个采用差错控制的数字视频标准。在MPEG-2数字视频标准中,使用了基于RS码的复杂差错控制,特别是在DVB中,使用了级联码,该级联码的外码是(204,188)RS码,内码为(2,l,7)CCSDS卷积码[7]。

9

内蒙古科技大学毕业设计说明书(毕业论文)

第二章 RS编码原理和算法

2.1 RS码的相关代数理论

群:若T是非空集合,在T内定义一种代数运算(用△表示),符合以下要求: (1)满足封闭性。对任意?,??T,恒有????T;

(2)满足结合律。对任意?,??T,有(???)?????(???);

(3)T中有一恒等元?存在,对任意??T,有??T,使?????????; (4)对任意??T,存在?的逆元??1?T,使????1???1????。 则称此集合T构成一个群。

阿贝尔群:若群T中,对任何?,??T,有???????,则称T为阿贝尔群。 域:非空元素集合Q,若在Q中定义了加和乘两种运算且满足下述公理: (1)Q关于加法构成阿贝尔群,其加法恒等元记为0;

(2)Q中非零元素全体对乘法构成阿贝尔群。其乘法恒等元(单位元)记为1; (3)加法和乘法间有如下分配律:

?(???)??????

(???)???????

则称Q是一个域,域中元素的个数为域的阶,元素个数有限的域称有限域,用GF(p)表示p阶有限域。有限域也称为伽罗华域,在编码理论中起着非常重要的作用。 2.1.1有限域

因为RS纠错编码是在有限域内进行运算的,所以有限域理论在其编码理论研究中起着特别重要的作用。有限域(或称伽罗华域)是指元素个数有限的域,域中元素的个数称为域的阶。通常用GF(p)表示p阶有限域。有限域的一个重要性质是每个有限域GF(p)至少要包含一个叫做?的本原元素,它能生成该域中的每个元素。

为了理解RS码的编码,有必要深入到称为伽罗华域的有限域中。对于任何质数p,存在一个有限域,表示为GF(p),其中包含p个元素。可以将GF(p)延伸为一个含有pm个元素的域,这称为GF(p)的扩展域,表示为GF(pm),m是一个非零正整数。注意,GF(p)是GF(pm)的子集。扩展域GF(pm)中的码元用于构造RS码。

二进制域GF(2)是GF(2m)的一个子域,类似于实数是复数的一个子域一样。除了数字0和1,在扩展域中还有特殊的元素,用一个新的符号?表示。GF(2)中任何非零元素都可以由?的幂次表示。元素的无限集G,就是根据元素{0,1,?}而形成的,后一个

10

内蒙古科技大学毕业设计说明书(毕业论文)

元素通过前一项乘以?而得。

G={0,1,?,?2,…,?j,…}={0,?0,?1 ,?2,…,?j,…} (2.1)

为了从G中得到有限元素的集合GF(2m),必须对G域施加一个条件,使它只能含有2m个元素,并且对乘法封闭。域元素对乘法封闭的条件可由下面的不可约多项式表示:

?(2m?1)?(2m?1)?1?0

?1??0 (2.2)

根据这个多项式限制条件,任何幂次等于或超过2m?1的域元素都可降阶为如下表示的幂次小于2m?1的元素:

所以有如下等价序列

?(2m?n)??(2m?1)?(1?n)??(1?n) (2.3)

,?2m{0,1,?,?,?,?012(2?{0,?,?,?,?,?m2(2m?2),?(2m?1),?}

?1),?0,?1,?} (2.4)

m从上面恒等式可以得到有限域GF(2m)的元素由下面序列构成:

(2 GF(2)={0,?,?,?,…,?m0

12?2)} (2.5)

2.1.2扩展域GF(2)中的加减法和乘法

为了找到一种遵守有限域内全部乘法性质的多项式乘法构成一个元素数为pm的有限域,首先,我们要求在一个集合内的任何两个多项式之积是本集合中的另一个多项式,以满足封闭性。只要该乘积是一个次数等于或低于m-1的多项式,就可以满足这一要求。对于次数等于或大于m的乘积多项式,可以取它相对于一个m次固定多项式的余项多项式。这里所需要的m次固定多项式就是本原多项式p(x)。它的最高次幂为m,而系数在GF(p)上,它是不可约多项式。一般地说,系数取自GF(p)的不可约多项式在GF(p)中无根,但在扩张域GF(pm)内有根。具体说,m次p(x)在扩张域GF(pm)内必有m个根。

在有限域GF(2m)中,2m个元素中的任意一个都可由阶数小于或等于m-1的不同多项式来表示,多项式的阶数是它的最高幂指数。将GF(2m)中每个非0元素用多项式?i(x)表示,其系数至少有一个不为0。对于i=0,1,…, 2m-2有

11

m

内蒙古科技大学毕业设计说明书(毕业论文)

ai(x)?ai,0?ai,1x?ai,2x?...+ai,m?1x2m?1

(2.6)

当m=8时,有限域表示为GF(28)。由于式(2.6)表明a0?a255,所以在该域中有255个非零元素,或者说总共有256个元素。GF(28)是GF(2)的扩展域,GF(28)中256个元素都可以用GF(2)中的两个元素0,1组合来表示,例如10000110,11011010,01100000等。扩展域元素代替二进制元素的一个好处就是表达的紧密性,使得非二进制编码和译码过程的数学表示变得简单。有限域中两个元素的加法和减法定义为两个多项式中同幂次项系数进行模2加,即

a ) ? ( a ? a ? ? ? ( a ? a ) x m ? 1 (2.7) ai?aj?( a?) xi,0j,0i,1j,1i,m?1j,m?1所谓的模2相加,在二进制运算中也就算异或运算[8]。有限域中的乘法运算规则是把两个元素化成指数形式,将指数直接相加,取模2m-1,如式2.8所示。

a2.1.3 有限域的本原多项式

有限域GF(2m)可用一组本原多项式来定义,有限域是定义RS码所必需的,所以研究RS码需研究本原多项式。本原多项式可定义为:一个m阶的不可约多项式f(x),如果f(x)能整除xn+1的最小整数n,其中n=2m-1,则该多项式是本原多项式。不可约多项式是指一个多项式不能因式分解为更低幂次的多项式。B整除A是指A除以B得到非0商并且余数为0。通常多项式的幕次是从小到大排列的,有时候按照反方向排列可能会方便些(例如在进行多项式除法的时候)。表2.1中列举了一些常用的本原多项式。

表2.1 部分本原多项式

i*a?aj(i?j)mod(2m?1) (2.8)

m 2 3 4 5 6 7 8

本原多项式 1+x+x2 1+x+x3 1+x+x4 1+x2+x5 1+x+x6 1+x3+x7 1+x2+x3+x4+x8 用多项式表示的基本元素可映射为图2.1的线性移位反馈寄存器(LFSR)电路的形

12

内蒙古科技大学毕业设计说明书(毕业论文)

式。电路产生了域中的2m-1(m=8)个非0的域元素,注意在图2.1中线路反馈连接是与多项式f(x)=1+x2+x3+x4+x8的系数相对应的,类似于二进制循环码的情况。置线路初始状态非零,例如为11000000,每个时钟实现一次右移,可以证明,图2.1中所示的每个域元素(除了全0元素)将周期性地出现在移位寄存器的状态上。两种算术运算即加法和乘法可以用来定义这个GF(28)有限域[9]。

图2.1 线性反馈移位寄存器电路

2.2 RS码及相关算法

2.2.1 RS码

RS码是非二进制循环码(nonbinarycylic Code),码元由m个比特组成,m是大于2的任意正整数。仅当所有的n和k都满足以下条件时,m比特码元的RS(n,k)码才存在:

0< k < n < 2m+2 (2.9)

其中,k是编码分组的数据码元数目,n是已编码分组中总的码元数。对于大多数RS(n,k)码,

(n,k)=(2m-l,2m-1-2t) (2.10)

其中,t是RS码能够纠正的错误码元个数,n-k=2t是监督码元个数。扩展的RS码由n=2m或n=2m+l比特组成,但n不能再大。

对于任何相同输入分组长度的线性编码,RS码可以达到最大可能的码本最小距离。对于非二进制编码,两个码字间的距离(类似于汉明距离)定义为序列间的不同码元数目。RS码最小码本距离为

dmin = n - k + 1 (2.11)

这种编码可以纠正少于t的任意多个错误组合,t可以表示为

t=(dmin-1)/2=(n-k)/2 (2.12)

式(2.12)表明,对于RS码,纠正t个错误需要不超过2t个监督码元。式(2.12)具有以下直接含义,我们可以认为译码器花费n-k个冗余码元,它是可纠正码元数的2倍。对于每个错误,一个冗余码元用于定位此错误,另一个用于找到其正确的取值[10]。 2.2.2 RS编码

RS码是q进制BHC码的特殊子集,其码字的符号取值域与g(x)的根所在域相同,

13

内蒙古科技大学毕业设计说明书(毕业论文)

均在GF(q)上。

设长度为q-1,距离为d的RS码,生成多项式为:

g(x)?(x?ai)(x?ai?1)??(x?ai?d?2) (2.13)

若取i=1,则

g(x)?(x?a1)(x?a2)?(x?ad?1) (2.14)

由此生成(q-1,q-d)RS码,有最小距离为dmin。其中a为GF(q)上的本原元素。这个RS码的参数具有如下关系:

n=q-1 k=n-2t

RS码的最小汉明距离为dmin=2t+1,t是能纠正的错误个数。应特别注意的是,这里的最小汉明距离是指两个q进制码字间取值互不相同(即“符号”互不相同)的对应位置的个数,而不是两个码字间二进制位互不相同(即“比特”互不相同)的对应位置的个数。

由式(2.14)和dmin=2t+1得到RS码的生成多项式具有如下形式:

g(x)?g0?g1x?g2x2???g2t?1x2t?1?x2t (2.15)

生成多项式的幂次等于监督码元数。既然生成多项式的幂次为2t,所以很明显,a的连续2t次幂就是多项式的根。指定g(x)的根为:a,a2,…,a2t,初始根没有必要一定是根a,也可以是a的任意次幂。

由于RS码为循环码,系统形式的编码类似于二进制循环码的编码情况。 下面考虑编码方法,令信息元多项式为

m(x)?a0 或者表示为 m(x)?ak?1xk?1?a1?a2x2???ak?1xk?1 (2.16)

?ak?2xk?2???a2x2?a1x?a0

把信息元多项式m(x)移位到码字寄存器的最右端k个单元,并添加监督多项式p(x),将其放置在最左端的n-k个单元,所以将m(x)乘以xn?k,相当于将消息多项式右移n-k位。下面将xn?km(x)除以生成多项式g(x),可以写成

xn?km(x)/g(x)?b(x)?r(x)/g(x) (2.17)

剩余多项式r(x)至少比g(x)低一次 r(x)?r2t?1x2t?1?r2t?2x2t?2???r2x2?r1x?r0

则编成的码多项式为

14

内蒙古科技大学毕业设计说明书(毕业论文)

u(x)?x或者写成

n?km(x)?r(x) (2.18)

?cn?2xn?2???c2x2?c1x?c0 (2.19)

u(x)?cn?1x2.2.3 RS编码的算法

n?1 RS编码是一类循环码,其编码和一般的循环码编码类似。从变换的角度来分类,RS编码的编码算法有时域算法和频域算法,这里重点来讨论时域算法。对于RS(n,k)码,假定:

待编码信息码矢M为

M=[ Mk-1 Mk-2 ……. M1 M0] (2.20)

即信息多项式M(x)为

M(x)?Mk?1xk?2?Mk?2xk?2?........?M1x?M0 (2.21)

RS码的码组矢量C为

C=[Cn-1 Cn-2 …. C1 C0] (2.22)

即码字多项式C(x)为

?C1x?C0 (2.23) C(x)?Cn?1xn?1?Cn?2xn?2?......同时,已知RS码的生成多项式g(x)为

g(x)??(x??i)?(x??)(x??2)......(x??2t) (2.24)

i?12t 编码时,用xn?kM(x)除以g(x),所得的余数r(x)是校验多项式,将r(x)置于信息多项式M(x)之后,就形成了RS码。该过程可以用公式2.25表示

C(x)?xn?kM(x)?r(x)

?xn?kM(x)?xn?kM(x)mod(g(x)) (2.25)

式中

r(x)?xn?kM(x)mod(g(x))

?rn?k?1xn?k?1?rn?k?2xn?k?2?......?r1x?r0 (2.26)

因此,编成的RS码为

C=[Cn-1 Cn-2…… C1 C2]

=[Mk-1 Mk-2 …… M0 rn-k-1 rn-k-2 ……r0] (2.27)

其中信息位为前k位,校验位为后n-k位。因此,采用这种方法得到的RS码为系统码,这种算法称为RS码的时域编码算法,其步骤可以归纳为:

15

内蒙古科技大学毕业设计说明书(毕业论文)

(1)用xn-k乘以信息多项式M(x),得到xn-kM(x);

(2)用xn-kM(x)除以生成多项式g(x),取其余式,得到校验多项式r(x);

(3)联合信息多项式M(x)和校验多项式r(x),得到码字多项式C(x)。采用反馈移位寄存器电路来实现RS编码比较简单[11]。

这里以RS(7,3)码为例来说明RS码的时域编码过程。

RS(7,3)码的符号取自有限域GF(23)上,GF(23)的元素如表2.2。

表2.2 GF(23)上的元素

幂次表示 0 二进制表示 000 001 010 100 011 110 111 101 001 十进制表示 0 1 2 4 3 6 7 5 1 ?0?1 ?1?? ?2 ?3???1 ?4??2?? ?5?1????2 ?6?1??2 ?7 从表2.1可以知道,GF(23)的本原多项式p(x)=x3+x+1, 设待编码的信息码组为M= [?4 ?3 ?0]=[6 3 1]=[110011001],

即M(x)=?4x2+?3x+?0。

则xn?kM(x)?x4(?4x2??3x??0)??4x6??3x5??0x4, 用xn?kM(x)除以g(x),求得r(x)为

r(x)?xn?kM(x)mod(g(x))?(?4x6??3x5??0x4)modx(3?x?1)??6x3??2x2??5x,

因此,可以将该编码编成C=[?4 ?3 ?0 ?6 ?2 ?5 0] =[6 3 1 5 4 7 0] = [110 011 001 101 100 111 000]

16

内蒙古科技大学毕业设计说明书(毕业论文)

第三章Verilog HDL语言和QuartusⅡ6.0软件简介

3.1 Verilog HDL语言简介

Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模,被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间,数字系统能够按层次描述,并可在相同描述中显式的进行时序建模。

Verilog HDL 语言具有下述描述能力:

(1)设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言;

(2) Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行;

(3) Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。

因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构,是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述ASIC和FPGA的设计之用。Verilog 的设计者想要以 C 编程语言为基础设计一种语言,可以使工程师比较容易学习。

Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

Verilog HDL语言最初是于1983年由Gateway Design Automation 公司为其模拟器产品开发的硬件建模语言,那时它只是一种专用语言。由于它们的模拟、仿真器产品的广泛使用,Verilog HDL 作为一种便于使用且实用的语言逐渐为众多设计者所接受。在一次努力增加语言普及性的活动中,Veril- og HDL语言于1990年被推向公众领域。Open Verilog International(OVI)是促进Verilog发展的国际性组织。1992年,OVI决定致力于推广Verilog OVI标准成为IEEE标准。这一努力最后获得成功,Verilog 语言于1995年成为IEEE标准。完整的标准在Verilog硬件描述语言参考手册中有详细描述。

Verilog HDL是目前应用最为广泛的硬件描述语言,可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。适合算法级、寄存器级、逻辑级、门级和版图级等各个层次的设计和描述。Verilog HDL进行设计最大的优

17

内蒙古科技大学毕业设计说明书(毕业论文)

点是其工艺无关性,这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路。

Verilog HDL语言的优势:

(1)在其门级描述的底层,也就是晶体管开关的描述方面比VHDL等各种其它的HDL语言功能强大。所以在复杂数字逻辑电路和系统的设计仿真时更有优势;

(2)描述的设计思想、电路结构和逻辑关系清晰明了,并且设计语言简练、易学易用; (3)模块化分层结构在大规模设计时优势明显,Verilog HDL语言在EDA设计中相对与其它的各种硬件描述语言更有优势。

随着集成电路规模的越来越大,数字系统设计的越来越复杂,Verilog HDL语言在硬件电路设计的优越性也会越来越显突出。目前,数百万门规模的FPGA/CPLD已进入实用,Verilog HDL强大的系统描述能力、规范的设计结构和简洁、灵活的编程风格会使其用来完成大规模数字系统、超大规模数字系统的几乎全部设计任务[12]。

写一个Verilog程序好比建一座楼房,它需要最基本的框架。具体它是否需要实现功能或者实现什么功能都是次要的。在附录G中我们附上了一个简单的Verilog的例子。

3.2 Quartus II 6.0软件的使用

Quartus II 软件是Altera公司近几年来推出的新一代功能强大的可编程逻辑器件的

设计软件,提供了一个完整的,多平台的设计环境,这个环境很容易满足用户特定的设计需求,同时也是可编程单片电子系统(SOPC)设计的一种综合环境,至今已公布了6.0以上的版本。Quartus II软件提供了PLD实际的综合环境,是PLD设计的基础。Quartus II集成环境支持PLD设计的设计输入、编译、综合、布局、布线、时序分析、仿真、编程下载等EDA的设计过程,并且包括了FPGA和CPLD所有设计阶段的解决方案。另外,Quartus还允许在设计流程的每个阶段使用Quartus图形用户接口、EDA工具接口或命令行接口,可以在不同的设计流程阶段选择不同的接口,也可以在整个流程中只使用一个接口。Quartus II支持多种编辑输入法,包括图形编辑输入法,VHDL、Verilog HDL和AHDL的文本编辑输入法,符号编辑输入法以及内存编辑输入法。

由于Quartus II软件功能强大,我们仅以Quartus II 6.0为例对该软件进行简单的介

绍:使用Quartus II 6.0设计电路系统之前,需要先建立设计项目(project)。例如,用图形编辑法仿真一个3分频分频器的波形图时,需要先建立clk_div3的设计项目,在Quartus II 6.0集成环境下,执行File菜单下New Project Wizard命令,弹出图3.1对话框。

18

内蒙古科技大学毕业设计说明书(毕业论文)

图3.1 新建工程对话框1

需要注意的是:文件所在的文件夹路径必须是全英文或数字,不能出现汉字,Quartus II 6.0软件不支持汉字的文件路径。单击该页面中的Next,进入图3.2页面,此页面用于增加设计文件,包括顶层文件和其它底层文件。

图3.2 新建工程对话框2

单击Next后,进入图3.3页面。在编译设计文件前,应该选择下载的目标芯片,否则系统将以默认的目标芯片为基础完成设计文件的编译。目标芯片选择应根据此硬件开发和验证的开发板或实验开发系统上提供的可编程逻辑器件来决定。本次设计所用的芯片是10K系列的EPF10K20RC208-4。

图3.3 新建工程对话框3

19

内蒙古科技大学毕业设计说明书(毕业论文)

到此,我们就可以单击Finish进入Quartus II 6.0的主界面了,执行File菜单下的New,出现图3.4页面。

图3.4 编辑文件类型对话框

选择Device Design Files下的Verilog HDL Files,单击OK,就可以进行Verilog语言的编写。完成了Verilog语言的编写后,我们在保存语言文件的时候必须使文件的模块名与工程名保持一致,如图3.5。

图3.5 文件保存界面

保存后执行Processing菜单下的Start Complication进行全编译没有错误后,便可以选择File菜单下Create/Updata中的Create Symbol Files For Current File把当前的HDL文件创建成符号文件,在这之后,可以选择软件File菜单new中的Device Design Files 选择Block Diagram/Schematic File,单击OK,在Block.bdf的界面下双击空白处,进入图3.6页面。

3.6 逻辑元件选择窗口

20

内蒙古科技大学毕业设计说明书(毕业论文)

在Symbol界面中的project目录下双击clk_div3便可以将创建的符号文件添加到Block.bdf界面中了,同理,在Symbol界面总Name中输入input 和output添加到该界面中,最后把相应的输入输出连接起来,并使其名字一致。如图3.7。

图3.7 逻辑器件创建成符号后的模块图

再次执行全编译。然后点击新建File菜单new中的Other File选择Vector Waveform File后单击OK,然后在Name下的空白处单击鼠标右键选择Insert Node or Bus,再选择Node Finder,在该界面中的filter一项中选择Pin:all,单击list,将Nodes Find中的所有输入输出全部移到 Selected Nodes中,如图3.8。

图3.8 插入信号节点与Noder Finder对话框

单击OK,这样以前所定义的输入输出都被添加到了Waveform1.vwf界面中了,我们将它保存名为clk_div3.vwf文件,目的是为了使工程名与仿真波形名一致。然后单击Processing菜单下的Start Simulation,便可也得到3分频分频器的波形图了,如图3.9。

图3.9 3分频分频器仿真波形图

21

内蒙古科技大学毕业设计说明书(毕业论文)

到此,我们就完成了对3分频分频器的仿真,如果要将此模块下载到FPGA中,必须安装FPGA软件系统,并对模块进行管脚的分配才能观察结果,具体安装见第四章4.2.3 FPGA实验箱硬件设备的安装。

Quartus II 6.0软件还有诸多功能和时序,如宏功能模块、具体的参数设置、初始设计时的约束条件、 Analysis和 Synthesis时序的控制、逼近和分析、设计方法与设计规划等。在这里我们不能一一介绍,我们仅用这一例来对Quartus II 6.0软件有一个初步的认识和了解,这里所介绍的操作也是本设计所用的主要操作步骤。

22

内蒙古科技大学毕业设计说明书(毕业论文)

第四章 利用FPGA实现RS编码

4.1设计思想

本设计是在掌握RS编码原理的基础上,以RS(7,3)码为例,以Verilog HDL语言为基础,编写编码的多项式除法、分频器、并串转换、固定信号的产生等程序,用Quartus II 6.0软件对这些程序进行编译、调试、转换成模块,然后仿真出正确的波形图,并对这些波形进行简单的分析。然后把这些模块用相应的网线连接起来,再进行全编译,调试和仿真,定义相应的管脚,最后下载到FPGA中来验证实验结果与预期结果是否一致。由于在实际的通信中,我们所传递的是都是串行信号,所以如果我们在FPGA中观察的实验结果与预期结果一致,就将正确的串行波形输出到示波器中观察,以便应用于实际的通信中。

4.2模块的搭建与仿真分析

4.2.1 RS(7,3)编码模块rs_recode的仿真

根据前面的介绍我们知道RS(7,3)码编码的主要原理,这里我们要实现的就是一个从给定待编码的信息码组到编码成为时域的过程,根据编码的原理假设待编码的信息码组为M,当给定一个随机信号的时候,我们需要用一个clk时钟采下每个下降沿时刻的随机信号的值,也就是我们需要的M值,同时我们还需要一个reset信号来清零,当该信号为1时,所有的信号均清零,当reset为0时,就进行RS编码的计算。

我们新建一名为rs_recode的文件夹,并用Quartus II 6.0软件在该文件夹中创建一个名为rs_recode的工程,我们把这一代码写入Quartus II 6.0,其部分代码如下:

always @(negedge clk) if (reset) begin i=0;

mem_reg=0; G_reg[0]=0; G_reg1[0]=0;

以上代码主要所完成的工作是在时钟的下降沿的时候如果reset的值为真的情况下将所有的寄存器清零;

else if(!reset&i<9)

begin

23

内蒙古科技大学毕业设计说明书(毕业论文)

mem_reg[i]=M_signal; //采样 signal赋给 mem_reg i=i+1;

if(!reset&i==9)

begin

i=0;

如果满足if的条件,则将随机信号M_siganl在这一时刻的值传递给mem_reg;当

i=9的时候,i归零;

s_reg=mem_reg1[0]/G_reg[0];

G_reg1[0]=s_reg*G_reg[0]; G_reg1[1]=s_reg*G_reg[1]; G_reg1[2]=s_reg*G_reg[2]; G_reg1[3]=s_reg*G_reg[3];

//G_reg1={s_reg*G_reg[0],s_reg*G_reg[1],s_reg*G_reg[2],s_reg*G_reg[3]};

u[0]=mem_reg1[1]^G_reg1[1];

u[1]=mem_reg1[2]^G_reg1[2]; u[2]=mem_reg1[3]^G_reg1[3]; mem_reg1[0]=u[0]; mem_reg1[1]=u[1]; mem_reg1[2]=u[2]; mem_reg1[3]=u[3];

u[3]=0;

这些代码是编码多项式的除法实现的主体程序,多项式做减法时满足的是伽罗华运算,当把所有的多项式的系数全部转换成二进制的时候所做的运算恰好是异或运算。由于RS(7,3)码多项式涉及到做减法的位数最多为4位,而第一位相减后得到的值为0,所以我们只做3次减法,同时将被减数不做减法的下一位0赋值给u[3],做下一次减法中被减数的最后一位,然后将得到的差的多项式系数u[0]、u[1]、u[2]、u[3]重新赋值给mem_reg1[0]、 mem_reg1[1]、mem_reg1[2]、mem_reg1[3],以便做下一次的减法。 执行全编译后,没有错误,便可以选择File菜单下Create/Updata中的Create Symbol Files For Current File把当前的HDL文件创建成符号文件。接下来,可以选择软件File菜单new下Device Design Files 中的Block Diagram/Schematic File,单击OK,在Block.bdf的界面下双击空白处,在Symbol界面中的project目录下双击rs_recode便可以将创建的符号文件添加到Block.bdf界面中了,同理,在Symbol界面总Name中输入input 和output添加到该界面中,最后把相应的输入输出连接起来,并使其名字一致。

24

内蒙古科技大学毕业设计说明书(毕业论文)

再次全编译无错误后,保存在rs_recode工程下。然后点击File菜单new中的Other File选择Vector Waveform File后单击OK,然后在Name下的空白处单击鼠标右键选择Insert Node or Bus,再选择Node Finder,在该界面中的filter一项中选择Pin:all,单击list,将Nodes Find中的所有输入输出全部移到 Selected Nodes中,单击OK,这样以前所定义的输入输出都别添加到了Waveform1.vwf界面中了,我们将它保存名为rs_recode.vwf文件,然后单击Processing菜单下的Start Simulation,如图4.1和图4.2的仿真结果。由于仿真结果不能通过一次截屏来完成,所以有两张图片。

图4.1 RS(7,3)码编码模块仿真波形图1

图4.2 RS(7,3)码编码模块仿真波形图2

仿真波形图的结果和模块程序和是相符的,RS(7,3)编码是通过多项式的除法实现的,所有的多项式系数均用二进制来实现,同时多项式的系数之间的减法全部要符合伽

25

内蒙古科技大学毕业设计说明书(毕业论文)

罗华域的运算规则,伽罗华域上的减法指出:在该域上的任意两个元素做减法后的差仍是这个域中的一个元素。其减法就相当于二进制中两个数做异或运算。

通过仿真我们可以看出,我们通过clk时钟对随机信号M_signal进行采样,采下来的9位二进制数分别是001100100,输出的是21位二进制数是001100100101001101000。高位在前,低位在后,h0[0]=1;h0[1]=0;h0[2]=0,可以根据图4.1和图4.2的仿真结果来对照。这与我们的编程思想所相符的,一致的。同理如果我们通过clk时钟才下来的110011001,那么根据原理输出的21位二进制数应该是110011001101100111000。同样是高位在前,低位在后,具体可参考表4.2。 4.2.2高频分频器模块fp的仿真

我们用同样的方法来仿真高频分频器模块fp,得到的结果如图4.3。

图4.3 2×103分频器仿真波形图

由于我们的编码结果要通过FPGA实验箱来观察,我们所用到的实验箱频率是4MHz,那么这么高的频率无法实现每个时钟采一个随机的M_signal信号的值,由于过高的频率,造成在规定的时间内的采样值,我们肉眼观察只有两种情况:000000000和111111111。我们只需要将频率降低到我们能够控制的程度,以控制M_signal信号的值便于观察,而我们所用的FPGA实验箱的频率为4MHz,经过4×106分频后正好是1秒,所以这是一个最佳的分频选择。由于M_signal是一个随机信号,经过分频器后,我们可以通过控制实验箱上的开关来控制随机信号M_signal的值,这样可以达到对任意编码数据控制的目的。由于用Quartus II 6.0软件进行4×106分频需要太多的时间,而且在该软件中仿真结果无法显示,所以图4.3仿真的是2×103分频的波形图。 4.2.3编码模块和高频分频器模块在FPGA上的管脚分配

有了高频分频器fp和RS编码模块rs_recode,我们就可以来定义模块的管脚,将它们分配到固定的FPGA管脚上,来观察仿真的结果与实验箱上显示的是否一致。我们将RS编码模块rs_recode和高分频的模块连接起来,并将高分频器分频后的clk_out连接到RS编码模块的clk时钟上,这样就可以把clk的时钟频率降下来,这里我们进行的是8×106分频。参考图4.4,当所有连线都接好后,再次执行全编译没有错误后,我们选择

26

内蒙古科技大学毕业设计说明书(毕业论文)

Assignments菜单下的Pins进行管脚的分配,我们可以在每个输入和输出后的Location下双击空白处就可以定义管脚了,具体的管脚分配如表4.1[13]。

表4.1 模块在FPGA上管脚分配

输入或输出 clk reset rt M_signal i[0] i[1] i[2] i[3] mem_reg[0] mem_reg[1] mem_reg[2] mem_reg[3] mem_reg[4] mem_reg[5] mem_reg[6] mem_reg[7] mem_reg[8] h0[0] h0[1] h0[2] h1[0] h1[1] h1[2] h2[0] h2[1] h2[2] h3[0] h3[1] h3[2] h4[0] h4[1] h4[2] h5[0] h5[1] h5[2] h6[0] h6[1] h6[2] 数码管或LED灯 石英晶体振荡器M3 S1 S8 S2 L28 a L28 b L28 c L28 d L2 L17 L18 L19 L20 L21 L22 L23 L24 L25 a L25 b L25 c L25 d L25 e L25 f L27 a L27 b L27 c L27 d L27 e L27 f L29 a L29 b L29 c L29 d L29 e L29 f L26 a L26 b L26 c 主芯片引脚号 183 75 67 74 193 195 196 197 87 88 89 90 92 93 94 95 96 150 157 158 159 160 161 163 164 166 167 168 169 172 173 174 175 176 177 180 186 187 当分配完管脚后再执行全编译,回到Block.bdf模块界面我们可以看到所定义的管

27

内蒙古科技大学毕业设计说明书(毕业论文)

脚已经与相应的输入输出相匹配了。如图4.4。

图4.4 管脚与输入输出相对应的模块图

4.2.4 FPGA实验箱硬件设备的安装

完成以上操作后我们就可安装FPGA的硬件了,将FPGA实验箱的数据线与电脑相连,在控制面板中选择添加硬件,单击下一步,选择我已经连接了此硬件,单击下一步选择添加新的硬件设备,如图4.5。

图4.5 添加新的硬件设备

单击下一步,选择安装我从手动列表选择的硬件(高级),如图4.6。

28

内蒙古科技大学毕业设计说明书(毕业论文)

图4.6 选择手动安装

单击下一步,选择声音、视频和游戏控制器,如图4.7。

图4.7 选择硬件类型

单击下一步,选择从磁盘中安装,如图4.8。

图4.8 选择安装方式

29

内蒙古科技大学毕业设计说明书(毕业论文)

单击从从磁盘中安装界面的浏览,将C:\\altera\\quartus60\\drivers\\ win2000下的win2000.inf文件输入到厂商文件复制来源中,如图4.9。

图4.9 选择驱动文件来源

单击确定后选择型号Altera BytBlaster这一项,单击下一步,如图4.10。

图4.10 选择硬件驱动的型号

再单击下一步,就可以进行安装了。安装完成后,与该硬件相匹配的软件已经安装到计算机上,安装完成后计算机提示你必须重启计算机才能使用Altera BytBlaste硬件。 4.2.5 在FPGA中观察编码结果

当实验箱的硬件安装完成后,我们便可以将数据线连接到FPGA的接口和计算机的串口上,打开FPGA实验箱的电源,将所有的开关复位。在Quartus II 6.0软件中rs_recode工程下,完成所有的编译和仿真后,选择Tools菜单下的Programmer,会出现一个rs_recode.cdf的界面,选中该界面中rs_recode.sof文件后的Programmer/configure下的小方框,如图4.11。

30

内蒙古科技大学毕业设计说明书(毕业论文)

图4.11 选中rs_recode.sof文件

单击Start后,便可以将整个程序下载到FPGA中,我们可以按照我们的编程思想来控制实验箱上的开关,观察实验箱中的结果,如图4.12和图4.13。

图4.12 i=7时的FPGA

图4.13 i=8时的FPGA

31

内蒙古科技大学毕业设计说明书(毕业论文)

图4.12和图4.13中所有的LED灯,灯亮表示低电平,值为0;灯灭为高电平,值为1,clk为en使能信号,自动产生周期clk信号。

图4.12到图4.13是从i=7到i=8的过程,通过高分频器将FPGA的频率降到了我们可以控制的程度,当i<8的时候,我们可以控制开关s2来控制M_signal的值,以达到控制被采样信号的值,被采下的信号是由L2,L17到L24这8个LED灯来显示的,当i=8的时候,我们使rt的值为0,这样采样正好是一个周期,同时不进行下一个周期的采样。可以看到在i<8的时候,L26、L29、L27、L25都为0,这时候进行的是将采得的M_signal赋给mem_reg,并显示在L2,L17到L24中,当i=8时,执行了多项式的除法,进行了编码。根据前面的管脚的分配,从FPGA中我们可以看出mem_reg[0]到mem_reg[8]的值为110011001,而编码的值为110011001101100111000。 4.2.6 固定信号产生模块sc的仿真

尽管我们可以通过控制FPGA的开关来控制M_siganl,以达到控制被采样信号的目的,比如我们可以使被采样的信号为110011001或者其它的任意值,但是在实际的通信中我们用的是激光发射信号,我们根本不可能通过开关来实现控制信号的可能,而如果激光发射器发射的信号是周期信号的话,我们就需要连续不间断的发射110011001的M_signal信号,那么我们的被采样信号必须是110011001,所以我们需要编写一个固定信号发生器以产生固定信号。其部分代码如下:

always @(negedge clk) if(TST)

begin j=0;M_signal=0; end

当TST的值为1的时候,我们将变量j和M_signal的值清零; else if(!TST) begin if (j==0)

begin M_signal=1;j=j+1; end else if(j==1)

begin M_signal=1;j=j+1; end

当j和TST满足相应的条件时,我们给M_signal信号赋值110011001; else if(j==8)

begin M_signal=1;j=0; end

当就j=8时,正好是一个周期,我们将j归零,以便进行下一个周期信号的产生。

32

内蒙古科技大学毕业设计说明书(毕业论文)

其仿真波形如图4.14。

图4.14 固定信号模块仿真波形图

4.2.7并行转串行模块shift的仿真

按RS(7,3)编码模块的仿真步骤我们可以通过仿真得出并行转串行模块shift的仿真波形图,在Quartus II 6.0中编写并转串的部分代码如下:

always @(negedge clk) if(rst)

begin k=0; p=0; data_out=0; end

以上代码主要所完成的工作是在时钟的下降沿的时候如果rst的值为真的情况下将所有的寄存器清零;

else if(!rst&k<3) begin data_out=data0[p]; k=k+1;

p=p+1;

if(p==3) begin

p=0; end

当满足if的条件的时候我们将得到的21位二进制数按每3位做一个数组传递给data_out;一直到21个数全部传递给data_out;由p来控制数组位数,p一到3就立刻归零;

else if(!rst&k==20) begin

data_out=data6[2]; k=0;

33

内蒙古科技大学毕业设计说明书(毕业论文)

end

当第21个数传递给data_out时,正好所一个周期。我们将k归零,以便进行下一个周期的传递。

当程序和模块的编译全部都正确时我们可以进行仿真,得到的仿真结果如图4.15。

图4.15 并串转换模块仿真波形图

并串转换一方面是为了方便用示波器来观察,更重要的是在实际通信中激光器发射信号这一通信过程是串行通信,因此发射的信号必须是串行信号,信号发射时是一个激光器发射串行信号,而不是一排激光器来发射并行信号,同时我们接收的信号也是串行信号,所以我们必须要做并串转换,将并行通信转换为串行通信。 4.2.8 3分频模块clk_div3和7分频模块clk_div7的仿真[14]

按照前面RS编码模块的步骤我们对3分频clk_div3和7分频模块clk_div7进行仿真,3分频部分代码如下:

always @(posedge clk_in) begin if(!ret) begin cnt <= 0;

clk_1to3p <= 0;

end

在时钟上升沿的时候,满足if的条件下将cnt和clk_1to3p赋零值; else

34

内蒙古科技大学毕业设计说明书(毕业论文)

begin

if(cnt == 2'b10) begin cnt <= 0;

clk_1to3p <= clk_1to3p;

end

当cnt的值等于二进制数10的时候,将0赋值给cnt,并将现在的clk_1to3p值传递给以前的clk_1to3p。

3分频的仿真结果如图4.16。

图4.16 3分频模块仿真波形图

7分频部分代码如下: always@(negedge clk) begin if(!rst_n) begin cnt2<=0; clkout2<=0; end

在时钟下降沿,满足if条件时将cnt2和clkout2赋零值; else begin

if(cnt2==STOP) begin cnt2<=0;

clkout2<=~clkout2; end

否则的话,如果cnt2的值等于STOP,将cnt2赋零值,同时还要对clkout2进行取

35

内蒙古科技大学毕业设计说明书(毕业论文)

反,并将取反的值从新赋给clkout2。

7分频的仿真结果如图4.17。

图4.17 7分频模块仿真波形图

3分频和7分频都是低分频,它和高分频一样都所来降低时钟周期的。 4.2.9实验结果和对仿真的分析

当我们完成了RS编码模块rs_recode,高分频模块fp、3分频模块clk_div3、7分频clk_div7、固定信号产生模块sc、并串转换模块后shift,我们就可以完成最后的仿真,我们在rs_recode工程下验证了FPGA上的实验结果的正确性后,将这些模块按照设计思想连接起来,如下图4.18。

图4.18 所有模块相连后的模块图

由图4.18,固定信号发生器sc产生固定信号110011001,传递给RS编码模块

36

内蒙古科技大学毕业设计说明书(毕业论文)

rs_recode的M_signal,M_signal被采样下来,采样的结果也是110011001,采样的结果赋给了mem_reg[0]到mem_reg[8],经过编码后产生了21个二进制数,这21个二进制数赋给了h0[2:0]到h6[2:0]这21个并行的寄存器作为RS编码模块rs_recode的输出,同时又是并串转换模块shift的输入,经过并串转换模块将这21个并行数据转换成串行数据,输入时钟clk_in通过高分频模块fp后可以将频率降低到能控制的程度。

使用3分频和7分频的目的主要是为了使时钟统一,在RS编码模块rs_recode中有clk时钟,固定信号sc模块中有TST时钟,并串转换模块shift中的clk,我们必须将它们统一起来。我们从编码模块采样到的9位二进制数作为输入,从并串转换中输出21位串行数据。我们可以做一个简单的计算,编码模块rs_recode经过9个时钟后,把这个时钟乘以7后是经过高分频后的时钟频率,而这个时钟频率经过3分频后恰好是并串转换模块shift的时钟信号,所以当编码模块rs_recode采下9位数的时候,并串转换模块shift正好输出21位数,这样我们就达到了时钟统一的目的。

为了方便观察,我们设立参考时钟clk和clk_out,还有M_signal,它们都是输出信号,clk是编码模块rs_recode和固定信号产生模块sc的参考时钟,clk_out是并串转换模块的shift的参考时钟。我们对所有模块相连后的模块进行仿真,其波形图如图4.19。

图4.19 所有模块相连后模块的仿真波形图

37

内蒙古科技大学毕业设计说明书(毕业论文)

根据图4.19我们来对最终仿真结果的分析,我们做到了以下几点:

(1)对clk_in的分频效果,clk_in是一个高频的时钟,经过高频分频器模块fp和3分频模块clk_div3后得到了clk_out,而clk时钟经过高频分频器模块fp和7分频模块clk_div7后得到的,它们时钟频率明显低于clk_in。

(2)时钟的统一,j是固定信号产生模块sc产生固定信号的控制变量,i是对产生的固定信号进行采样的控制变量,这两个变量是同步的,k是对21位二进制数进行并串转换的控制变量,前面我们知道如果编码模块rs_recode中i经过9个时钟,那么并串转换模块shift中的k就经过了21个时钟,图4.19中变量i,j,k的值的变化和时钟频率上的变化是一致的。

(3)仿真结果的正确性,根据前面编码模块rs_recode的思想,我们输入的是9位二进制数110011001,输出应该是110011001101100111000;我们对输出的值进行列表,如表4.2。

表4.2 编码模块rs_recode的编码结果和对应的并串转换shift中变量k的值

rs_recode中的输出/shift中的输入 输出值 并串转换模块shift模块中的变量k h0[0]/data0[0] h0[1]/data0[1] h0[2]/data0[2] h1[0]/data1[0] h1[1]/data1[1] h1[2]/data1[2] h2[0]/data2[0] h2[1]/data2[1] h2[2]/data2[2] h3[0]/data3[0] h3[1]/data3[1] h3[2]/data3[2] h4[0]/data4[0] h4[1]/data4[1] h4[2]/data4[2] h5[0]/data5[0] h5[1]/data5[1]

0 1 1 1 1 0 1 0 0 1 0 1 0 0 1 1 1 38

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 内蒙古科技大学毕业设计说明书(毕业论文)

h5[2]/data5[2] h6[0]/data6[0] h6[1]/data6[1] h6[2]/data6[2] 1 0 0 0 17 18 19 20 由并串转换shift模块主体部分的编码程序: always @(negedge clk) if(rst) begin k=0;p=0; data_out=0; end else if(!rst&k<3) begin

data_out=data0[p]; k=k+1; p=p+1; if(p==3) begin

p=0; end

end

else if(!rst&k>2&k<6) begin

data_out=data1[p]; p=p+1; k=k+1; if(p==3) begin

p=0; end

end

并串转换的顺序是由低位到高位,但是编码后输出的并行信号是高位在前,低位在后,所以转换后每一组的并行数据与转换前顺序恰好相反,把21位转换后的二进制数组重新组合在一起,得到输出data_out=011110100101001111000。与图4.19中的波形吻合。证明我们的仿真结果是正确的,也就是说我们整个设计中的仿真是正确的。

接下来我们就可以将得到的串行信号输出到示波器中去观察,在用示波器观察结果之前,首先我们还必须将高分频模块fp的分频频率提升上来,因为我们所用的示波器是一个观察模拟信号的设备,示波器本身也是一个高频的显示设备,经过高分频后我们是无法在示波器中看到结果的,所以我们将分频器频率尽可能的提升起来,一般来说缩减到两位数内就已经足够了。当改动了分频器的频率后别忘了在Quartus II 6.0软件中从

39

内蒙古科技大学毕业设计说明书(毕业论文)

新执行全编译,否则,分频器的改动是无效的。其次我们还是要通过FPGA对一些输入输出进行管脚的分配,通过FPGA将信号data_out送入示波器。

根据图4.18我们对所有模块相连后部分的输入和输出管脚进行重新分配,如表4.3。

表4.3 所有模块连接后部分输入输出的管脚分配

输入或输出 mem_reg[0] mem_reg[1] mem_reg[2] mem_reg[3] mem_reg[4] mem_reg[5] mem_reg[6] mem_reg[7] mem_reg[8] TST rt rst_n rst ret reset clk_in data_out

数码管或LED灯 L2 L17 L18 L19 L20 L21 L22 L23 L24 S6 S5 S4 S3 S2 S1 石英晶体振荡器M3 L4 主芯片引脚号 87 88 89 90 92 93 94 95 96 69 70 71 73 74 75 183 86 表4.3中我们对每个模块的复位信号都进行了管脚的分配,同时被采样的信号mem_reg也进行了管脚的分配,只是少了编码模块的输出的管脚分配,这是由于编码模块的输出是通过对随机信号采样得到的,但是现在我们去掉了随机信号,改为了固定信号产生器,采样值也变成了固定的值,所以无需在对这些管脚进行分配。我们只关心被采样信号mem_reg和输出信号data_out。当我们完成所有准备,将86管脚的连线接到示波器上,根据程序的要求,按下相应的复位开关,如图4.20。

40

内蒙古科技大学毕业设计说明书(毕业论文)

图4.20 FPGA上对应信号的管脚分配

调节示波器后,可以得到如图4.21的波形图。

图4.21 示波器上的输出结果

由前面的编码结果我们知道,如果被采样信号为110011001,data_out信号应该为011110100101001111000,结合图4.20和图4.21,可以看出被采样信号为110011001,而示波器上显示的结果为周期性的011110100101001111000,图4.22为示波器上的周期data_out信号。

图4.22 示波器上的周期data_out信号

41

内蒙古科技大学毕业设计说明书(毕业论文)

第五章 设计总结

经过三个多月的毕业设计,使我对RS编码原理和编码通信技术有了深刻的认识,由原来对编码原理有个模糊的概念,到现在对编码原理的深刻认识;由原来只对其一般的通信系统有个大概了解,到现在对通信系统有了更具体深入的认知,我感到这是对我专业知识的一次提升,对自己动手能力的提高,也是对四年来所学知识的一次总结,对以后的学习和工作都有深远的影响。

在这段时间里我首先学习了Verilog HDL编程语言,这门语言是在C语言基础上的一门语言,具有很强的可移植性。以前对编程没有什么兴趣,通过对这门语言的学习,使我对编程语言有了一个新的概念,每一门编程语言都有它的优点和缺点,要想很好的掌握一门编程语言是需要不断的努力学习和长期的实践。

其次就是对Quartus II 6.0软件的学习,对FPGA有个大概的了解。在做设计前,对Quartus II 6.0软件一点都不了解,对其在工程领域的应用更是一无所知。现在感到Quartus II 6.0在工程仿真领域的应用十分强大,该软件为我们进行建模和仿真提供很大的方便,解决一些实际中的仿真问题,减轻不少的经济开支,而且给工作或学习带来很大的方便。

接着学习了RS码原理,性质以及以RS(7,3)为例学习了编码方法。RS码作为一种多进制BCH码,在纠正突发错误和随机错误方面的优势尤为明显,广泛应用于深空通信、大气激光通信、卫星通信、数据传输、数据存储、移动通信、文件传输、数字音频视频传输,可以大大的降低系统的误码率,因此对RS码的研究具有很重要的意义。

最后对编写出的编码模块的进行仿真,并下载到FPGA中验证编码结果与预期的编码结果是否相符。最后完成并串转换,应用与实际通信中。这一阶段是最需要时间和耐心的,在这一阶段也遇到很多的困难,但是通过自己的学习和在指导老师的帮助下,逐一排查问题的所在,证明结果的正确性。

42

内蒙古科技大学毕业设计说明书(毕业论文)

参考文献

1. http://baike.http://www.wodefanwen.com//view/51371.htm

2. 朱明程、董尔令,FPGA技术的最新发展综述[J],深圳大学学报,1996.12,18(4):1-2

3. 杨恒、李爱国、王辉、王新安,FPGA/CPLD最新实用技术指南[M],北京,清华大学出版社,2005.1,273-274

4. http://www.fpga.com.cn/index.htm

5. 吴瑕,RS码研究与应用[D],西安电子科技大学,2001.12 6. 周贤伟,差错控制编码与安全[M],北京,国防工业出版社,2006.9,56-57

7. 王琳、徐位凯,高效信道编译码技术及其应用[M],北京,人民邮电出版社,2007.4 ,130-135 8. 向茜、刘钊,伽罗华域上代数运算的最简单实现[J],电子科技大学学报,2000.2,29(1):1-2

9. 叶清贵,RS编译码的FPGA实现研究[D],东北师范大学,2006.4

10. 张怡、韩维,高速RS编码算法及FPGA实现[J],无线通信技术,2005,19(1):23-24 11. 朱起悦,RS码编码和译码的算法[J],电讯技术,1999.2,35(9):26-28 12. 江国强,EDA技术与应用[M],北京,电子工业出版社,2007.4,6-7

13. 崔国玮、王建国,数字电子技术课程设计指导书[M],包头,内蒙古科技大学出版社,2004.10,65-68

14. http://www.eefocus.com/html/08-03/37231s.shtml

15. Chang.Limin; Song.Lu; Zhang.lijing. Design and realization of FEC-based RS code in the atmospheric laser communication system[J],2008 International Conference on Optical Instruments and Technology,November 16,2008 - November 19,2008

16. Liang, Bo; Chen, Wei-Biao Error correction for optical PPM communication using combination of RS and trellis code modulation techniques Guangzi Xuebao/Acta Photonica Sinica, v 37, n 7, p 1361-1364, July 2008

17. Zhu,Suxia; Ji, Zhenzhou; Cao, Zhiyan, Application of RS Codes in Decoding QR Code[J],High Techonolgy Communication,2003 ,9(4)

43

内蒙古科技大学毕业设计说明书(毕业论文)

附录A: RS编码rs_recode的程序

module rs_recode(h0,h1,h2,h3,h4,h5,h6,M_signal,clk,i,mem_reg,reset); input M_signal,clk,reset;

output h0,h1,h2,h3,h4,h5,h6,mem_reg,i;

reg [3:0] i=0; //i从0到9的4个状态 reg [8:0] mem_reg; reg [2:0]h0; reg [2:0]h1; reg [2:0]h2; reg [2:0]h3; reg [2:0]h4; reg [2:0]h5;

reg [2:0]h6; //reg [0:6]h ; reg [2:0] d0,d1,d2; reg [2:0] s_reg;

reg [2:0] u[0:3]; //reg [3:0] s_reg; reg [2:0] G_reg[0:3]; reg [2:0] G_reg1[3:0]; reg [2:0] mem_reg1[6:0];

always @(negedge clk)

if (reset) //初始化所有寄存器; begin

i=0;

mem_reg=0; mem_reg1[0]=0; mem_reg1[1]=0; mem_reg1[2]=0; mem_reg1[3]=0; mem_reg1[4]=0; mem_reg1[5]=0;

mem_reg1[6]=0; //mem_reg=0;

G_reg[0]=0; G_reg[1]=0; G_reg[2]=0;

G_reg[3]=0; //G_reg=0;

G_reg1[0]=0; G_reg1[1]=0; G_reg1[2]=0;

G_reg1[3]=0; //G_reg1=0;

u[0]=0; u[1]=0; u[2]=0;

u[3]=0; //u=0;

44

内蒙古科技大学毕业设计说明书(毕业论文)

d0=0; d1=0; d2=0; s_reg=0;

h0=0; h1=0; h2=0; h3=0; h4=0; h5=0;

h6=0; //h=0; end

else if(!reset&i<9) begin

mem_reg[i]=M_signal; //采样 signal赋给 mem_reg i=i+1; if(!reset&i==9) begin i=0;

d0=mem_reg[0]*4+mem_reg[1]*2+mem_reg[2]*1; d1=mem_reg[3]*4+mem_reg[4]*2+mem_reg[5]*1; d2=mem_reg[6]*4+mem_reg[7]*2+mem_reg[8]*1; //M_reg[0]=d0 ; //M_reg[1]=d1 ;

//M_reg[2]=d2 ; //将采样2进制数转换成8进制数 //M_reg={d0,d1,d2};

G_reg[0]=1; G_reg[1]=0; G_reg[2]=1;

G_reg[3]=1; //g(x),也是本原多项式p(x),G_reg={1,0,1,1};

mem_reg1[0]=d0; mem_reg1[1]=d1; mem_reg1[2]=d2; mem_reg1[3]=0; mem_reg1[4]=0; mem_reg1[5]=0;

mem_reg1[6]=0;//mem_reg1={d0,d1,d2,0,0,0,0}; M(x)* X n-k 被除式

s_reg=mem_reg1[0]/G_reg[0]; G_reg1[0]=s_reg*G_reg[0]; G_reg1[1]=s_reg*G_reg[1]; G_reg1[2]=s_reg*G_reg[2]; G_reg1[3]=s_reg*G_reg[3];

//G_reg1={s_reg*G_reg[0],s_reg*G_reg[1],s_reg*G_reg[2],s_reg*G_reg[3]};//8进制

45

内蒙古科技大学毕业设计说明书(毕业论文)

u[0]=mem_reg1[1]^G_reg1[1]; u[1]=mem_reg1[2]^G_reg1[2]; u[2]=mem_reg1[3]^G_reg1[3]; u[3]=0;

mem_reg1[0]=u[0]; mem_reg1[1]=u[1]; mem_reg1[2]=u[2];

mem_reg1[3]=u[3]; //mem_reg1={u[0],u[1],u[2],u[3],0,0,0};

s_reg=mem_reg1[0]/G_reg[0]; G_reg1[0]=s_reg*G_reg[0]; G_reg1[1]=s_reg*G_reg[1]; G_reg1[2]=s_reg*G_reg[2]; G_reg1[3]=s_reg*G_reg[3];

//G_reg1={s_reg*G_reg[0],s_reg*G_reg[1],s_reg*G_reg[2],s_reg*G_reg[3]};

u[0]=mem_reg1[1]^G_reg1[1]; u[1]=mem_reg1[2]^G_reg1[2]; u[2]=mem_reg1[3]^G_reg1[3]; u[3]=0;

mem_reg1[0]=u[0]; mem_reg1[1]=u[1]; mem_reg1[2]=u[2];

mem_reg1[3]=u[3]; //mem_reg1={u[0],u[1],u[2],u[3],0,0};

s_reg=mem_reg1[0]/G_reg[0]; G_reg1[0]=s_reg*G_reg[0]; G_reg1[1]=s_reg*G_reg[1]; G_reg1[2]=s_reg*G_reg[2]; G_reg1[3]=s_reg*G_reg[3];

//G_reg1={s_reg*G_reg[0],s_reg*G_reg[1],s_reg*G_reg[2],s_reg*G_reg[3]};

u[0]=mem_reg1[1]^G_reg1[1]; u[1]=mem_reg1[2]^G_reg1[2]; u[2]=mem_reg1[3]^G_reg1[3]; u[3]=0;

mem_reg1[0]=u[0]; mem_reg1[1]=u[1]; mem_reg1[2]=u[2];

mem_reg1[3]=u[3];//u[3]=0; //mem_reg1={u[0],u[1],u[2],0}; h0=d0; h1=d1; h2=d2;

h3=mem_reg1[0]; h4=mem_reg1[1]; h5=mem_reg1[2];

h6=0; //h={d0,d1,d2,mem_reg1[0],mem_reg1[1],mem_reg1[2],0};

end

endmodule

46

本文来源:https://www.bwwdw.com/article/vxbo.html

Top