📄 crc_pkg.vhd
字号:
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
--polynomial:
--crc32=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1(Ethernet)
--crc16=x16+x15+x2+1 (IBM)
--crc16=x16+x12+x5+1(CCITT)
--crc12=x12+x11+x3+x2+1
--crc8=X8+X5+X4+1
--crc4=x4+x+1 (ITU G.704)
----------------------------
--d:d7,d6......d1,d0
--r: r31......r1,r0
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
----------------------------
package crc_pkg is
----------------------------
function crc32_1(
data: std_logic;
crcin: std_logic_vector(31 downto 0) )
return std_logic_vector;
----------------------------
function crc32_8(
data: std_logic_vector(7 downto 0);
crcin: std_logic_vector(31 downto 0) )
return std_logic_vector;
----------------------------
function crc16_ccitt_1(
data: std_logic;
crcin: std_logic_vector(15 downto 0) )
return std_logic_vector;
----------------------------
function crc16_ccitt_8(
data: std_logic_vector(7 downto 0);
crcin: std_logic_vector(15 downto 0) )
return std_logic_vector;
----------------------------
function crc12_1(
data: std_logic;
crcin: std_logic_vector(11 downto 0) )
return std_logic_vector;
----------------------------
function crc8_1(
data: std_logic;
crcin: std_logic_vector(7 downto 0) )
return std_logic_vector;
----------------------------
function crc8_8(
data: std_logic_vector(7 downto 0);
crcin: std_logic_vector(7 downto 0) )
return std_logic_vector;
----------------------------
function crc5_11(
data: std_logic_vector(10 downto 0);
crcin: std_logic_vector(4 downto 0) )
return std_logic_vector;
----------------------------
function crc4_1(
data: std_logic;
crcin: std_logic_vector(3 downto 0) )
return std_logic_vector;
----------------------------
end crc_pkg;
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
package body crc_pkg is
---------------------------------------------------------------
function crc32_1(
data: std_logic;
crcin: std_logic_vector(31 downto 0))
return std_logic_vector is
variable d: std_logic;
variable r:std_logic_vector(31 downto 0);
variable crcout:std_logic_vector(31 downto 0);
begin
d := data;
r :=crcin;
crcout(0) := d xor r(31);
crcout(1) := d xor r(0) xor r(31);
crcout(2) := d xor r(1) xor r(31);
crcout(3) := r(2);
crcout(4) := d xor r(3) xor r(31);
crcout(5) := d xor r(4) xor r(31);
crcout(6) := r(5);
crcout(7) := d xor r(6) xor r(31);
crcout(8) := d xor r(7) xor r(31);
crcout(9) := r(8);
crcout(10) := d xor r(9) xor r(31);
crcout(11) := d xor r(10) xor r(31);
crcout(12) := d xor r(11) xor r(31);
crcout(13) := r(12);
crcout(14) := r(13);
crcout(15) := r(14);
crcout(16) := d xor r(15) xor r(31);
crcout(17) := r(16);
crcout(18) := r(17);
crcout(19) := r(18);
crcout(20) := r(19);
crcout(21) := r(20);
crcout(22) := d xor r(21) xor r(31);
crcout(23) := d xor r(22) xor r(31);
crcout(24) := r(23);
crcout(25) := r(24);
crcout(26) := d xor r(25) xor r(31);
crcout(27) := r(26);
crcout(28) := r(27);
crcout(29) := r(28);
crcout(30) := r(29);
crcout(31) := r(30);
return crcout;
end crc32_1;
-----------------------------------------------------------------
function crc32_8(data: std_logic_vector(7 downto 0);
crcin: std_logic_vector(31 downto 0))
return std_logic_vector is
variable d: std_logic_vector(7 downto 0);
variable r: std_logic_vector(31 downto 0);
variable crcout: std_logic_vector(31 downto 0);
begin
d:= data;
r:=crcin;
crcout(0) := d(6) xor d(0) xor r(24) xor r(30);
crcout(1) := d(7) xor d(6) xor d(1) xor d(0) xor r(24) xor r(25) xor r(30) xor r(31);
crcout(2) := d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor r(24) xor r(25) xor r(26) xor r(30) xor r(31);
crcout(3) := d(7) xor d(3) xor d(2) xor d(1) xor r(25) xor r(26) xor r(27) xor r(31);
crcout(4) := d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor r(24) xor r(26) xor r(27) xor r(28) xor r(30);
crcout(5) := d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor r(24) xor r(25) xor r(27) xor
r(28) xor r(29) xor r(30) xor r(31);
crcout(6) := d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor
r(25) xor r(26) xor r(28) xor r(29) xor r(30) xor r(31);
crcout(7) := d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor r(24) xor r(26) xor r(27) xor r(29) xor r(31);
crcout(8) := d(4) xor d(3) xor d(1) xor d(0) xor r(0) xor r(24) xor r(25) xor r(27) xor r(28);
crcout(9) := d(5) xor d(4) xor d(2) xor d(1) xor r(1) xor r(25) xor r(26) xor r(28) xor r(29);
crcout(10) := d(5) xor d(3) xor d(2) xor d(0) xor r(2) xor r(24) xor r(26) xor r(27) xor r(29);
crcout(11) := d(4) xor d(3) xor d(1) xor d(0) xor r(3) xor r(24) xor r(25) xor r(27) xor r(28);
crcout(12) := d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor
r(4) xor r(24) xor r(25) xor r(26) xor r(28) xor r(29) xor r(30);
crcout(13) := d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor
r(5) xor r(25) xor r(26) xor r(27) xor r(29) xor r(30) xor r(31);
crcout(14) := d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor r(6) xor r(26) xor r(27) xor r(28) xor r(30) xor r(31);
crcout(15) := d(7) xor d(5) xor d(4) xor d(3) xor r(7) xor r(27) xor r(28) xor r(29) xor r(31);
crcout(16) := d(5) xor d(4) xor d(0) xor r(8) xor r(24) xor r(28) xor r(29);
crcout(17) := d(6) xor d(5) xor d(1) xor r(9) xor r(25) xor r(29) xor r(30);
crcout(18) := d(7) xor d(6) xor d(2) xor r(10) xor r(26) xor r(30) xor r(31);
crcout(19) := d(7) xor d(3) xor r(11) xor r(27) xor r(31);
crcout(20) := d(4) xor r(12) xor r(28);
crcout(21) := d(5) xor r(13) xor r(29);
crcout(22) := d(0) xor r(14) xor r(24);
crcout(23) := d(6) xor d(1) xor d(0) xor r(15) xor r(24) xor r(25) xor r(30);
crcout(24) := d(7) xor d(2) xor d(1) xor r(16) xor r(25) xor r(26) xor r(31);
crcout(25) := d(3) xor d(2) xor r(17) xor r(26) xor r(27);
crcout(26) := d(6) xor d(4) xor d(3) xor d(0) xor r(18) xor r(24) xor r(27) xor r(28) xor r(30);
crcout(27) := d(7) xor d(5) xor d(4) xor d(1) xor r(19) xor r(25) xor r(28) xor r(29) xor r(31);
crcout(28) := d(6) xor d(5) xor d(2) xor r(20) xor r(26) xor r(29) xor r(30);
crcout(29) := d(7) xor d(6) xor d(3) xor r(21) xor r(27) xor r(30) xor r(31);
crcout(30) := d(7) xor d(4) xor r(22) xor r(28) xor r(31);
crcout(31) := d(5) xor r(23) xor r(29);
return crcout;
end crc32_8;
--------------------------------------------------------------
function crc16_ccitt_1 (data: std_logic;
crcin: std_logic_vector(15 downto 0) )
return std_logic_vector is
variable d: std_logic;
variable r: std_logic_vector(15 downto 0);
variable crcout: std_logic_vector(15 downto 0);
begin
d:= data;
r:=crcin;
crcout(0) := d xor r(15);
crcout(1) := r(0);
crcout(2) := r(1);
crcout(3) := r(2);
crcout(4) := r(3);
crcout(5) := d xor r(4) xor r(15);
crcout(6) := r(5);
crcout(7) := r(6);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -