循环冗余码(或汉明码)编解码器.doc

循环冗余码(或汉明码)编解码器.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
循环冗余码(或汉明码)编解码器.doc

循环冗余码(或汉明码)编解码器 实验目的: 学习循环冗余码或汉明码的编解码原理以及硬件设计和调试方法。 实验内容: 分析循环冗余码或汉明码的编解码原理,用VHDL语言设计8位数据的循环冗余码或汉明码编、解码器,并进行仿真、测试和分析。 实验要求: 进入实验室之前先复习循环冗余码或汉明码的编解码原理,并完成编、解码模块的VHDL源程序设计,在实验室完成设计输入、编译、仿真、分析并进行硬件测试。 实验原理: 编码解码原理简介 CRC即Cyclic Redundancy Check 循环冗余校验,是一种数字通信中的信道编码技术。经过CRC方式编码的串行发送序列码,可称为CRC码,共由两部分构成:k位有效信息数据和r位CRC校验码。其中r位CRC校验码是通过k位有效信息序列被一个事先选择的r+1位“生成多项式”相“除”后得到(r位余数即是CRC校验码),这里的除法是“模2运算”。CRC校验码一般在有效信息发送时产生,拼接在有效信息后被发送;在接收端,CRC码用同样的生成多项式相除,除尽表示无误,弃掉r位CRC校验码,接收有效信息;反之,则表示传输出错,纠错或请求重发。 信息码—8位 选定生成多项式—g(x)= 监督码为16位 先用信息码多项式m(x)乘以,得出的积除以生成多项式g(x),得到余式r(x),即为监督码多项式,此时码多项式为 m(x)+r(x)。 此处需要注意的是,我们用的是模2运算,因此对应在进行乘法运算时应该运用异或运算来实现。 在解码时,码多项式应可被g(x)整除。解码可利用与编码一样的除法电路,但被除式应为整个循环码多项式,若最后余式为0,说明没有错码。 五、实验步骤: 1、源程序如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity crc is port ( clk : in std_logic; error : out std_logic; datain : in std_logic_vector( 7 downto 0 ); dataout: out std_logic_vector( 7 downto 0 )); end; architecture one of crc is signal ce : std_logic; signal de : std_logic; signal crco : std_logic_vector(23 downto 0); constant crcg : std_logic_vector(16 downto 0) := 11000000000000101; constant comp : std_logic_vector(23 downto 0) := 000000000000000000000000; begin process(clk) variable datacrc : std_logic_vector(16 downto 0); variable codo :std_logic; begin if clkevent and clk = 1 then if ce = 0 then datacrc(16 downto 0) := datain(7 downto 0) 000000000; ce = 1; else for n in 7 downto 0 loop if datacrc(16) = 1 and n = 0 then datacrc := datacrc xor crcg; elsif datacrc(16) = 1 and n /= 0 then datacrc := (datacrc(15 downto 0) xor crcg(15 downto 0)) 0; elsif datacrc(16) = 0 and n /= 0 then datacrc := datacrc(15 downto 0) 0; end if; end loop; ce = 0; crc

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档