版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【题目介绍】我们小组做的题目是 BCH编解码器的设计和实现。系统分为四部分:1. 单片机串并变换2. (7, 4)BCH 编码器3. FSK调制发射和FSK解调4. (7, 4)BCH 解码器首先,计算机通过串口向单片机发送串行ASCII码数据,单片机把这些串行数据进行串并变换后,把每个 8位的ASCII码并行送入(7, 4)BCH编码器,8位并行数据在编码 后变为14位的串行数据,FSK调制模块将编码后的数据发射,然后解调模块进行接收(中途没有经过无线信道,因为无法模拟),解调后得到编码后的数据,送给 (7, 4)BCH解码器进行解码,然后解码器将解码得到的8位ASCII码送给单片机,单片机
2、将并行ASCII码进行并串变换后,将串行数据送入计算机串口,这时,在屏幕上将显示接收到的ASCII码。【分工】*【编码模块原理】编码方式:将信息码多项式 i(x)升n-k次哥后除以生成多项式 g(x),然后将所得余式置于 升哥后的信息多项式i(x)之后。可以用下式表示:xn, i(x)r(x)(-) = q(x) +-(-)r(x)为监督码多项式 g(x)g(x)系统循环码多项式为:n-kc(x)= x i(x) r(x)要得到监督位,关键要进行多项式除法,可以用带反馈的线性移位寄存器来实现。(n, k)BCH 码生成多项式 g(x) = 1 + g ix + g 2x2 + . + g n-
3、k-1xn-k-1 + xn-k(n, k) BCH码编码电路:若前n-k次移位只是用于将信息码元输入移位寄存器,还需n-k次移位才能输出监督码元,其间存在n-k位间隙。通过时钟控制开关可以使编码过程流畅,不存在时间间隙。编码器的开关动作如下:1到k个时钟节拍,信息比特直接输出(S2置于2)同时计算余式一一监督码,每当一个“1”移出寄存器进入反馈线,相当于从被除式中减去除式。k+1到n个时钟节拍,监督码位输出(S2置于1),断开移位寄存器的反馈线 (Si-off)(7, 4)BCH码生成多项式 g(x) = 1 + x + x 3 一次编码过程产生 4位信息码元和3位监 督码元,3位监督码指示
4、的8种校正子图样中,一种彳t表无误码,其余7种能纠正一位误码。编码器的开关动作如下:1到4个时钟节拍,信息比特直接输出( S2置于2)同时计算余式一一监督码。5到7个时钟节拍,监督码位输出(S2置于1),断开移位寄存器的反馈线(S1-off )【编码模块系统框图】ENCelk-X doutresetdoutn_u了 01 X- d i ?- .0clk时钟节拍reset是来自单片机的数据有效信号(脉冲信号)din_v7.0是单片机向FPGA发出的并行信号dout是编码后的串行信号,头三位为高电平帧信号当reset的上升沿到来时,读取单片机发出的并行数据信号din_v7.0,首先产生3位高电平信
5、号送至 dout o然后启动编码电路,8位信息码分两组进行编码,历时14个时钟节拍,加上帧信号共 17个时钟节拍。reset信号上升沿的识别reset上升沿的识别捕捉是启动编码过程的关键,若采用同于捕捉时钟信号上升沿的方法(if reset ' event and reset= T),会导致上升沿的嵌套捕捉,不能通过编译。用两路信号Q1,Q2分别在时钟的上升沿和下降沿采集reset信号Process beginWait until clk'event and clk='1'Q1<=reset;End process;Process beginWait un
6、til clk'event and clk='0'Q2<=reset;End process;即Q1,Q2不等且判断 reset上升沿的标准是(Q1 xor Q2)='1') and reset='1'reset='1' 时。Reset上升沿出现在时钟的高电平,Q1,Q2不等状态恰好卡住时钟信号上升沿elkreset01 Q1,Q用 Q2.Q编码的控制信号往往是要靠reset上升沿起动,而后在时钟沿时有相应动作。倘若要先判断时钟沿的来临(比如上升沿),再判断是否有Q1,Q2不等的状态,有一半的概率会捕捉不到reset
7、上升沿,因为显然Q1,Q2不等状态以0.5的概率卡住时钟信 号下降沿。为了使判断Q1,Q2状态不受到时钟沿的限制,要先判断是否有 Q1,Q2不等的状态, 然后判断时钟沿的来临。If(Q1 xor Q2)='1')and reset='1')thenElsif (clk'E VENT and clk= ' 1 ' ) thenEnd if;din_v7.0并行信号转换成编码电路的串行输入从单片机送入FPGA的是8位并行信号,为了满足移位寄存器的串行操作。必须转换成串行信号。在编码过程的每个时钟节拍,8位信号逐次向前移位,取出头位,即为串行信
8、号移位条件:信息码输出时移位移位buffei 移位If (Q1 xor Q2)='1') and reset=' 1' ) thenbufferv<=din_v;Elsif (clk'event and clk='1') thenIf (workk= ' 1 ' ) thenIf (vdin= ' 1 ' ) then bufferv (6 downto 0)<=bufferv (7 downto 1);end if ;End if;End if;帧头信号的产生由于从单片机发过来的并行数据是一帧
9、一帧间断的,dout不是一直都输出有效编码信号,为了使解码器能够识别出每一帧,必须在有效编码信号前添加一个“帧头”采取的“帧头”是连续发三个“1”,然后是14个时钟节拍的编码输出信号。reset上升沿来到时,countt就开始启动计数,由于电路的反馈作用,countt的初值不是“ 000 ”故选用了 “ 011” “100” “101”这三个状态dout输出高电平。在时钟下降沿的时候对countt进行计数,在时钟上升沿的时候利用count状态来判断相应操作。If (Q1 xor Q2)= 1 ' ) and reset=' 1 ' ) thencountt<=&q
10、uot;001" flag1<='1' /flag1表示 countt 计数已启动Elsif (clk'event and clk='0') thenIf (flag='1' and flag1=' 1' ) thencountt<=countt+1;End if;If (countt="101") then countt<="110" flag1<='0'End if;End if;If (clk'event and clk
11、=' 1 ' ) thenCase countt isWhen "001" => flag<='1'When "010" => flag<='1'When "011" => flag<='1'dout<='1'When "100" => flag<='1'dout<='1'When "101" => flag<=&
12、#39;0'。When others => dout<= 。;End case;End if;开关Si, S2等控制信号的产生vdin移位寄存器反馈控制信号vdin= '1',构成反馈环,信息码输出vdin= '0',断开反馈环,监督码输出workks编码工作信号workks= '1',编码的14个节拍中Narra:育加加.口|Q dout 翊 cout B vdin.Q Q workksJD61Jworkks= ' 0',其余100.0ns 200.On?300.0ns400.0ns50C.0ns600.0n
13、s700 Cns800.0ns9CC.Ons I.Ous 1 1us|LIL1LIloooiom0 /区巫里亨弋邛E甲IHIE6信息码0001 监督码011输入的串行信号为 00010001 ,得到信息码0001 。监督码011,不编码期间dout=0cout是循环周期为7的计数信号,1, 2, 4, 3节拍输出信息码,6, 7, 5节拍输出 监督码。【解码模块系统框图】在这个大实验中,我主要负责了(7, 4)BCH解码器的实现,下面我也主要做关于解码器的总结。该BCH译码器实际上是基于错误图样识别的译码器,也叫做梅吉特译码器,它的原理图如下所示:错误图样识别器是一个具有 n-k各输入端的逻辑
14、电路, 原则上可采用查表的方法,根据校正子找到错误图样,利用循环码的特性可以简化识别电路。梅吉特译码器特别适合纠正t<=2个随机独立错误的纠错码。(7,4)循环汉明码的生成多项式是g(D) = D3+D+1,相应的梅吉特译码器如下图所示:7级缓存器输出输入-门但是由于这种电路译一组码共需2n个节拍,必须等第一组码元移出缓存器后才能接收第二组,因此只能间歇的工作, 为了使译码连续,实际电路必须再加以个校正子计算电路,两个除法电路并联,交替工作。(7, 4)循环码完整译码器电路如下图所示:解码器各门的状态和时钟节拍的关系门1 : clk在1-5、8-12、15-18时处于打开状态,表示输入的
15、数据打入缓存门2: clk在8-12 15-18时处于打开状态,表示选通第一路做校正子计算门3:为门2的反,表示选通第二路做校正子计算门4: clk在1-8 15-18时处于打开状态,表示选择第一路的校正子用于校正运算门5:为门4的反,表示选择第二路的校正子做校正运算帧识别问题由于从单片机发过来的并行数据是一帧一帧的,为了使解码器能够顺利的识别出每一帧,必须在编码之后,每个帧前面添加一个“帧头”以便于解码器准确的探测帧。在这个实验中,我们采取的“帧头”就是在信息数据前面连续发三个“1”,这样,在解码端,在探测帧的时候,发现连续的三个“1”,则认为有一个帧到来。经过 FPGA的仿真,帧识别问题可
16、以通过这种方法成功的解决。软件仿真的结果:输入有一位误码时:Name: din elkCt> count dout readyValue:H D3H003.0us3,5 us 4,0us4.5 us 5.0 usmLTLTUWLTLnn00I.Qus 1,5us瓦恒屈国画回回(回回叵):00 (DI KD2数据输入二1011011 (有一位误码)1010011解码输出:AA可见,对于一位误码情形,(7, 4)BCH解码器能够正确的纠错。附录:解码器源程序(VHDL)library IEEE;use IEEE.std_logic_1164.ALL;use ieee.std_logic_un
17、signed.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 issignal buf: std_logic_vector(3 downto 0 );signal gate1, gate2, in_b,out_b,enable,dout1,dout2: std_logic;signal s1,s2:std_logic_vector(2 d
18、ownto 0);signal out_buf:std_logic_vector(7 downto 0);signal din_buf:std_logic;一串行输入数据的寄存器signal detect_buf:std_logic;begindetect_buf<=din;ready<=enable;-4级缓存器cache:process(clk)beginwait until clk'event and clk='1'if enable='1' thendin_buf<=din;if in_b='1' thenbuf
19、<=buf(2 downto 0) & din_buf;end if;end if;end process cache;-校正子计算电路syndrome: process (clk)beginwait until clk'event and clk='1'if enable ='1' then-如果gate1为1,则选通第一路if gate1='1' thens1(0)<=s1(2) xor din_buf;s1(1)<=s1(0) xor s1(2);s1(2)<=s1(1);s2(0)<=s2(2
20、);s2(1)<=s2(0) xor s2(2);s2(2)<=s2(1);elses2(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)<=s1(1);end if;end if;end process syndrome;output:process(clk)beginwait until clk'event and clk='1'if out_b='1'
21、; thencase gate2 iswhen '1'=>out_buf<=out_buf(6 downto 0)&(s1(0) and (not s1(1) and s1(2) xor buf(3);when others=>out_buf<=out_buf(6 downto 0)&(s2(0) and (not s2(1) and s2(2) xor buf(3);end case;end if;end process output;-采集帧以及设置各个门的进程clock: process(clk)variable count:int
22、eger range 0 to 20;variable shit:integer range 0 to 2;beginwait until clk'event and clk='1'-探测帧,设置enable信号-探测到帧时,将计数器清零,准备计数if enable='0' thenif detect_buf='1' thencase shit iswhen 0 => shit:=1;when 1 => shit:=2;when 2 => shit:=0;enable<='1'end case;el
23、seshit:=0;end if;count:=0;gate1<='1'gate2<='1'in_b<='1'out_b<='0'elsecase count iswhen 4 =>in_b<='0'when 7 =>in_b<='1'out_b<='1'gate1<='0'when 11 =>in_b<='0'gate2<='0'out_b<='
24、;0'when 14 =>in_b<='1'out_b<='1'gate1<='1'when 19 =>count:=0;in_b<='0' out_b<='0'dout<=out_buf;enable<='0'when others => count:=count;end case;count:=count+1;end if;end process clock;end decodera;【单片机接口】单片机用于实现电脑(串口)与
25、FPGA (并口)之间的数据通信。主要利用了8051单片机的串行口方式1的收发功能。端口设置:P3.0 (RXD):串口收(自电脑串口)P3.1 (TXD):串口发(向电脑串口)P0.0:给FPGA的数据有效信号(电平翻转时刻取数据)P1:并口发(向 FPGA)P0.1:自FPGA的数据有效信号(电平翻转下降延取数据)P2:并口U氏(自 FPGA)串口通信的波特率设置为1200b/s,对于时钟振荡频率为 11.059MHz的单片机,定时器T1工作在模式2,初值为E8H。串行口控制字 SCON = 50H。即采用方式 1、SM2 = 0、REN=1、TI = RI = 0。接收电脑的串口数据采用
26、中断方式,向电脑串口发送数据采用查询方式。具体的,从电脑串口到FPGA并口的通信:RXD 口(P3.0) 一直接收来自电脑串口的数据(SCON寄存器中REN位置1),每收完一帧数据(收到 9位数据),则将收到的前 8 位数据装入串行口的 SBUF寄存器,最后一位作为停止位存入RB8 (SCON.2),并置位RI。RI= 1后,进入中断服务程序。在判断引起中断位为Ri后(否则,Ti清0,中断返回),Ri清0,将串行口的缓冲寄存器SBUF寄存器中数据发到 P1 口,一定延时后(确保 FPGA取走数据有效),P0.0 口电平翻转,中断返回。至此从电脑串口到FPGA并口的一帧数据通信完成,等待下一次
27、RI = 1,开始下一次通信过程。从FPGA并口到电脑串口的通信:单片机主程序一直循环检测P0.1 口电平,当电平变为0且之前电平为1时,将P2 口数据发到单片机串行口寄存器SBUF中,单片机自动开始向电脑串口发送一帧串行数据及存在RB8 (SCON.2)中的停止位。至此从 FPGA并口到电脑串口的数据通信完成,程序继续循环检测P0.1 口电平N主程序流程图中断服务程序流程图org 0000hajmp mainorg 0023hajmp sbrlorg 0150Hmain: mov tmod,#22h ;串口初始化mov tl1,#0e8hmov th1,#0e8hmov pcon,#00hm
28、ov scon,#50hsetb tr1setb easetb esloop:jnb p0.1,$jb p0.1,$;判断P0.1 口下降沿mov sbuf,p2从P2 口收并 口信号sjmp looporg 0200h sbrl:jb ri,sinclr ti retisin:clr rimov p1,sbuf;p1 口发并 口信号mov r0,#10h;延时djnz r0,$cpl p0.0;P0.0 口电平翻转reti end【FSK调制与解调】1. FSK调制FSK是最简单的一种数字调制手段。通常调制信号为一列串行码流,根据每时刻信息 比特的取值不同,输出不同频率的波形。最简单的做法是
29、:输入调制信号为S (n), S (n)=1时,输出一个频率的方波;S (n) =0时,输出另一频率的方波。VHDL代码为:RF<=(Din and Freq_h) or (not Din) and Freq_low);其中Din为输入调制信号,Freq_h为频率较高的一方波,Freq_low为频率较低的一方波,RF为以调波输出。2. FSK解调FSK解调也十分方便。我采取的作法是:以欲解调信号的时钟周期为周期,对接收到0码,否则为1码。的FSK信号进行计数,若该周期内计数结果小于门限,则认定该周期为VHDL代码为:(包括调制部分)library ieee;use ieee.std_lo
30、gic_1164.all;use ieee.std_logic_unsigned.all;entity FSK_send isport (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 issignal RF:std_logic;signal S_clkh:std_logic;si
31、gnal 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);beginRF<=(Din and Freq_h) or (not Din) and Freq_low);FSK_out<=RF;process(Freq_h,S_clk)beginif(S_clk'event and S_clk='1')thenS_clkh<=not S_clkh; end if;if(Freq_h'event and Freq_h='1') then S_delay<=S_clkh;end if;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年编程语言认证考试合同
- 2025年白酒代理商合同范本
- 第六章第3节《世界最大的黄土堆积区-黄土高原》第2课时(课件)
- 26CNY《快手马年星晚》招商方案2.0
- 基于神经科学的干预策略
- 第四单元 第21课时 全等三角形
- 经典四大名著题目及答案
- 2026 年中职精细化工技术(精细化学品制作)试题及答案
- 基于“后真相时代”视角浅析反转新闻-以“秦朗丢寒假作业”为案例
- 基于反射的网络安全态势感知-第1篇
- 2025云南省人民检察院招聘22人笔试考试备考试题及答案解析
- 22863中级财务会计(一)机考综合复习题
- 油漆车间年终总结
- 2025年甘肃省水务投资集团有限公司招聘企业管理人员笔试考试参考试题及答案解析
- 广东省六校2025-2026学年高二上学期12月联合学业质量检测语文试题(含答案)
- 2025年10月自考07180广播播音主持试题及答案
- 乡村康养项目申请书
- 私人奴隶协议书范本
- GB/T 17774-2025通风机尺寸
- 2025年综合物流园区建设可行性研究报告及总结分析
- 安庆师范学院论文格式
评论
0/150
提交评论