1 编码原理
在CRC(7,3)编码过程中,要将任意的三位信息码转换为CRC码,实施编码时的主要决定因素有两个:信息码多项式m(x)和生成多项式g(x)。
信息码多项式就是以待转换信息码字为系数所构成的多项式,一旦信息码确定,则该多项式就是唯一的。信息码多项式只是编码器处理的对象,在整个编码过程中起决定作用的是生成多项式。
以CRC(7,3)码构成来说明生成多项式在编码中的作用,如表一所示。
表一 CRC(7,3)码构成过程
由表一所示的构成2k-1=7个非全0码字多项式的过程与结果看,编码时从x4+x3+x2+x=T(x)开始进行逐一循环,并以模x7+1进行运算,该码字正是信码组中最低位为1,对应码字多项式T(x),在全部非全0码字中,它的最高位阶次也最低,并等于n-k=4,即最高次项为x4。随后一系列码字都源于它的移i位(i=1,2,1,6)而形成,因此称其为生成多项式g(x),即生成多项式是(x7+1)的一个最高阶次为 (n-k)即4的因子,再将x7+1分解如下:
x7+1=(x+1)(x3+x+1)(x3+x2+1)
从该分解式中可以看到其中可以组合为二因式中包含最高次为4次的情况有两种,即
g1(x)=(x+1)(x3+x+1)=x4+x3+x2+x
g2(x)=(x+1)(x3+x2+1)=x4+x2+x+1
这两个式子都可以作为生成多项式,所不同的是选用不同的生成多项式所生成的CRC码组不同。
当信息码多项式m(x)(次数小于k)和生成多项式g(x)确定以后,用xn-k乘m(x),得到xn-k(x)的次数必然小于n。用g(x)除xn-km(x),得到余式r(x),r(x)的次数必小于g(x)的次数,即小于(n-k)。将此余式加与xn-km(x)之后作为监督位。得到的多项式就是CRC码多项式,通过CRC码多项式的系数即可得到所编的CRC码字。
2 编码器设计
2.1编码框图
CRC编码器的主体是由移位寄存器和模2除法器构成的除法电路,通过逻辑开关的控制实施信息码的输入和CRC码的输出,编码电路框图如图一所示。
2.2 VHDL实现
本次设计的CRC编码器,利用MAXPLUS II软件平台,据CRC编码原理,采用VHDL文本输入法。为了提高编码的速度,在设计时采用信息位并行输入,CRC码并行输出的算法。程序经编辑调试通过后所生成的编码模块如图二所示。具体程序代码如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity yancrc4 is
port(sdata : in STD_LOGIC_VECTOR(2 DOWNTO 0);
datacrco :out STD_LOGIC_VECTOR(6 DOWNT 0);
hsend :out std_logic;
clk,datald:IN_STD_LOGIC
);
END yancrc4;
ARCHITECTURE rtl OF yancrc4 IS
constant multi_coef : STD_LOGIC_VECTOR(4 DOWNTO 0) :="10111";
SIGNAL cnt,rcnt,ttemp :STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL dtemp :STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL sdatam,rdtemp:STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL rdatarcr:STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL st,rt:STD_LOGIC;
BEGIN
process(clk)
variable crcvar :STD_LOGIC_VECTOR(4 DOWNTO 0)
begin
if clk'event and clk='1''then
if st='0' and datald='0' then
-crcvar:=crcvar(3 downto 0)&'0';
dtemp<=sdata&'0'&'0'&'0'&'0';
sdatam<=sdata;
-crcvar:=sdata
cnt<= (others=>'0');
hsend<= '0';
st<='1';
elsif st='1'and cnt<3 then
cnt<= cnt+1;
if dtemp(6)='1'then
crcvar:=dtemp(6 downto 2)xor multi_coef;
dtemp<=crcvar(3 downto 0)& dtemp(1 downto 0)&'0';
else
dtemp<=dtemp(5 downto 0)&'0';
end if;
elsif st='1' and cnt=3 then
hsend<='1';
elsif st='1' and cnt=4 then
hsend<='0';
st<='0';
end if;
end if;
end process;
end rtl;
2.3仿真结果
系统设计完成后仿真结果如图三所示。
3 结束语
本次设计的CRC编码器经下载测试,具有编码速度快、编码准确率高等特点,达到了预期的设计要求。所生成的CRC编码模块可以以存档模块的方式存储在模块库中,这为后续开发CRC编译码系统奠定了良好的基础,同时也可以使该模块成为其他设计人员可共享的设计资源。
文章评论(0条评论)
登录后参与讨论