ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:896.34KB ,
资源ID:14392637      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-14392637.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(BCH编解码器的设计和实现共23页.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

BCH编解码器的设计和实现共23页.docx

1、BCH编解码器的设计和实现共23页【题目(tm)介绍】 我们小组做的题目是BCH编解码器的设计和实现。系统(xtng)分为四部分:1单片机串并变换(binhun) 2(7,4)BCH编码器 3FSK调制发射(fsh)和FSK解调 4(7,4)BCH解码器 首先,计算机通过串口向单片机发送串行ASCII码数据,单片机把这些串行数据进行串并变换后,把每个8位的ASCII码并行送入 (7,4)BCH编码器,8位并行数据在编码后变为14位的串行数据,FSK调制模块将编码后的数据发射,然后解调模块进行接收(中途没有经过无线信道,因为无法模拟),解调后得到编码后的数据,送给(7,4)BCH解码器进行解码,

2、然后解码器将解码得到的8位ASCII码送给单片机,单片机将并行ASCII码进行并串变换后,将串行数据送入计算机串口,这时,在屏幕上将显示接收到的ASCII码。【分工】【编码模块原理】 编码方式:将信息码多项式i(x)升n-k次幂后除以生成多项式g(x),然后将所得余式置于升幂后的信息多项式i(x)之后。可以用下式表示: r(x)为监督码多项式 系统循环码多项式为: 要得到监督位,关键要进行多项式除法,可以用带反馈的线性移位寄存器来实现。(n, k)BCH码生成(shn chn)多项式g(x) = 1 + g1x + g2x2 + . + gn-k-1xn-k-1 + xn-k (n,k)BCH

3、码编码(bin m)电路:若前n-k次移位只是用于将信息码元输入移位寄存器,还需n-k次移位才能(cinng)输出监督码元,其间存在n-k位间隙。通过时钟控制开关可以使编码过程流畅,不存在时间间隙。编码器的开关动作(dngzu)如下:1 到k个时钟节拍,信息比特直接输出(S2 置于2)同时计算余式监督码,每当一个“1”移出寄存器进入反馈线,相当于从被除式中减去除式。 k+1到n个时钟节拍,监督码位输出(S2 置于1),断开移位寄存器的反馈线(S1-off) (7, 4)BCH码生成多项式g(x) = 1 + x + x3 一次编码过程产生4位信息码元和3位监督码元,3位监督码指示的8种校正子图

4、样中,一种代表无误码,其余7种能纠正一位误码。(7,4)BCH码编码电路:编码器的开关动作(dngzu)如下:1 到4个时钟节拍,信息比特直接(zhji)输出(S2 置于2)同时(tngsh)计算余式监督(jind)码。5到7个时钟节拍,监督码位输出(S2 置于1),断开移位寄存器的反馈线(S1-off) 【编码模块系统框图】 clk 时钟节拍 reset 是来自单片机的数据有效信号(脉冲信号) din_v7.0 是单片机向FPGA发出的并行信号 dout 是编码后的串行信号,头三位为高电平帧信号 当reset的上升沿到来时,读取单片机发出(fch)的并行数据信号din_v7.0,首先产生3位

5、高电平信号送至dout。 然后启动编码电路,8位信息码分两组进行编码,历时14个时钟节拍,加上帧信号共17个时钟节拍。 reset 信号上升(shngshng)沿的识别reset上升(shngshng)沿的识别捕捉是启动编码过程的关键,若采用同于捕捉时钟信号上升沿的方法(if reset event and reset=1),会导致(dozh)上升沿的嵌套捕捉,不能通过编译。用两路信号Q1,Q2分别在时钟的上升沿和下降沿采集reset信号Process beginWait until clkevent and clk=1;Q1=reset;End process;Process beginWa

6、it until clkevent and clk=0;Q2=reset;End process;判断reset 上升沿的标准是(Q1 xor Q2)=1) and reset=1 即Q1,Q2不等且reset=1时。Reset 上升沿出现(chxin)在时钟的高电平,Q1,Q2不等状态恰好卡住时钟信号上升沿Reset 上升沿出现在时钟的低电平Q1,Q2不等状态卡住时钟信号(xnho)下降沿编码(bin m)的控制信号往往是要靠reset 上升沿起动,而后在时钟沿时有相应动作。倘若(tngru)要先判断时钟沿的来临(比如上升沿),再判断是否有Q1,Q2不等的状态,有一半的概率会捕捉不到rese

7、t 上升沿,因为显然Q1,Q2不等状态以0.5的概率卡住时钟信号下降沿。为了使判断Q1,Q2状态不受到时钟沿的限制,要先判断是否有Q1,Q2不等的状态,然后判断时钟沿的来临。If(Q1 xor Q2)=1)and reset=1)then 。Elsif (clkEVENT and clk=1) then 。End if;din_v7.0并行信号转换成编码电路(dinl)的串行输入从单片机送入FPGA的是8位并行信号,为了满足移位寄存器的串行操作(cozu)。必须转换成串行信号。在编码过程的每个时钟节拍,8位信号逐次向前移位,取出头位,即为串行信号移位(y wi)条件:信息码输出时移位If (Q

8、1 xor Q2)=1) and reset=1) thenbufferv=din_v;Elsif (clkevent and clk=1) then If (workk=1) then If (vdin=1) then bufferv (6 downto 0)=bufferv (7 downto 1); end if;End if;End if;帧头信号(xnho)的产生由于从单片机发过来的并行数据是一帧一帧间断的,dout不是一直都输出有效编码信号,为了(wi le)使解码器能够识别出每一帧,必须在有效编码信号前添加一个“帧头”。采取(ciq)的“帧头”是连续(linx)发三个“1”,然后

9、是14个时钟节拍的编码输出信号。用一个计数变量countt 控制三个节拍的帧头reset上升沿来到时,countt就开始启动计数,由于电路的反馈作用,countt的初值不是“000”故选用了“011”“100”“101”这三个状态dout输出高电平。在时钟下降沿的时候对countt进行计数,在时钟上升沿的时候利用count状态来判断相应操作。If (Q1 xor Q2)=1) and reset=1) then countt=001; flag1=1; /flag1 表示countt计数已启动 Elsif (clkevent and clk=0) then If (flag=1 and fla

10、g1=1) then countt=countt+1; End if; If (countt=101) then countt=110; flag1 flag flag flag=1;dout flag=1;dout flag dout=。; 。End case; End if;开关(kigun)S1 , S2 等控制信号(xnho)的产生vdin 移位寄存器反馈(fnku)控制信号vdin=1,构成反馈(fnku)环,信息码输出vdin=0,断开反馈(fnku)环,监督码输出workks 编码(bin m)工作信号 workks=1,编码(bin m)的14个节拍中 workks=0,其余

11、输入的串行信号为00010001,得到信息码0001。监督码011,不编码期间dout=0 cout 是循环周期为7的计数信号,1,2,4,3节拍输出信息码,6,7,5节拍输出监督码。【解码模块系统框图】在这个大实验中,我主要负责了(7,4)BCH解码器的实现,下面我也主要做关于解码器的总结。【理论(lln)介绍】 该BCH译码器实际上是基于(jy)错误图样识别的译码器,也叫做(jiozu)梅吉特译码器,它的原理图如下所示: 错误图样识别器是一个具有(jyu)n-k各输入端的逻辑电路,原则上可采用查表的方法,根据校正子找到错误图样,利用循环码的特性可以简化识别电路。梅吉特译码器特别适合纠正t=

