⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc_pkg.vhd

📁 VHDL语言实现的CRC校验
💻 VHD
📖 第 1 页 / 共 2 页
字号:
---------------------------------------------------------------------------------------------------- 
---------------------------------------------------------------------------------------------------- 
--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 + -