串行和并行CRC架构及VHDL代码实现.docx
- 文档编号:145561
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:21
- 大小:325.39KB
串行和并行CRC架构及VHDL代码实现.docx
《串行和并行CRC架构及VHDL代码实现.docx》由会员分享,可在线阅读,更多相关《串行和并行CRC架构及VHDL代码实现.docx(21页珍藏版)》请在冰豆网上搜索。
CRC_VHDL_Summary
1.CRCVHDLcodeandtestbench;
1.1architectureofCRC_5(110101)
Reg_0
Reg_1 Reg_2 Reg_3
Reg_4
X0
X1 X2 X3
X4
Din
Figure.1.P(x)=X5+X4+X2+1(i.e.110101)
1.2CRC_5Component
--**************************************************
--CRC生成多项式为P(x)=X5+X4+X2+1(即110101)
--**************************************************libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
--**************************************************entitycrc_5is
port(
rst:
instd_logic;clk:
instd_logic;din:
instd_logic;
crc_en:
instd_logic; --其高电平要一直持续到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='1'then
ifcrc_en='1'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)&'0';dout<=shift_reg(4);
endif;
endif;endprocess;
enda;
--**************************************************
1.3CRC_5Testbench
----testbench.vhd-libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytestbenchisendtestbench;
architecturemtestoftestbenchiscomponentcrc_5is
port(
rst:
instd_logic;clk:
instd_logic;din:
instd_logic;
crc_en:
instd_logic;--其高电平要一直持续到din输入完毕
dout:
outstd_logic_vector(4downto0)
);
endcomponent;
signal
rst
:
std_logic;
signal
clk
:
std_logic:
='0';
signal
din
:
std_logic;
signal crc_en:
std_logic; --其高电平要一直持续到din输入完毕
signal dout:
std_logic_vector(4downto0);constantclkpd:
time:
=20ns;
begin
clk<=notclkafterclkpd/2;
crc_5_0:
crc_5portmap(rst=>rst,clk=>clk,din=>din,crc_en=>crc_en,dout=>dout);process
begin
rst<='1';
din<='0';crc_en<='0';waitfor40ns;rst<='0';
waitfor30ns;
crc_en<='1';
waitfor30ns;din<='1';
waitfor40ns;din<='0';
waitfor40ns;din<='1';
waitfor40ns;crc_en<='0';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
Parallelsequence
FCS
x0
d0
e00 R0
e01
e02
d1 e03
e10 x1
e11 R1
e12e13
x2
d2
e20
e21 R2
e22e23
d3 e30 x3
e31 R3
e32e33
erc
Figure2.SerialCRCArchitecture
图中,红色的线代表有效的数据传输通道。
3.1.2Correspondingrelationship
Table1.CoefficientcorrespondingrelationshipbetweenFigure2andFmatrix(Reference1)
r,c
3
2
1
0
3
e(3,m-1)=>p3
E32
0
0
2
e(2,m-1)=>p2
0
E21
0
1
e(1,m-1)=>p1
0
0
E10
0
e(0,m-1)=>p0
0
0
0
Notice:
Forthisarchitecture,sequenceofmzeroshastobesentthroughdtoobtainthefinalresults
3.1.3Simulationresults:
3.1.4TestbenchandCRC_5ComponentA
--**************************************************
--CRC?
?
?
?
?
?
P(x)=X5+X4+X2+1(?
110101)
--**************************************************libraryieee;
useieee.std_logic_1164.all;useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
--**************************************************entitycrc_5is
port(
rst:
instd_logic;clk:
instd_logic;din:
instd_logic;
crc_en:
instd_logic; --?
?
?
?
?
?
?
?
?
?
din?
?
?
?
dout :
outstd_logic_vector(4downto0)
);
endcrc_5;
--**************************************************architectureaofcrc_5is
signalshift_reg :
std_logic_vector(4downto0);
signalw:
std_logic_vector(4downto0);
signalp:
std_logic_vector(4downto0):
="10101";signalxp:
std_logic_vector(4downto0);
begin
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);
process(rst,clk)begin
if(rst='1')then
shift_reg<=(others=>'0');dout<="00000";
elsifclk'eventandclk='1'then
ifcrc_en='1'thenshift_reg(0)<=xp(0);shift_reg
(1)<=xp
(1);shift_reg
(2)<=xp
(2);shift_reg(3)<=xp(3);shift_reg(4)<=xp(4);
else
dout<=shift_reg;shift_reg<="0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串行 并行 CRC 架构 VHDL 代码 实现