12、2个随机独立错误的纠错码。 (7,4)循环汉明码的生成多项式是,相应的梅吉特译码器如下图所示: 但是由于这种电路(dinl)译一组码共需2n个节拍,必须等第一组码元移出缓存器后才能接收第二组,因此只能间歇的工作,为了使译码连续,实际电路必须再加以个校正子计算电路,;两个除法电路并联,交替工作。 (7,4)循环码完整译码器电路(dinl)如下图所示:解码器各门的状态(zhungti)和时钟节拍的关系门1:clk 在1-5 、8-12、15-18时处于(chy)打开状态,表示输入的数据打入缓存门2:clk在8-12 15-18时处于打开状态,表示选通第一路做校正子计算门3:为门2的反,表示选通第二

13、路做校正子计算门4:clk在1-8 15-18时处于(chy)打开状态,表示选择第一路的校正子用于校正运算门5:为门4的反,表示(biosh)选择第二路的校正子做校正运算帧识别(shbi)问题由于从单片机发过来的并行数据是一帧一帧的,为了使解码器能够顺利的识别出每一帧,必须在编码之后,每个帧前面(qin mian)添加一个“帧头”以便于解码器准确的探测帧。在这个实验中,我们采取的“帧头”就是在信息数据前面连续发三个“1”,这样,在解码端,在探测帧的时候,发现连续的三个“1”,则认为有一个帧到来。经过FPGA的仿真,帧识别问题可以通过这种方法成功的解决。软件仿真的结果:输入有一位误码时:可见,对

14、于一位误码情形(qng xing),(7,4)BCH解码器能够正确的纠错。附录(fl):解码器源程序(VHDL)library IEEE;use IEEE.std_logic_1164.ALL;use ieee.std_logic_unsigned.all;entity decoder isport (clk,din: in std_logic; dout: out std_logic_vector(7 downto 0); ready:out std_logic);end decoder;architecture decodera of decoder is signal buf: std_

15、logic_vector(3 downto 0 ); signal gate1, gate2, in_b,out_b,enable,dout1,dout2: std_logic; signal s1,s2:std_logic_vector(2 downto 0); signal out_buf:std_logic_vector(7 downto 0); signal din_buf:std_logic; -串行输入(shr)数据的寄存器 signal detect_buf:std_logic;begin detect_buf=din; ready=enable;-4级缓存器cache:proc

16、ess(clk)begin wait until clkevent and clk=1; if enable=1 then din_buf=din; if in_b=1 then buf=buf(2 downto 0) & din_buf; end if; end if;end process cache;-校正(jiozhng)子计算电路syndrome: process (clk)begin wait until clkevent and clk=1; if enable =1 then -如果(rgu)gate1为1,则选通第一路 if gate1=1 then s1(0)=s1(2)

17、xor din_buf; s1(1)=s1(0) xor s1(2); s1(2)=s1(1); s2(0)=s2(2); s2(1)=s2(0) xor s2(2); s2(2)=s2(1); else s2(0)=s2(2) xor din_buf ; s2(1)=s2(0) xor s2(2); s2(2)=s2(1); s1(0)=s1(2); s1(1)=s1(0) xor s1(2); s1(2)out_bufout_buf shit:=1; when 1 = shit:=2; when 2 = shit:=0;enable=1; end case; else shit:=0; e

18、nd if; count:=0; gate1=1; gate2=1; in_b=1; out_b in_b in_b=1; out_b=1; gate1 in_b=0; gate2=0; out_b in_b=1; out_b=1; gate1 count:=0;in_b=0; out_b=0;dout=out_buf;enable count:=count; end case; count:=count+1; end if;end process clock;end decodera;【单片机接口(ji ku)】单片机用于实现电脑(串口)与FPGA(并口)之间的数据通信。主要(zhyo)利用

19、了8051单片机的串行口方式1的收发功能。端口设置(shzh): P3.0(RXD):串口收(自电脑(dinno)串口) P3.1(TXD):串口发(向电脑串口) P0.0:给FPGA的数据有效信号(电平翻转时刻取数据) P1:并口发(向FPGA) P0.1:自FPGA的数据有效信号(电平翻转下降延取数据) P2:并口收(自FPGA)串口通信的波特率设置为1200b/s,对于时钟振荡频率为11.059MHz的单片机,定时器T1工作在模式2,初值为E8H。串行口控制字SCON50H。即采用方式1、SM20、REN1、TIRI0。接收电脑的串口数据采用中断方式,向电脑串口发送数据采用查询方式。具体

