串行和并行CRC架构及VHDL代码实现Word文档下载推荐.docx
《串行和并行CRC架构及VHDL代码实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《串行和并行CRC架构及VHDL代码实现Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
clk:
din:
instd_logic;
crc_en:
--其高电平要一直持续到din输入完毕;
在crc_en信号由低变高后,din刚开始输入的“0”值都不会影响寄存器的输出(因为寄存器的初始值全为零,而两个零之间的异或运算还是零);
一直到din的输入变为“1”值,此后,din输入的“0”和
“1”值都会影响寄存器的输出。
dout :
outstd_logic
);
endcrc_5;
--**************************************************architectureaofcrc_5is
signalshift_reg :
std_logic_vector(4downto0);
begin
process(rst,clk)begin
21
if(rst='
1'
)thenshift_reg<
=(others=>
'
0'
elsifclk'
eventandclk='
then
ifcrc_en='
thenshift_reg(0)<
=shift_reg(4)xordin;
shift_reg
(1)<
=shift_reg(0);
shift_reg
(2)<
=shift_reg(4)xordinxorshift_reg
(1);
shift_reg(3)<
=shift_reg
(2);
shift_reg(4)<
=shift_reg(4)xordinxorshift_reg(3);
else
shift_reg<
=shift_reg(3downto0)&
;
dout<
=shift_reg(4);
endif;
endprocess;
enda;
1.3CRC_5Testbench
----testbench.vhd-libraryieee;
entitytestbenchisendtestbench;
architecturemtestoftestbenchiscomponentcrc_5is
--其高电平要一直持续到din输入完毕
dout:
outstd_logic_vector(4downto0)
endcomponent;
signal
rst
:
std_logic;
clk
std_logic:
='
din
signal crc_en:
--其高电平要一直持续到din输入完毕
signal dout:
std_logic_vector(4downto0);
constantclkpd:
time:
=20ns;
clk<
=notclkafterclkpd/2;
crc_5_0:
crc_5portmap(rst=>
rst,clk=>
clk,din=>
din,crc_en=>
crc_en,dout=>
dout);
process
rst<
din<
crc_en<
waitfor40ns;
rst<
waitfor30ns;
crc_en<
din<
waitfor40ns;
wait;
endprocess;
endmtest;
1.4CRC_5TestResults
Theinputdatais“110011”,thefinalresultis“10100”;
2.NewarchitectureofCRC[1]
Figure2.Architecture1ofCRC
Figure3.Architecture2ofCRC
3.ParallelCRCArchitecture
d0
R0
x0
d1
x1
R1
d2
x2
R2
d3
R3
x3
Parallelsequence
FCS
Figure1.GeneralParallelCRCArchitecture
3.1LFSRArchitecture1anditscorrespondingcoefficientmatrixF
3.1.1ArchitectureofLFSR1
e00 R0
e01
e02
d1 e03
e10 x1
e11 R1
e12e13
e20
e21 R2
e22e23
d3 e30 x3
e31 R3
e32e33
erc
Figure2.SerialCRCArchitecture
图中,红色的线代表有效的数据传输通道。
3.1.2Correspondingrelationship
Table1.CoefficientcorrespondingrelationshipbetweenFigure2andFmatrix(Reference1)
r,c
3
2
1
e(3,m-1)=>
p3
E32
e(2,m-1)=>
p2
E21
e(1,m-1)=>
p1
E10
e(0,m-1)=>
p0
Notice:
Forthisarchitecture,sequenceofmzeroshastobesentthroughdtoobtainthefinalresults
3.1.3Simulationresults:
3.1.4TestbenchandCRC_5ComponentA
--CRC?
?
P(x)=X5+X4+X2+1(?
110101)
useieee.std_logic_arith.all;
instd_logic;
clk:
instd_logic;
--?
din?
dout :
outstd_logic_vector(4downto0)
signalw:
signalp:
std_logic_vector(4downto0):
="
10101"
signalxp:
w(0)<
=shift_reg(4)andp(0);
w
(1)<
=shift_reg(4)andp
(1);
w
(2)<
=shift_reg(4)andp
(2);
w(3)<
=shift_reg(4)andp(3);
w(4)<
=shift_reg(4)andp(4);
xp(0)<
=dinxorw(0);
xp
(1)<
=shift_reg(0)xorw
(1);
xp
(2)<
=shift_reg
(1)xorw
(2);
xp(3)<
=shift_reg
(2)xorw(3);
xp(4)<
=shift_reg(3)xorw(4);
)then
00000"
=xp(0);
=xp
(1);
shift_reg
(2)<
=xp
(2);
=xp(3);
=xp(4);
dout<
=shift_reg;
shift_reg<