diff options
Diffstat (limited to 'testsuite/gna/issue1138/crc_pkg.vhdl')
-rw-r--r-- | testsuite/gna/issue1138/crc_pkg.vhdl | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/testsuite/gna/issue1138/crc_pkg.vhdl b/testsuite/gna/issue1138/crc_pkg.vhdl new file mode 100644 index 000000000..ca8d93079 --- /dev/null +++ b/testsuite/gna/issue1138/crc_pkg.vhdl @@ -0,0 +1,53 @@ +library ieee; + use ieee.std_logic_1164.all; + use ieee.numeric_std.all; + use ieee.math_real.all; + +package crc_pkg is + + type crcParam_t is record + selLen : integer; + poly : std_ulogic_vector; + iniVect : std_ulogic_vector; + refIn : boolean; + refOut : boolean; + xorOut : std_ulogic_vector; + end record; + + pure function getCrc32Param( stdCrc : string + ; datLen : integer + ) return crcParam_t; + +end crc_pkg; + +package body crc_pkg is + + pure function getCrc32Param( stdCrc : string + ; datLen : integer + ) return crcParam_t is + variable crcParam_v : crcParam_t( poly ( 31 downto 0) + , iniVect ( 31 downto 0) + , xorOut ( 31 downto 0) ); + begin + if ( "CRC-32/CCITT-FALSE" = stdCrc ) then + crcParam_v.selLen := datLen / 8 ; + crcParam_v.poly := X"04C11DB7" ; + crcParam_v.iniVect := X"FFFFFFFF" ; + crcParam_v.refIn := true ; + crcParam_v.refOut := true ; + crcParam_v.xorOut := X"FFFFFFFF" ; + else + crcParam_v.selLen := datLen / 8 ; + crcParam_v.poly := X"000000AF" ; + crcParam_v.iniVect := X"00000000" ; + crcParam_v.refIn := false ; + crcParam_v.refOut := false ; + crcParam_v.xorOut := X"00000000" ; + assert false report + " Standard crc not implemented Yet." + severity failure; + end if; + return crcParam_v; + end function; + +end package body crc_pkg; |