20、的,从电脑串口到FPGA并口的通信:RXD口(P3.0)一直接收来自电脑串口的数据(SCON寄存器中REN位置1),每收完一帧数据(收到9位数据),则将收到的前8位数据装入串行口的SBUF寄存器,最后一位作为停止位存入RB8(SCON.2),并置位RI。RI1后,进入中断服务程序。在判断引起中断位为Ri后(否则,Ti清0,中断返回),Ri清0,将串行口的缓冲寄存器SBUF寄存器中数据发到P1口,一定延时后(确保FPGA取走数据有效),P0.0口电平翻转,中断返回。至此从电脑串口到FPGA并口的一帧数据通信完成,等待下一次RI1,开始下一次通信过程。从FPGA并口到电脑串口的通信:单片机主程序一

21、直循环检测(jin c)P0.1口电平,当电平变为0且之前电平为1时,将P2口数据发到单片机串行口寄存器SBUF中,单片机自动开始向电脑串口发送一帧串行数据及存在RB8(SCON.2)中的停止位。至此从FPGA并口到电脑串口的数据通信完成,程序继续循环检测P0.1口电平 主程序流程图 中断(zhngdun)服务程序流程图org 0000h ajmp main org 0023h ajmp sbr1 org 0150H main: mov tmod,#22h ;串口初始化 mov tl1,#0e8h mov th1,#0e8h mov pcon,#00h mov scon,#50h setb t

22、r1 setb ea setb esloop: jnb p0.1,$ jb p0.1,$ ;判断(pndun)P0.1口下降沿 mov sbuf,p2 ;从P2口收并口信号 sjmp loop org 0200hsbr1: jb ri,sin clr ti retisin: clr ri mov p1,sbuf ;p1口发并口信号 mov r0,#10h ;延时 djnz r0,$ cpl p0.0 ;P0.0口电平翻转 reti end【FSK调制(tiozh)与解调】1FSK调制(tiozh) FSK是最简单的一种数字调制手段(shudun)。通常调制信号为一列串行码流,根据每时刻信息比特

23、的取值不同,输出不同频率的波形。最简单的做法是:输入调制信号为S(n),S(n)1时,输出一个频率的方波;S(n)0时,输出另一频率的方波。 VHDL代码(di m)为: RF=(Din and Freq_h) or (not Din) and Freq_low); 其中Din为输入调制信号,Freq_h为频率(pnl)较高的一方波,Freq_low为频率较低的一方波,RF为以调波输出。2FSK解调(ji dio) FSK解调也十分方便。我采取的作法是:以欲解调信号的时钟周期为周期,对接收到的FSK信号进行计数,若该周期内计数结果小于门限,则认定该周期为0码,否则为1码。 VHDL代码为:(包

24、括调制部分)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity FSK_send is port ( Din:in std_logic; Freq_h:in std_logic; Freq_low:in std_logic; FSK_out:out std_logic; S_clk:in std_logic; clr:out std_logic; Dout:out std_logic );end FSK_send;architecture Module of FSK_send issig

25、nal RF:std_logic;signal S_clkh:std_logic;signal S_clkv:std_logic;signal S_delay:std_logic;signal clk:std_logic;signal clear:std_logic;signal count:std_logic_vector(4 downto 0);-begin RF=(Din and Freq_h) or (not Din) and Freq_low); FSK_out=RF; process(Freq_h,S_clk) begin if(S_clkevent and S_clk=1) then S_clkh=not S_clkh; end if; if(Freq_hevent and Freq_h=1) then S_delay=S_clkh; end if; if(Freq_hevent and Freq_h=0) then S_clkv=S_delay; end if; end process; clear=S_delay xor S_clkv; clr=clear; process(RF) begin if(clear=1) then count=00000; elsif(RFeven

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2