diff --git a/applications/rdma_demo/hdllib.cfg b/applications/rdma_demo/hdllib.cfg deleted file mode 100644 index 16571f029fdcc518a908057760335b93a074d154..0000000000000000000000000000000000000000 --- a/applications/rdma_demo/hdllib.cfg +++ /dev/null @@ -1,20 +0,0 @@ -hdl_lib_name = rdma_demo -hdl_library_clause_name = rdma_demo_lib -hdl_lib_uses_synth = common dp eth axi4 -hdl_lib_uses_sim = -hdl_lib_technology = - -synth_files = - src/vhdl/rdma_demo_pkg.vhd - src/vhdl/rdma_demo_eth_tester_wrapper.vhd - src/vhdl/rdma_demo_roce_tester_wrapper.vhd - -test_bench_files = - -regression_test_vhdl = - - -[modelsim_project_file] - -[quartus_project_file] - diff --git a/applications/rdma_demo/libraries/rdma_generator/hdllib.cfg b/applications/rdma_demo/libraries/rdma_generator/hdllib.cfg new file mode 100644 index 0000000000000000000000000000000000000000..712761d4a8f319441bfd70ce39496b0666dfb209 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_generator/hdllib.cfg @@ -0,0 +1,22 @@ +hdl_lib_name = rdma_generator +hdl_library_clause_name = rdma_generator_lib +hdl_lib_uses_synth = common dp eth axi4 rdma_icrc_external +hdl_lib_uses_sim = diag technology tech_tse +hdl_lib_technology = + +synth_files = + src/vhdl/rdma_generator_pkg.vhd + src/vhdl/rdma_generator_eth_tester_wrapper.vhd + src/vhdl/rdma_generator_roce_tester.vhd + src/vhdl/rdma_generator_roce_tester_wrapper.vhd + +test_bench_files = + tb/vhdl/tb_rdma_generator.vhd + +regression_test_vhdl = + + +[modelsim_project_file] + +[quartus_project_file] + diff --git a/applications/rdma_demo/src/vhdl/rdma_demo_eth_tester_wrapper.vhd b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_eth_tester_wrapper.vhd similarity index 96% rename from applications/rdma_demo/src/vhdl/rdma_demo_eth_tester_wrapper.vhd rename to applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_eth_tester_wrapper.vhd index 8a099df82cf0ffbf05d05dfd82c90c87a9dc7ade..9c83af4c58457be7465f5226897c41d57e9a33a0 100644 --- a/applications/rdma_demo/src/vhdl/rdma_demo_eth_tester_wrapper.vhd +++ b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_eth_tester_wrapper.vhd @@ -21,7 +21,7 @@ -- Purpose: Provide AXI-4-stream interfaces + standard avalon MM interfaces for -- eth_tester.vhd such that it can be used to create a Vivado IP block. -- Description: --- . The rdma_demo_eth_tester_wrapper uses axi4_stream_dp_bridge to convert the dp +-- . The rdma_generator_eth_tester_wrapper uses axi4_stream_dp_bridge to convert the dp -- sosi/siso interfaces of the eth_tester into AXI4-Stream interfaces. -- . In order for this component to be suitable as a Vivado IP, the ports are -- exclusively STD_LOGIC(_VECTOR) where the widths are hard-coded as demanded @@ -40,9 +40,9 @@ use dp_lib.dp_components_pkg.all; use axi4_lib.axi4_stream_pkg.all; use eth_lib.eth_pkg.all; use eth_lib.eth_tester_pkg.all; -use work.rdma_demo_pkg.all; +use work.rdma_generator_pkg.all; -entity rdma_demo_eth_tester_wrapper is +entity rdma_generator_eth_tester_wrapper is port ( -- Clocks and reset mm_clk : in std_logic; @@ -148,10 +148,10 @@ entity rdma_demo_eth_tester_wrapper is reg_strobe_total_count_rx_avs_writedata : in std_logic_vector(32 - 1 downto 0) ); -end rdma_demo_eth_tester_wrapper; +end rdma_generator_eth_tester_wrapper; -architecture str of rdma_demo_eth_tester_wrapper is - constant c_nof_byte : natural := c_rdma_demo_nof_octet_output_100gbe; +architecture str of rdma_generator_eth_tester_wrapper is + constant c_nof_byte : natural := c_rdma_generator_nof_octet_output_100gbe; signal rx_udp_sosi_arr : t_dp_sosi_arr(0 downto 0) := (others => c_dp_sosi_rst); signal rx_udp_siso_arr : t_dp_siso_arr(0 downto 0) := (others => c_dp_siso_rdy); @@ -184,13 +184,13 @@ architecture str of rdma_demo_eth_tester_wrapper is begin u_eth_tester : entity eth_lib.eth_tester generic map ( - g_nof_octet_generate => c_rdma_demo_nof_octet_generate_100gbe, - g_nof_octet_output => c_rdma_demo_nof_octet_output_100gbe, + g_nof_octet_generate => c_rdma_generator_nof_octet_generate_100gbe, + g_nof_octet_output => c_rdma_generator_nof_octet_output_100gbe, g_use_eth_header => false, g_use_ip_udp_header => false, g_use_dp_header => true, - g_hdr_field_arr => c_rdma_demo_dp_hdr_field_arr, - g_hdr_field_sel => c_rdma_demo_dp_hdr_field_sel, + g_hdr_field_arr => c_rdma_generator_dp_hdr_field_arr, + g_hdr_field_sel => c_rdma_generator_dp_hdr_field_sel, g_remove_crc => false ) port map ( diff --git a/applications/rdma_demo/src/vhdl/rdma_demo_pkg.vhd b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_pkg.vhd similarity index 74% rename from applications/rdma_demo/src/vhdl/rdma_demo_pkg.vhd rename to applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_pkg.vhd index ebb8993efb0cc384c2288d53b4d707f9babaffba..4c5ec3f221a9597d10aaf16a0a6afb05c9bc4bd5 100644 --- a/applications/rdma_demo/src/vhdl/rdma_demo_pkg.vhd +++ b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_pkg.vhd @@ -19,7 +19,7 @@ ------------------------------------------------------------------------------- -- -- Author: R. vd Walle --- Purpose: This package contains rdma_demo specific constants and/or functions +-- Purpose: This package contains rdma_generator specific constants and/or functions -- Description: -- library IEEE, common_lib; @@ -29,9 +29,9 @@ use common_lib.common_mem_pkg.all; use common_lib.common_field_pkg.all; use common_lib.common_network_layers_pkg.all; -package rdma_demo_pkg is - constant c_rdma_demo_nof_octet_generate_100gbe : natural := 64; - constant c_rdma_demo_nof_octet_output_100gbe : natural := 64; +package rdma_generator_pkg is + constant c_rdma_generator_nof_octet_generate_100gbe : natural := 64; + constant c_rdma_generator_nof_octet_output_100gbe : natural := 64; -- hdr_field_sel bit selects where the hdr_field value is set: -- . 0 = data path controlled, value is set in data path, so field_default() @@ -41,7 +41,7 @@ package rdma_demo_pkg is -- Remarks: -- . For constant values it is convenient to use MM controlled, because then -- the field_default() is used that can be set here in - -- c_rdma_demo_hdr_field_arr. + -- c_rdma_generator_hdr_field_arr. -- . For reserved values it is convenient to use MM controlled, because then -- in future they could still be changed via MM without having to recompile -- the FW. @@ -51,26 +51,26 @@ package rdma_demo_pkg is -- to 0 by declaring hdr_fields_in_arr with all 0. Hence e.g. udp_checksum -- = 0 can be achieve via data path and default hdr_fields_in_arr = 0 or -- via MM controlled and field_default(0). - constant c_rdma_demo_dp_nof_hdr_fields : natural := 4; - constant c_rdma_demo_dp_hdr_field_sel : std_logic_vector(c_rdma_demo_dp_nof_hdr_fields - 1 downto 0) := "0100"; + constant c_rdma_generator_dp_nof_hdr_fields : natural := 4; + constant c_rdma_generator_dp_hdr_field_sel : std_logic_vector(c_rdma_generator_dp_nof_hdr_fields - 1 downto 0) := "0100"; - constant c_rdma_demo_dp_hdr_field_arr : t_common_field_arr(c_rdma_demo_dp_nof_hdr_fields - 1 downto 0) := ( + constant c_rdma_generator_dp_hdr_field_arr : t_common_field_arr(c_rdma_generator_dp_nof_hdr_fields - 1 downto 0) := ( ( field_name_pad("dp_length" ), "RW", 16, field_default(0) ), ( field_name_pad("dp_reserved"), "RW", 15, field_default(0) ), ( field_name_pad("dp_sync" ), "RW", 1, field_default(0) ), ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) ); - constant c_rdma_demo_dp_reg_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_rdma_demo_dp_hdr_field_arr, c_word_w)); - constant c_rdma_demo_dp_reg_hdr_dat_addr_span : natural := 2**c_rdma_demo_dp_reg_hdr_dat_addr_w; + constant c_rdma_generator_dp_reg_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_rdma_generator_dp_hdr_field_arr, c_word_w)); + constant c_rdma_generator_dp_reg_hdr_dat_addr_span : natural := 2**c_rdma_generator_dp_reg_hdr_dat_addr_w; - constant c_rdma_demo_dp_app_hdr_len : natural := 12; -- octets + constant c_rdma_generator_dp_app_hdr_len : natural := 12; -- octets -- RoCEv2 header for RDMA write operation (excluding ETH, IP, UDP) -- Base Transport Header (BTH) + RDMA Extended Transport Header (RETH) + Immediate Data - constant c_rdma_demo_roce_nof_hdr_fields : natural := 12 + 4 + 13 + 3 + 1; - constant c_rdma_demo_roce_hdr_field_sel : std_logic_vector(c_rdma_demo_roce_nof_hdr_fields - 1 downto 0) := "111011111001" & "0100" & "1111111111111" & "111" & "1"; + constant c_rdma_generator_roce_nof_hdr_fields : natural := 12 + 4 + 13 + 3 + 1; + constant c_rdma_generator_roce_hdr_field_sel : std_logic_vector(c_rdma_generator_roce_nof_hdr_fields - 1 downto 0) := "111011111001" & "0100" & "1111111111111" & "111" & "1"; - constant c_rdma_demo_roce_hdr_field_arr : t_common_field_arr(c_rdma_demo_roce_nof_hdr_fields - 1 downto 0) := ( + constant c_rdma_generator_roce_hdr_field_arr : t_common_field_arr(c_rdma_generator_roce_nof_hdr_fields - 1 downto 0) := ( ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), @@ -109,12 +109,12 @@ package rdma_demo_pkg is ( field_name_pad("immediate_data" ), "RW", 32, field_default(0) ) ); - constant c_rdma_demo_roce_reg_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_rdma_demo_roce_hdr_field_arr, c_word_w)); - constant c_rdma_demo_roce_reg_hdr_dat_addr_span : natural := 2**c_rdma_demo_roce_reg_hdr_dat_addr_w; + constant c_rdma_generator_roce_reg_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_rdma_generator_roce_hdr_field_arr, c_word_w)); + constant c_rdma_generator_roce_reg_hdr_dat_addr_span : natural := 2**c_rdma_generator_roce_reg_hdr_dat_addr_w; - constant c_rdma_demo_roce_hdr_len : natural := 32; -- octets - constant c_rdma_demo_roce_icrc_len : natural := 4; -- octets -end rdma_demo_pkg; + constant c_rdma_generator_roce_hdr_len : natural := 32; -- octets + constant c_rdma_generator_roce_icrc_len : natural := 4; -- octets +end rdma_generator_pkg; -package body rdma_demo_pkg is -end rdma_demo_pkg; +package body rdma_generator_pkg is +end rdma_generator_pkg; diff --git a/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_roce_tester.vhd b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_roce_tester.vhd new file mode 100644 index 0000000000000000000000000000000000000000..638a8d10df007b71d3bc7c68d9aaba7fc0334d2d --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_roce_tester.vhd @@ -0,0 +1,155 @@ +------------------------------------------------------------------------------- +-- +-- Copyright 2023 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +------------------------------------------------------------------------------- +-- Author: R. van der Walle +-- Purpose: Provide AXI-4-stream interfaces + standard avalon MM interfaces for +-- eth_tester.vhd such that it can be used to create a Vivado IP block. +-- Description: +-- . The rdma_generator_roce_tester_wrapper uses axi4_stream_dp_bridge to convert the dp +-- sosi/siso interfaces of the eth_tester into AXI4-Stream interfaces. +-- . In order for this component to be suitable as a Vivado IP, the ports are +-- exclusively STD_LOGIC(_VECTOR) where the widths are hard-coded as demanded +-- by the Vivado IP creator (only supports VHDL-93). +-- . * roce = RDMA Over Converged Ethernet +-- Remark +-- . Avalon is used for all MM interfaces, which can be bridged to AXI4-Lite in +-- vivado using the AXI AMM Bridge IP. + +library IEEE, common_lib, dp_lib, eth_lib, rdma_icrc_external_lib; +use IEEE.std_logic_1164.all; +use common_lib.common_pkg.all; +use common_lib.common_mem_pkg.all; +use common_lib.common_network_layers_pkg.all; +use dp_lib.dp_stream_pkg.all; +use dp_lib.dp_components_pkg.all; +use eth_lib.eth_pkg.all; +use eth_lib.eth_tester_pkg.all; +use work.rdma_generator_pkg.all; + +entity rdma_generator_roce_tester is + port ( + -- Clocks and reset + mm_clk : in std_logic; + mm_rst : in std_logic; + st_clk : in std_logic; + st_rst : in std_logic; + st_pps : in std_logic; + + tx_fifo_rd_emp_arr : out std_logic_vector(0 downto 0); + + rx_udp_sosi_arr : in t_dp_sosi_arr(0 downto 0) := (others => c_dp_sosi_rst); + tx_udp_sosi_arr : out t_dp_sosi_arr(0 downto 0) := (others => c_dp_sosi_rst); + tx_udp_siso_arr : in t_dp_siso_arr(0 downto 0) := (others => c_dp_siso_rdy); + + reg_bg_ctrl_copi : in t_mem_copi := c_mem_copi_rst; + reg_bg_ctrl_cipo : out t_mem_cipo; + reg_hdr_dat_copi : in t_mem_copi := c_mem_copi_rst; + reg_hdr_dat_cipo : out t_mem_cipo; + reg_bsn_monitor_v2_tx_copi : in t_mem_copi := c_mem_copi_rst; + reg_bsn_monitor_v2_tx_cipo : out t_mem_cipo; + reg_strobe_total_count_tx_copi : in t_mem_copi := c_mem_copi_rst; + reg_strobe_total_count_tx_cipo : out t_mem_cipo; + reg_dp_split_copi : in t_mem_copi := c_mem_copi_rst; + reg_dp_split_cipo : out t_mem_cipo; + + reg_bsn_monitor_v2_rx_copi : in t_mem_copi := c_mem_copi_rst; + reg_bsn_monitor_v2_rx_cipo : out t_mem_cipo; + reg_strobe_total_count_rx_copi : in t_mem_copi := c_mem_copi_rst; + reg_strobe_total_count_rx_cipo : out t_mem_cipo; + + eth_src_mac : in std_logic_vector(c_network_eth_mac_addr_w - 1 downto 0); + ip_src_addr : in std_logic_vector(c_network_ip_addr_w - 1 downto 0); + udp_src_port : in std_logic_vector(c_network_udp_port_w - 1 downto 0) + + ); +end rdma_generator_roce_tester; + +architecture str of rdma_generator_roce_tester is + constant c_nof_byte : natural := c_rdma_generator_nof_octet_output_100gbe; + constant c_reverse_byte_order : boolean := false; + signal eth_tester_tx_sosi_arr : t_dp_sosi_arr(0 downto 0) := (others => c_dp_sosi_rst); + signal eth_tester_tx_siso_arr : t_dp_siso_arr(0 downto 0) := (others => c_dp_siso_rdy); + +begin + + u_eth_tester : entity eth_lib.eth_tester + generic map ( + g_nof_octet_generate => c_rdma_generator_nof_octet_generate_100gbe, + g_nof_octet_output => c_rdma_generator_nof_octet_output_100gbe, + g_use_eth_header => false, + g_use_ip_udp_header => true, + g_use_dp_header => false, + g_hdr_calc_ip_crc => true, + g_hdr_field_arr => c_rdma_generator_roce_hdr_field_arr, + g_hdr_field_sel => c_rdma_generator_roce_hdr_field_sel, + -- Add icrc length here as g_hdr_app_len is used to calculate the total packet length. + g_hdr_app_len => c_rdma_generator_roce_hdr_len + c_rdma_generator_roce_icrc_len, + g_remove_crc => false + ) + port map ( + -- Clocks and reset + mm_rst => mm_rst, + mm_clk => mm_clk, + st_rst => st_rst, + st_clk => st_clk, + st_pps => st_pps, + + -- UDP transmit interface + eth_src_mac => eth_src_mac, + ip_src_addr => ip_src_addr, + udp_src_port => udp_src_port, + + tx_fifo_rd_emp_arr => tx_fifo_rd_emp_arr, + + tx_udp_sosi_arr => eth_tester_tx_sosi_arr, + tx_udp_siso_arr => eth_tester_tx_siso_arr, + + -- UDP receive interface + rx_udp_sosi_arr => rx_udp_sosi_arr, + + -- Memory Mapped Slaves (one per stream) + reg_bg_ctrl_copi => reg_bg_ctrl_copi, + reg_bg_ctrl_cipo => reg_bg_ctrl_cipo, + reg_hdr_dat_copi => reg_hdr_dat_copi, + reg_hdr_dat_cipo => reg_hdr_dat_cipo, + reg_bsn_monitor_v2_tx_copi => reg_bsn_monitor_v2_tx_copi, + reg_bsn_monitor_v2_tx_cipo => reg_bsn_monitor_v2_tx_cipo, + reg_strobe_total_count_tx_copi => reg_strobe_total_count_tx_copi, + reg_strobe_total_count_tx_cipo => reg_strobe_total_count_tx_cipo, + reg_dp_split_copi => reg_dp_split_copi, + reg_dp_split_cipo => reg_dp_split_cipo, + + reg_bsn_monitor_v2_rx_copi => reg_bsn_monitor_v2_rx_copi, + reg_bsn_monitor_v2_rx_cipo => reg_bsn_monitor_v2_rx_cipo, + reg_strobe_total_count_rx_copi => reg_strobe_total_count_rx_copi, + reg_strobe_total_count_rx_cipo => reg_strobe_total_count_rx_cipo + ); + + u_icrc_append : entity rdma_icrc_external_lib.append_crc_dp_wrapper + port map ( + dp_clk => st_clk, + dp_rst => st_rst, + + out_dp_sosi => tx_udp_sosi_arr(0), + out_dp_siso => tx_udp_siso_arr(0), + in_dp_sosi => eth_tester_tx_sosi_arr(0), + in_dp_siso => eth_tester_tx_siso_arr(0) + ); + +end str; diff --git a/applications/rdma_demo/src/vhdl/rdma_demo_roce_tester_wrapper.vhd b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_roce_tester_wrapper.vhd similarity index 96% rename from applications/rdma_demo/src/vhdl/rdma_demo_roce_tester_wrapper.vhd rename to applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_roce_tester_wrapper.vhd index 8b050864ca6bc8e3c18551df4f5db74dec8cfba7..9af4401c2a2a6b512247f622dfa4dab1dbc2a3fb 100644 --- a/applications/rdma_demo/src/vhdl/rdma_demo_roce_tester_wrapper.vhd +++ b/applications/rdma_demo/libraries/rdma_generator/src/vhdl/rdma_generator_roce_tester_wrapper.vhd @@ -21,7 +21,7 @@ -- Purpose: Provide AXI-4-stream interfaces + standard avalon MM interfaces for -- eth_tester.vhd such that it can be used to create a Vivado IP block. -- Description: --- . The rdma_demo_roce_tester_wrapper uses axi4_stream_dp_bridge to convert the dp +-- . The rdma_generator_roce_tester_wrapper uses axi4_stream_dp_bridge to convert the dp -- sosi/siso interfaces of the eth_tester into AXI4-Stream interfaces. -- . In order for this component to be suitable as a Vivado IP, the ports are -- exclusively STD_LOGIC(_VECTOR) where the widths are hard-coded as demanded @@ -41,9 +41,9 @@ use dp_lib.dp_components_pkg.all; use axi4_lib.axi4_stream_pkg.all; use eth_lib.eth_pkg.all; use eth_lib.eth_tester_pkg.all; -use work.rdma_demo_pkg.all; +use work.rdma_generator_pkg.all; -entity rdma_demo_roce_tester_wrapper is +entity rdma_generator_roce_tester_wrapper is port ( -- Clocks and reset mm_clk : in std_logic; @@ -149,10 +149,10 @@ entity rdma_demo_roce_tester_wrapper is reg_strobe_total_count_rx_avs_writedata : in std_logic_vector(32 - 1 downto 0) ); -end rdma_demo_roce_tester_wrapper; +end rdma_generator_roce_tester_wrapper; -architecture str of rdma_demo_roce_tester_wrapper is - constant c_nof_byte : natural := c_rdma_demo_nof_octet_output_100gbe; +architecture str of rdma_generator_roce_tester_wrapper is + constant c_nof_byte : natural := c_rdma_generator_nof_octet_output_100gbe; constant c_reverse_byte_order : boolean := false; signal rx_udp_sosi_arr : t_dp_sosi_arr(0 downto 0) := (others => c_dp_sosi_rst); @@ -186,16 +186,16 @@ architecture str of rdma_demo_roce_tester_wrapper is begin u_eth_tester : entity eth_lib.eth_tester generic map ( - g_nof_octet_generate => c_rdma_demo_nof_octet_generate_100gbe, - g_nof_octet_output => c_rdma_demo_nof_octet_output_100gbe, + g_nof_octet_generate => c_rdma_generator_nof_octet_generate_100gbe, + g_nof_octet_output => c_rdma_generator_nof_octet_output_100gbe, g_use_eth_header => false, g_use_ip_udp_header => true, g_use_dp_header => false, g_hdr_calc_ip_crc => true, - g_hdr_field_arr => c_rdma_demo_roce_hdr_field_arr, - g_hdr_field_sel => c_rdma_demo_roce_hdr_field_sel, + g_hdr_field_arr => c_rdma_generator_roce_hdr_field_arr, + g_hdr_field_sel => c_rdma_generator_roce_hdr_field_sel, -- Add icrc length here as g_hdr_app_len is used to calculate the total packet length. - g_hdr_app_len => c_rdma_demo_roce_hdr_len + c_rdma_demo_roce_icrc_len, + g_hdr_app_len => c_rdma_generator_roce_hdr_len + c_rdma_generator_roce_icrc_len, g_remove_crc => false ) port map ( diff --git a/applications/rdma_demo/libraries/rdma_generator/tb/vhdl/tb_rdma_generator.vhd b/applications/rdma_demo/libraries/rdma_generator/tb/vhdl/tb_rdma_generator.vhd new file mode 100644 index 0000000000000000000000000000000000000000..905fe77cabb4212ad3c36883ef568ab13f7b68f2 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_generator/tb/vhdl/tb_rdma_generator.vhd @@ -0,0 +1,509 @@ +------------------------------------------------------------------------------- +-- +-- Copyright 2023 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +------------------------------------------------------------------------------- +-- Author: R. vd Walle +-- Purpose: Test bench for rdma_generator_roce_tester using high bandwidth generic +-- configuration, e.g. g_nof_octet_output = 64 and g_nof_octet_generate = 64. +-- Description: Similar to the 1GbE testbench [1] for the eth tester but using generic +-- values for usage with high bandwidth, e.g. 10 / 100 GbE. +-- The g_nof_streams >= 1 are tested independently, using g_bg_ctrl_first for +-- BG in stream 0 and g_bg_ctrl_others for all other streams. +-- +-- Usage: +-- > as 8 +-- # * E.g. view sosi/data signals in dut/gen_streams/u_rx and u_tx +-- > run -a +-- +-- References: +-- [1] https://support.astron.nl/confluence/display/L2M/L6+FWLIB+Design+Document%3A+ETH+tester+unit+for+1GbE + +library IEEE, common_lib, dp_lib, diag_lib, technology_lib, tech_tse_lib, eth_lib; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; +use common_lib.common_pkg.all; +use common_lib.common_mem_pkg.all; +use common_lib.common_str_pkg.all; +use common_lib.tb_common_pkg.all; +use common_lib.tb_common_mem_pkg.all; +use common_lib.common_network_layers_pkg.all; +use dp_lib.dp_stream_pkg.all; +use dp_lib.dp_components_pkg.all; +use diag_lib.diag_pkg.all; +use eth_lib.eth_pkg.all; +use eth_lib.eth_tester_pkg.all; +use eth_lib.tb_eth_tester_pkg.all; +use technology_lib.technology_select_pkg.all; +use tech_tse_lib.tech_tse_pkg.all; +use tech_tse_lib.tb_tech_tse_pkg.all; + +entity tb_rdma_generator is + generic ( + g_tb_index : natural := 0; -- use to incremental delay logging from tb instances in tb_tb + g_nof_sync : natural := 2; -- number of BG sync intervals to set c_run_time + g_nof_streams : natural := 1; + g_nof_octet_output : natural := 64; -- maximum = 96 bytes as max dp.data field = 768 bits. + g_nof_octet_generate : natural := 64; + + -- t_diag_block_gen_integer = + -- sl: enable + -- sl: enable_sync + -- nat: samples_per_packet + -- nat: blocks_per_sync + -- nat: gapsize + -- nat: mem_low_adrs + -- nat: mem_high_adrs + -- nat: bsn_init + + -- for first stream + g_bg_ctrl_first : t_diag_block_gen_integer := ('1', '1', 500, 3, 200, 0, c_diag_bg_mem_max_adr, 0); + -- for other streams + g_bg_ctrl_others : t_diag_block_gen_integer := ('1', '1', 300, 3, 10, 0, c_diag_bg_mem_max_adr, 0) + ); + port ( + tb_end : out std_logic + ); +end tb_rdma_generator; + +architecture tb of tb_rdma_generator is + -- use to distinguish logging from tb instances in tb_tb + constant c_tb_str : string := "tb-" & natural'image(g_tb_index) & " : "; + + constant mm_clk_period : time := 10 ns; -- 100 MHz + constant c_nof_st_clk_per_s : natural := 200 * 10**6; + constant st_clk_period : time := (10**9 / c_nof_st_clk_per_s) * 1 ns; -- 5 ns, 200 MHz + + constant c_bg_block_len_first : natural := ceil_div(g_bg_ctrl_first.samples_per_packet, g_nof_octet_generate); + constant c_bg_block_len_others : natural := ceil_div(g_bg_ctrl_others.samples_per_packet, g_nof_octet_generate); + constant c_bg_block_len_max : natural := largest(c_bg_block_len_first, c_bg_block_len_others); + + constant c_bg_slot_len_first : natural := c_bg_block_len_first + g_bg_ctrl_first.gapsize; + constant c_bg_slot_len_others : natural := c_bg_block_len_others + g_bg_ctrl_others.gapsize; + constant c_bg_slot_len_max : natural := largest(c_bg_slot_len_first, c_bg_slot_len_others); + + constant c_eth_packet_len_first : natural := func_eth_tester_eth_packet_length(c_bg_block_len_first); + constant c_eth_packet_len_others : natural := func_eth_tester_eth_packet_length(c_bg_block_len_others); + + -- Use REAL to avoid NATURAL overflow in bps calculation + + + constant c_bg_nof_bps_first : real := real(c_bg_block_len_first * c_octet_w) * real(c_nof_st_clk_per_s) / real(c_bg_slot_len_first); + constant c_bg_nof_bps_others : real := real(c_bg_block_len_others * c_octet_w) * real(c_nof_st_clk_per_s) / real(c_bg_slot_len_others); + constant c_bg_nof_bps_total : real := c_bg_nof_bps_first + real(g_nof_streams - 1) * c_bg_nof_bps_others; + + constant c_bg_sync_period_first : natural := c_bg_slot_len_first * g_bg_ctrl_first.blocks_per_sync; + constant c_bg_sync_period_others : natural := c_bg_slot_len_others * g_bg_ctrl_others.blocks_per_sync; + constant c_bg_sync_period_max : natural := largest(c_bg_sync_period_first, c_bg_sync_period_others); + + constant c_run_time : natural := g_nof_sync * c_bg_sync_period_max; + constant c_nof_sync_first : natural := c_run_time / c_bg_sync_period_first; + constant c_nof_sync_others : natural := c_run_time / c_bg_sync_period_others; + + -- Expected Tx --> Rx latency values obtained from a tb run + constant c_tx_exp_latency : natural := 0; + constant c_rx_exp_latency_en : boolean := c_bg_block_len_max >= 50; + constant c_rx_exp_latency_st : natural := 19; + + -- CRC is added by Tx TSE IP and removed by dp_offload_rx when g_remove_crc = + -- g_loopback_eth = TRUE. Therefore internally only application payload + -- (= block_len) octets are counted. + constant c_nof_valid_per_packet_first : natural := c_bg_block_len_first; + constant c_nof_valid_per_packet_others : natural := c_bg_block_len_others; + + constant c_total_count_nof_valid_per_sync_first : natural := g_bg_ctrl_first.blocks_per_sync * c_nof_valid_per_packet_first; + constant c_total_count_nof_valid_per_sync_others : natural := g_bg_ctrl_others.blocks_per_sync * c_nof_valid_per_packet_others; + + constant c_mon_nof_sop_first : natural := g_bg_ctrl_first.blocks_per_sync; + constant c_mon_nof_sop_others : natural := g_bg_ctrl_others.blocks_per_sync; + constant c_mon_nof_valid_first_tx : natural := c_mon_nof_sop_first * ceil_div(c_bg_block_len_first * g_nof_octet_generate, g_nof_octet_output); + constant c_mon_nof_valid_first_rx : natural := c_mon_nof_sop_first * c_nof_valid_per_packet_first; + constant c_mon_nof_valid_others_tx : natural := c_mon_nof_sop_others * ceil_div(c_bg_block_len_others * g_nof_octet_generate, g_nof_octet_output); + constant c_mon_nof_valid_others_rx : natural := c_mon_nof_sop_others * c_nof_valid_per_packet_others; + + -- Use sim default src MAC, IP, UDP port from eth_tester_pkg.vhd and based on c_gn_index + constant c_gn_index : natural := 17; -- global node index + constant c_gn_eth_src_mac : std_logic_vector(c_network_eth_mac_addr_w - 1 downto 0) := c_eth_tester_eth_src_mac_47_16 & func_eth_tester_gn_index_to_mac_15_0(c_gn_index); + constant c_gn_ip_src_addr : std_logic_vector(c_network_ip_addr_w - 1 downto 0) := c_eth_tester_ip_src_addr_31_16 & func_eth_tester_gn_index_to_ip_15_0(c_gn_index); + constant c_gn_udp_src_port : std_logic_vector(c_network_udp_port_w - 1 downto 0) := c_eth_tester_udp_src_port_15_8 & TO_UVEC(c_gn_index, 8); + + -- Clocks and reset + signal mm_rst : std_logic := '1'; + signal mm_clk : std_logic := '1'; + signal st_rst : std_logic := '1'; + signal st_clk : std_logic := '1'; + signal st_pps : std_logic := '0'; + signal stimuli_end : std_logic := '0'; + signal i_tb_end : std_logic := '0'; + + -- Use same bg_ctrl for all others streams, this provides sufficient test coverage + signal bg_ctrl_arr : t_diag_block_gen_integer_arr(g_nof_streams - 1 downto 0); + + signal tx_fifo_rd_emp_arr : std_logic_vector(g_nof_streams - 1 downto 0); + + -- ETH UDP data path interface + signal tx_udp_sosi_arr : t_dp_sosi_arr(g_nof_streams - 1 downto 0); + signal tx_udp_siso_arr : t_dp_siso_arr(g_nof_streams - 1 downto 0) := (others => c_dp_siso_rdy); + signal rx_udp_sosi_arr : t_dp_sosi_arr(g_nof_streams - 1 downto 0); + + -- MM interface + -- . Tx + signal reg_bg_ctrl_copi : t_mem_copi := c_mem_copi_rst; + signal reg_bg_ctrl_cipo : t_mem_cipo; + signal reg_hdr_dat_copi : t_mem_copi := c_mem_copi_rst; + signal reg_hdr_dat_cipo : t_mem_cipo; + signal reg_bsn_monitor_v2_tx_copi : t_mem_copi := c_mem_copi_rst; + signal reg_bsn_monitor_v2_tx_cipo : t_mem_cipo; + signal reg_strobe_total_count_tx_copi : t_mem_copi := c_mem_copi_rst; + signal reg_strobe_total_count_tx_cipo : t_mem_cipo; + signal reg_dp_split_copi : t_mem_copi := c_mem_copi_rst; + signal reg_dp_split_cipo : t_mem_cipo; + -- . Rx + signal reg_bsn_monitor_v2_rx_copi : t_mem_copi := c_mem_copi_rst; + signal reg_bsn_monitor_v2_rx_cipo : t_mem_cipo; + signal reg_strobe_total_count_rx_copi : t_mem_copi := c_mem_copi_rst; + signal reg_strobe_total_count_rx_cipo : t_mem_cipo; + + -- . reg_strobe_total_count + signal tx_total_count_nof_packet_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal rx_total_count_nof_packet_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal exp_total_count_nof_packet_arr : t_natural_arr(g_nof_streams - 1 downto 0); -- same for both tx and rx + + signal rx_total_count_nof_valid_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal rx_exp_total_count_nof_valid_arr : t_natural_arr(g_nof_streams - 1 downto 0); + + signal rx_total_count_nof_corrupted_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal rx_exp_total_count_nof_corrupted_arr : t_natural_arr(g_nof_streams - 1 downto 0); + + -- . reg_bsn_monitor_v2 + signal tx_mon_nof_sop_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal tx_mon_nof_valid_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal tx_mon_latency_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal rx_mon_nof_sop_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal rx_mon_nof_valid_arr : t_natural_arr(g_nof_streams - 1 downto 0); + signal rx_mon_latency_arr : t_natural_arr(g_nof_streams - 1 downto 0); + + -- View in Wave window + signal dbg_c_run_time : natural := c_run_time; + signal dbg_c_mon_nof_sop_first : natural := c_mon_nof_sop_first; + signal dbg_c_mon_nof_sop_others : natural := c_mon_nof_sop_others; + signal dbg_c_mon_nof_valid_first_tx : natural := c_mon_nof_valid_first_tx; + signal dbg_c_mon_nof_valid_first_rx : natural := c_mon_nof_valid_first_rx; + signal dbg_c_mon_nof_valid_others_tx : natural := c_mon_nof_valid_others_tx; + signal dbg_c_mon_nof_valid_others_rx : natural := c_mon_nof_valid_others_rx; +begin + tb_end <= i_tb_end; + + mm_clk <= (not mm_clk) or i_tb_end after mm_clk_period / 2; + st_clk <= (not st_clk) or i_tb_end after st_clk_period / 2; + mm_rst <= '1', '0' after mm_clk_period * 5; + st_rst <= '1', '0' after st_clk_period * 5; + + -- Using + --SIGNAL exp_total_count_nof_packet_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + -- (g_nof_streams-1 DOWNTO 1 => g_nof_sync * g_bg_ctrl_others.blocks_per_sync, + -- 0 => g_nof_sync * g_bg_ctrl_first.blocks_per_sync); + -- yields verror 1074, verror 1048, therefor use p_init instead, and + -- therefor use bg_ctrl_arr instead of c_bg_ctrl_arr. + p_init : process + begin + bg_ctrl_arr <= (others => g_bg_ctrl_others); + bg_ctrl_arr(0) <= g_bg_ctrl_first; + + exp_total_count_nof_packet_arr <= (others => c_nof_sync_others * g_bg_ctrl_others.blocks_per_sync); + exp_total_count_nof_packet_arr(0) <= c_nof_sync_first * g_bg_ctrl_first.blocks_per_sync; + + rx_exp_total_count_nof_valid_arr <= (others => c_nof_sync_others * c_total_count_nof_valid_per_sync_others); + rx_exp_total_count_nof_valid_arr(0) <= c_nof_sync_first * c_total_count_nof_valid_per_sync_first; + + rx_exp_total_count_nof_corrupted_arr <= (others => 0); -- default no Rx errors + wait; + end process; + + ----------------------------------------------------------------------------- + -- MM control and monitoring + ----------------------------------------------------------------------------- + p_mm : process + variable v_value : natural; + variable v_offset : natural; + variable v_udp_dst_port : natural; + begin + i_tb_end <= '0'; + + proc_common_wait_until_low(mm_clk, mm_rst); + proc_common_wait_some_cycles(mm_clk, 10); + + --------------------------------------------------------------------------- + -- Rx UDP offload port + --------------------------------------------------------------------------- + v_udp_dst_port := TO_UINT(c_eth_tester_udp_dst_port); + + for I in g_nof_streams - 1 downto 0 loop + v_offset := I * c_eth_tester_reg_hdr_dat_addr_span; + -- Set destination MAC/IP/UDP port in tx header, increment udp_dst_port per stream + -- The MM addresses follow from byte address_offset // 4 in eth.peripheral.yaml + proc_mem_mm_bus_wr(v_offset + 16#7#, v_udp_dst_port + I, mm_clk, reg_hdr_dat_cipo, reg_hdr_dat_copi); + -- use signed to fit 32 b in INTEGER + proc_mem_mm_bus_wr(v_offset + 16#10#, TO_SINT(c_eth_tester_ip_dst_addr), + mm_clk, reg_hdr_dat_cipo, reg_hdr_dat_copi); + proc_mem_mm_bus_wr(v_offset + 16#18#, TO_SINT(c_eth_tester_eth_dst_mac(31 downto 0)), + mm_clk, reg_hdr_dat_cipo, reg_hdr_dat_copi); + proc_mem_mm_bus_wr(v_offset + 16#19#, TO_UINT(c_eth_tester_eth_dst_mac(47 downto 32)), + mm_clk, reg_hdr_dat_cipo, reg_hdr_dat_copi); + end loop; + + --------------------------------------------------------------------------- + -- Stimuli + --------------------------------------------------------------------------- + for I in g_nof_streams - 1 downto 0 loop + v_offset := I * c_diag_bg_reg_adr_span; + -- Set number of octets per packet for dp_split + proc_mem_mm_bus_wr(I * 2, bg_ctrl_arr(I).samples_per_packet, mm_clk, reg_dp_split_copi); + + -- Prepare the BG + proc_mem_mm_bus_wr(v_offset + 1, ceil_div(bg_ctrl_arr(I).samples_per_packet, g_nof_octet_generate), + mm_clk, reg_bg_ctrl_copi); + proc_mem_mm_bus_wr(v_offset + 2, bg_ctrl_arr(I).blocks_per_sync, mm_clk, reg_bg_ctrl_copi); + proc_mem_mm_bus_wr(v_offset + 3, bg_ctrl_arr(I).gapsize, mm_clk, reg_bg_ctrl_copi); + proc_mem_mm_bus_wr(v_offset + 4, bg_ctrl_arr(I).mem_low_adrs, mm_clk, reg_bg_ctrl_copi); + proc_mem_mm_bus_wr(v_offset + 5, bg_ctrl_arr(I).mem_high_adrs, mm_clk, reg_bg_ctrl_copi); + proc_mem_mm_bus_wr(v_offset + 6, bg_ctrl_arr(I).bsn_init, mm_clk, reg_bg_ctrl_copi); -- low part + proc_mem_mm_bus_wr(v_offset + 7, 0, mm_clk, reg_bg_ctrl_copi); -- high part + -- Enable the BG at st_pps pulse. + proc_mem_mm_bus_wr(v_offset + 0, 3, mm_clk, reg_bg_ctrl_copi); + end loop; + proc_common_wait_some_cycles(mm_clk, 10); + -- Issue an st_pps pulse to start the enabled BG + proc_common_gen_pulse(st_clk, st_pps); + + -- Run test + proc_common_wait_some_cycles(st_clk, c_run_time); + + -- Disable the BG + for I in g_nof_streams - 1 downto 0 loop + v_offset := I * c_diag_bg_reg_adr_span; + -- Disable the other BG + proc_mem_mm_bus_wr(v_offset + 0, 0, mm_clk, reg_bg_ctrl_copi); + end loop; + + -- Wait until Tx FIFOs have emptied for all streams + while unsigned(tx_fifo_rd_emp_arr(g_nof_streams - 1 downto 0)) /= 2**g_nof_streams - 1 loop + proc_common_wait_some_cycles(st_clk, 1); + end loop; + proc_common_wait_some_cycles(st_clk, c_bg_sync_period_max); + stimuli_end <= '1'; + + -- Delay logging between different tb instances + proc_common_wait_some_cycles(st_clk, g_tb_index * 100); + + -- Print logging + print_str(""); -- log empty line between tb results + for I in g_nof_streams - 1 downto 0 loop + if I = 0 then + print_str(c_tb_str & + "ETH bit rate (" & natural'image(I) & ") :" & + " c_bg_nof_bps_first = " & real'image(c_bg_nof_bps_first) & " bps"); + else + print_str(c_tb_str & + "ETH bit rate (" & natural'image(I) & ") :" & + " c_bg_nof_bps_others = " & real'image(c_bg_nof_bps_others) & " bps"); + end if; + end loop; + if g_nof_streams > 1 then + print_str(c_tb_str & + "ETH bit rate total :" & + " c_bg_nof_bps_total = " & real'image(c_bg_nof_bps_total) & " bps"); + end if; + + ------------------------------------------------------------------------- + -- Verification: Total counts + ------------------------------------------------------------------------- + for I in g_nof_streams - 1 downto 0 loop + -- . read low part, ignore high part (= 0) of two word total counts + v_offset := I * c_dp_strobe_total_count_reg_adr_span; + -- Tx total nof packets + proc_mem_mm_bus_rd(v_offset + 0, mm_clk, reg_strobe_total_count_tx_cipo, reg_strobe_total_count_tx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + tx_total_count_nof_packet_arr(I) <= TO_UINT(reg_strobe_total_count_tx_cipo.rddata(c_word_w - 1 downto 0)); + -- Rx total nof packets + proc_mem_mm_bus_rd(v_offset + 0, mm_clk, reg_strobe_total_count_rx_cipo, reg_strobe_total_count_rx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + rx_total_count_nof_packet_arr(I) <= TO_UINT(reg_strobe_total_count_rx_cipo.rddata(c_word_w - 1 downto 0)); + -- Rx total nof valids + proc_mem_mm_bus_rd(v_offset + 2, mm_clk, reg_strobe_total_count_rx_cipo, reg_strobe_total_count_rx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + rx_total_count_nof_valid_arr(I) <= TO_UINT(reg_strobe_total_count_rx_cipo.rddata(c_word_w - 1 downto 0)); + -- Rx total nof corrupted + proc_mem_mm_bus_rd(v_offset + 4, mm_clk, reg_strobe_total_count_rx_cipo, reg_strobe_total_count_rx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + rx_total_count_nof_corrupted_arr(I) <= TO_UINT(reg_strobe_total_count_rx_cipo.rddata(c_word_w - 1 downto 0)); + proc_common_wait_some_cycles(mm_clk, 1); + + -- Print logging + print_str(c_tb_str & + "Tx total counts monitor(" & natural'image(I) & ") :" & + " nof_packet = " & natural'image(tx_total_count_nof_packet_arr(I))); + + print_str(c_tb_str & + "Rx total counts monitor(" & natural'image(I) & ") :" & + " nof_packet = " & natural'image(rx_total_count_nof_packet_arr(I)) & + ", nof_valid = " & natural'image(rx_total_count_nof_valid_arr(I)) & + ", nof_corrupted = " & natural'image(rx_total_count_nof_corrupted_arr(I))); + + -- Verify, only log when wrong + if c_bg_nof_bps_total < 10.0**9 then + assert tx_total_count_nof_packet_arr(I) = exp_total_count_nof_packet_arr(I) report c_tb_str & + "Wrong Tx total nof packets count(" & natural'image(I) & + "), Tx count = " & natural'image(tx_total_count_nof_packet_arr(I)) & + " /= " & natural'image(exp_total_count_nof_packet_arr(I)) & + " = Expected count" severity ERROR; + + assert rx_total_count_nof_packet_arr(I) = exp_total_count_nof_packet_arr(I) report c_tb_str & + "Wrong Rx total nof packets count(" & natural'image(I) & + "), Rx count = " & natural'image(rx_total_count_nof_packet_arr(I)) & + " /= " & natural'image(exp_total_count_nof_packet_arr(I)) & + " = Expected count" severity ERROR; + + assert rx_total_count_nof_valid_arr(I) = rx_exp_total_count_nof_valid_arr(I) report c_tb_str & + "Wrong Rx total nof valids count(" & natural'image(I) & + "), Rx count = " & natural'image(rx_total_count_nof_valid_arr(I)) & + " /= " & natural'image(rx_exp_total_count_nof_valid_arr(I)) & + " = Expected count" severity ERROR; + + assert rx_total_count_nof_corrupted_arr(I) = rx_exp_total_count_nof_corrupted_arr(I) report c_tb_str & + "Wrong Rx total nof corrupted count(" & natural'image(I) & + "), Rx count = " & natural'image(rx_total_count_nof_corrupted_arr(I)) & + " /= " & natural'image(rx_exp_total_count_nof_corrupted_arr(I)) & + " = Expected count" severity ERROR; + else + -- Verify that Tx total nof packets = Rx total nof packets, also when + -- BG experiences siso.xon block level flow control, to stay below + -- 1 Gbps of the 1GbE link rate. + assert tx_total_count_nof_packet_arr(I) = rx_total_count_nof_packet_arr(I) report c_tb_str & + "Wrong Tx-Rx total nof packets count(" & natural'image(I) & + "), Tx count = " & natural'image(tx_total_count_nof_packet_arr(I)) & + " /= " & natural'image(rx_total_count_nof_packet_arr(I)) & + " = Rx count" severity ERROR; + end if; + end loop; + + ------------------------------------------------------------------------- + -- Verification: BSN monitors (yield same values in every sync interval) + ------------------------------------------------------------------------- + for I in g_nof_streams - 1 downto 0 loop + v_offset := I * c_dp_bsn_monitor_v2_reg_adr_span; + -- 3 = nof_sop + -- 4 = nof_valid + -- 6 = latency + -- . Tx + proc_mem_mm_bus_rd(v_offset + 3, mm_clk, reg_bsn_monitor_v2_tx_cipo, reg_bsn_monitor_v2_tx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + tx_mon_nof_sop_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w - 1 downto 0)); + proc_mem_mm_bus_rd(v_offset + 4, mm_clk, reg_bsn_monitor_v2_tx_cipo, reg_bsn_monitor_v2_tx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + tx_mon_nof_valid_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w - 1 downto 0)); + proc_mem_mm_bus_rd(v_offset + 6, mm_clk, reg_bsn_monitor_v2_tx_cipo, reg_bsn_monitor_v2_tx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + tx_mon_latency_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w - 1 downto 0)); + + -- Print logging + print_str(c_tb_str & + "Tx BSN monitor(" & natural'image(I) & ") :" & + " nof_sop = " & natural'image(tx_mon_nof_sop_arr(I)) & + ", nof_valid = " & natural'image(tx_mon_nof_valid_arr(I)) & + ", latency = " & natural'image(tx_mon_latency_arr(I))); + + if c_bg_nof_bps_total < 10.0**9 then + -- Verify BSN monitors only when the BG sync interval is stable, so + -- the ETH data rate < 1 Gbps and no BG block flow control. + -- Verify, only log when wrong + if I = 0 then + assert tx_mon_nof_sop_arr(I) = c_mon_nof_sop_first report + c_tb_str & "Wrong tx nof_sop for stream (" & natural'image(I) & ")" severity ERROR; + assert tx_mon_nof_valid_arr(I) = c_mon_nof_valid_first_tx report + c_tb_str & "Wrong tx nof_valid for stream (" & natural'image(I) & ")" severity ERROR; + else + assert tx_mon_nof_sop_arr(I) = c_mon_nof_sop_others report + c_tb_str & "Wrong tx nof_sop for stream (" & natural'image(I) & ")" severity ERROR; + assert tx_mon_nof_valid_arr(I) = c_mon_nof_valid_others_tx report + c_tb_str & "Wrong tx nof_valid for stream (" & natural'image(I) & ")" severity ERROR; + end if; + assert tx_mon_latency_arr(I) = c_tx_exp_latency report + c_tb_str & "Wrong tx latency for stream (" & natural'image(I) & ")" severity ERROR; + + -- For short block lengths the Rx latency appears to become less, the + -- exact Rx latency is therefore hard to predetermine. The actual + -- latency is not critical, therefore it is sufficient to only very + -- the latency when it is more or less fixed. + if c_rx_exp_latency_en then + assert almost_equal(rx_mon_latency_arr(I), c_rx_exp_latency_st, 10) report + c_tb_str & "Wrong rx latency using st interface (" & natural'image(I) & ")" severity ERROR; + end if; + end if; + end loop; + + ------------------------------------------------------------------------- + -- End of test + ------------------------------------------------------------------------- + proc_common_wait_some_cycles(mm_clk, 100); + i_tb_end <= '1'; + wait; + end process; + + dut : entity work.rdma_generator_roce_tester + port map ( + -- Clocks and reset + mm_rst => mm_rst, + mm_clk => mm_clk, + st_rst => st_rst, + st_clk => st_clk, + st_pps => st_pps, + + -- UDP transmit interface + eth_src_mac => c_gn_eth_src_mac, + ip_src_addr => c_gn_ip_src_addr, + udp_src_port => c_gn_udp_src_port, + tx_fifo_rd_emp_arr => tx_fifo_rd_emp_arr, + + tx_udp_sosi_arr => tx_udp_sosi_arr, + tx_udp_siso_arr => tx_udp_siso_arr, + + -- UDP receive interface + rx_udp_sosi_arr => rx_udp_sosi_arr, + + -- Memory Mapped Slaves (one per stream) + -- . Tx + reg_bg_ctrl_copi => reg_bg_ctrl_copi, + reg_bg_ctrl_cipo => reg_bg_ctrl_cipo, + reg_hdr_dat_copi => reg_hdr_dat_copi, + reg_hdr_dat_cipo => reg_hdr_dat_cipo, + reg_bsn_monitor_v2_tx_copi => reg_bsn_monitor_v2_tx_copi, + reg_bsn_monitor_v2_tx_cipo => reg_bsn_monitor_v2_tx_cipo, + reg_strobe_total_count_tx_copi => reg_strobe_total_count_tx_copi, + reg_strobe_total_count_tx_cipo => reg_strobe_total_count_tx_cipo, + reg_dp_split_copi => reg_dp_split_copi, + reg_dp_split_cipo => reg_dp_split_cipo, + -- . Rx + reg_bsn_monitor_v2_rx_copi => reg_bsn_monitor_v2_rx_copi, + reg_bsn_monitor_v2_rx_cipo => reg_bsn_monitor_v2_rx_cipo, + reg_strobe_total_count_rx_copi => reg_strobe_total_count_rx_copi, + reg_strobe_total_count_rx_cipo => reg_strobe_total_count_rx_cipo + ); + + -- Loop back at streaming sosi level + rx_udp_sosi_arr <= tx_udp_sosi_arr; +end tb; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/hdllib.cfg b/applications/rdma_demo/libraries/rdma_icrc_external/hdllib.cfg new file mode 100644 index 0000000000000000000000000000000000000000..f2290cd44c344b228f40973f61282c4b1a7771bb --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/hdllib.cfg @@ -0,0 +1,47 @@ +hdl_lib_name = rdma_icrc_external +hdl_library_clause_name = rdma_icrc_external_lib +hdl_lib_uses_synth = common dp axi4 +hdl_lib_uses_sim = +hdl_lib_technology = + +# External library for performing RDMA ICRC calculation +# Note That most code is VHDL-2008 +synth_files = + src/vhdl/PCK_CRC32_D8.vhd + src/vhdl/PCK_CRC32_D16.vhd + src/vhdl/PCK_CRC32_D32.vhd + src/vhdl/PCK_CRC32_D64.vhd + src/vhdl/PCK_CRC32_D128.vhd + src/vhdl/PCK_CRC32_D256.vhd + src/vhdl/PCK_CRC32_D512.vhd + src/vhdl/PCK_CRC32_D1024.vhd + src/vhdl/PCK_CRC32_D1_reversed.vhd + src/vhdl/crc_pkg.vhd + src/vhdl/common_types_pkg.vhd + src/vhdl/misc_tools_pkg.vhd + src/vhdl/AXI4_pkg.vhd + src/vhdl/eth_ip_udp_header_prepend_pkg.vhd + src/vhdl/lfsr_pkg.vhd + + # Not external, wrapper around common_ram_r_w used in pipeline_delay_ram.vhd + src/vhdl/sdp_ram.vhd + + src/vhdl/pipeline_delay_ram.vhd + src/vhdl/bit_width_config_pkg.512b.vhd + src/vhdl/rdma_pkg.vhd + src/vhdl/crc_generator.vhd + src/vhdl/append_crc.vhd + src/vhdl/append_crc_wrapper.vhd + + # Not external, wrapper around append_crc.vhd to provide DP interfaces. + src/vhdl/append_crc_dp_wrapper.vhd + +test_bench_files = + +regression_test_vhdl = + + +[modelsim_project_file] + +[quartus_project_file] + diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/AXI4_pkg.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/AXI4_pkg.vhd new file mode 100755 index 0000000000000000000000000000000000000000..4bd37a02b0a96ca4d8c896f9559c695a90ef4ce5 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/AXI4_pkg.vhd @@ -0,0 +1,1193 @@ +------------------------------------------------------------------------------- +-- Title : Advanced eXtinsible Interface Version 4 +-- Project : +------------------------------------------------------------------------------- +-- File : AXI4_pkg.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz> +-- Company : +-- Created : 2015-09-28 +-- Last update: 2018-10-19 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2015 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2015-09-28 1.0 wkamp Created +------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.misc_tools_pkg.all; + +package AXI4_pkg is + + constant c_DATA_WIDTH : natural := 32; + + subtype burst_t is std_logic_vector(1 downto 0); + constant BURST_FIXED : burst_t := "00"; + constant BURST_INCR : burst_t := "01"; + constant BURST_WRAP : burst_t := "10"; + constant BURST_RESVD : burst_t := "11"; + + type AXI4_AW_t is record + id : std_logic_vector(7 downto 0); -- identification tag for the + -- write address group of + -- signals. + addr : std_logic_vector(31 downto 0); -- the address of the first + -- transfer in a write burst + -- transaction. + len : std_logic_vector(7 downto 0); -- the exact number of + -- transfers in a burst. + size : std_logic_vector(2 downto 0); -- the size of each transfer in + -- the burst = 2^size bytes. + burst : burst_t; -- the burst type and the size + -- information. + lock : std_logic; -- '1' = exclusive access. + cache : std_logic_vector(3 downto 0); -- Memory type. This signal + -- indicates how transactions + -- are required to progress + -- through a system. + prot : std_logic_vector(2 downto 0); -- Protection type. This signal + -- indicates the privilege and + -- security level of the transaction, + -- and whether the transaction is a + -- data access or an instruction access. + qos : std_logic_vector(3 downto 0); -- Quality of Service, QoS. The QoS + -- identifier sent for each write + -- transaction. + region : std_logic_vector(3 downto 0); -- Region identifier. Permits a single + -- physical interface on a slave to + -- be used for multiple logical + -- interfaces. + user : std_logic_vector(31 downto 0); -- User signal. Optional User-defined + -- signal in the write address + -- channel. + valid : std_logic; -- Write address valid. This signal indicates + -- that the channel is signaling valid write + -- address and control information. + end record AXI4_AW_t; + + subtype AXI4_AWREADY_t is std_logic; + + type AXI4_W_t is record + id : std_logic_vector(7 downto 0); -- identification tag for the + -- write address group of + -- signals. + data : std_logic_vector(31 downto 0); + strb : std_logic_vector(3 downto 0); -- This signal indicates which byte + -- lanes hold valid data. There is one + -- write strobe bit for each eight bits + -- of the write data bus. + last : std_logic; -- indicates the last transfer in a write burst. + user : std_logic_vector(31 downto 0); -- User signal. Optional User-defined + -- signal in the write address + -- channel. + valid : std_logic; -- indicates that valid write data and strobes + -- are available. + end record AXI4_W_t; + + subtype AXI4_WREADY_t is std_logic; + + constant PROT_PRIVILEGED : std_logic_vector(2 downto 0) := "001"; + constant PROT_NON_SECURE : std_logic_vector(2 downto 0) := "010"; + constant PROT_INSTRUCTION : std_logic_vector(2 downto 0) := "100"; + constant PROT_NO_FLAGS : std_logic_vector(2 downto 0) := "000"; + + type AXI4_B_t is record + id : std_logic_vector(7 downto 0); -- identification tag of the + -- read/write response + resp : std_logic_vector(1 downto 0); -- indicates the status of the + -- read/write transaction. + user : std_logic_vector(31 downto 0); -- optional user-defined signal. + valid : std_logic; -- indicates that the channel is + -- signaling a valid write response. + end record AXI4_B_t; + + subtype AXI4_BREADY_t is std_logic; + + constant RESP_OKAY : std_logic_vector(1 downto 0) := "00"; + constant RESP_EXOKAY : std_logic_vector(1 downto 0) := "01"; + constant RESP_SLVERR : std_logic_vector(1 downto 0) := "10"; + constant RESP_DECERR : std_logic_vector(1 downto 0) := "11"; + + -------------------------------------------------------------------------------------------------------------------- + -- READ CHANNELS + -------------------------------------------------------------------------------------------------------------------- + type AXI4_AR_t is record + id : std_logic_vector(7 downto 0); -- identification tag for the + -- write address group of + -- signals. + addr : std_logic_vector(31 downto 0); -- the address of the first + -- transfer in a write burst + -- transaction. + len : std_logic_vector(7 downto 0); -- the exact number of + -- transfers in a burst. + size : std_logic_vector(2 downto 0); -- the size of each transfer in + -- the burst = 2^size bytes. + burst : burst_t; -- the burst type and the size + -- information. + lock : std_logic; -- '1' = exclusive access. + cache : std_logic_vector(3 downto 0); -- Memory type. This signal + -- indicates how transactions + -- are required to progress + -- through a system. + prot : std_logic_vector(2 downto 0); -- Protection type. This signal + -- indicates the privilege and + -- security level of the transaction, + -- and whether the transaction is a + -- data access or an instruction access. + qos : std_logic_vector(3 downto 0); -- Quality of Service, QoS. The QoS + -- identifier sent for each write + -- transaction. + region : std_logic_vector(3 downto 0); -- Region identifier. Permits a single + -- physical interface on a slave to + -- be used for multiple logical + -- interfaces. + user : std_logic_vector(31 downto 0); -- User signal. Optional User-defined + -- signal in the write address + -- channel. + valid : std_logic; -- Read address valid. This signal indicates + -- that the channel is signalling valid read + -- address and control information. + end record AXI4_AR_t; + + subtype AXI4_ARREADY_t is std_logic; + + type AXI4_R_t is record + id : std_logic_vector(7 downto 0); -- identification tag for the + -- write address group of + -- signals. + data : std_logic_vector(31 downto 0); + resp : std_logic_vector(1 downto 0); -- indicates the status of the + -- read/write transaction. + last : std_logic; -- indicates the last transfer in a write burst. + user : std_logic_vector(31 downto 0); -- User signal. Optional User-defined + -- signal in the write address + -- channel. + valid : std_logic; -- indicates that valid write data and strobes + -- are available. + end record AXI4_R_t; + + subtype AXI4_RREADY_t is std_logic; + + type AXI4_MOSI_t is record + ar : AXI4_AR_t; + aw : AXI4_AW_t; + w : AXI4_W_t; + rready : AXI4_RREADY_t; + bready : AXI4_BREADY_t; + end record AXI4_MOSI_t; + + type AXI4_SOMI_t is record + r : AXI4_R_t; + b : AXI4_B_t; + arready : AXI4_ARREADY_t; + awready : AXI4_AWREADY_t; + wready : AXI4_WREADY_t; + end record AXI4_SOMI_t; + + type AXI4_MOSI_a_t is array (natural range <>) of AXI4_MOSI_t; + type AXI4_SOMI_a_t is array (natural range <>) of AXI4_SOMI_t; + + type AXI4_Streaming_1024_t is record + data : std_logic_vector(1023 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(127 downto 0); + error : std_logic; + end record AXI4_Streaming_1024_t; + + type AXI4_Streaming_512_t is record + data : std_logic_vector(511 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(63 downto 0); + error : std_logic; + end record AXI4_Streaming_512_t; + + type AXI4_Streaming_256_t is record + data : std_logic_vector(255 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(31 downto 0); + error : std_logic; + end record AXI4_Streaming_256_t; + + type AXI4_Streaming_128_t is record + data : std_logic_vector(127 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(15 downto 0); + error : std_logic; + end record AXI4_Streaming_128_t; + + type AXI4_Streaming_64_t is record + data : std_logic_vector(63 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(7 downto 0); + error : std_logic; + end record AXI4_Streaming_64_t; + + type AXI4_Streaming_32_t is record + data : std_logic_vector(31 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(3 downto 0); + error : std_logic; + end record AXI4_Streaming_32_t; + + type AXI4_Streaming_16_t is record + data : std_logic_vector(15 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(1 downto 0); + error : std_logic; + end record AXI4_Streaming_16_t; + + type AXI4_Streaming_8_t is record + data : std_logic_vector(7 downto 0); + valid : std_logic; + last : std_logic; + keep : std_logic_vector(0 downto 0); + error : std_logic; + end record AXI4_Streaming_8_t; + + -- autogen start decl + -------------------------------------------------- + -- Auto-generated code below. You should not edit. + -- Generated Sun Jun 19 16:08:58 2022 + -------------------------------------------------- + + type AXI4_AW_t_a is array(natural range <>) of AXI4_AW_t; + + constant AXI4_AW_T_ZERO : AXI4_AW_t := ( + id => (others => '0'), + addr => (others => '0'), + len => (others => '0'), + size => (others => '0'), + burst => (others => '0'), + lock => '0', + cache => (others => '0'), + prot => (others => '0'), + qos => (others => '0'), + region => (others => '0'), + user => (others => '0'), + valid => '0' + ); + + constant AXI4_AW_T_DONT_CARE : AXI4_AW_t := ( + id => (others => '-'), + addr => (others => '-'), + len => (others => '-'), + size => (others => '-'), + burst => (others => '-'), + lock => '-', + cache => (others => '-'), + prot => (others => '-'), + qos => (others => '-'), + region => (others => '-'), + user => (others => '-'), + valid => '-' + ); + + constant AXI4_AW_T_SLV_WIDTH : natural := 102; + + subtype AXI4_AW_t_slv is std_logic_vector(101 downto 0); + function to_slv (rec : AXI4_AW_t) return AXI4_AW_t_slv; + function from_slv (slv : AXI4_AW_t_slv) return AXI4_AW_t; + + type AXI4_W_t_a is array(natural range <>) of AXI4_W_t; + + constant AXI4_W_T_ZERO : AXI4_W_t := ( + id => (others => '0'), + data => (others => '0'), + strb => (others => '0'), + last => '0', + user => (others => '0'), + valid => '0' + ); + + constant AXI4_W_T_DONT_CARE : AXI4_W_t := ( + id => (others => '-'), + data => (others => '-'), + strb => (others => '-'), + last => '-', + user => (others => '-'), + valid => '-' + ); + + constant AXI4_W_T_SLV_WIDTH : natural := 78; + + subtype AXI4_W_t_slv is std_logic_vector(77 downto 0); + function to_slv (rec : AXI4_W_t) return AXI4_W_t_slv; + function from_slv (slv : AXI4_W_t_slv) return AXI4_W_t; + + type AXI4_B_t_a is array(natural range <>) of AXI4_B_t; + + constant AXI4_B_T_ZERO : AXI4_B_t := ( + id => (others => '0'), + resp => (others => '0'), + user => (others => '0'), + valid => '0' + ); + + constant AXI4_B_T_DONT_CARE : AXI4_B_t := ( + id => (others => '-'), + resp => (others => '-'), + user => (others => '-'), + valid => '-' + ); + + constant AXI4_B_T_SLV_WIDTH : natural := 43; + + subtype AXI4_B_t_slv is std_logic_vector(42 downto 0); + function to_slv (rec : AXI4_B_t) return AXI4_B_t_slv; + function from_slv (slv : AXI4_B_t_slv) return AXI4_B_t; + + type AXI4_AR_t_a is array(natural range <>) of AXI4_AR_t; + + constant AXI4_AR_T_ZERO : AXI4_AR_t := ( + id => (others => '0'), + addr => (others => '0'), + len => (others => '0'), + size => (others => '0'), + burst => (others => '0'), + lock => '0', + cache => (others => '0'), + prot => (others => '0'), + qos => (others => '0'), + region => (others => '0'), + user => (others => '0'), + valid => '0' + ); + + constant AXI4_AR_T_DONT_CARE : AXI4_AR_t := ( + id => (others => '-'), + addr => (others => '-'), + len => (others => '-'), + size => (others => '-'), + burst => (others => '-'), + lock => '-', + cache => (others => '-'), + prot => (others => '-'), + qos => (others => '-'), + region => (others => '-'), + user => (others => '-'), + valid => '-' + ); + + constant AXI4_AR_T_SLV_WIDTH : natural := 102; + + subtype AXI4_AR_t_slv is std_logic_vector(101 downto 0); + function to_slv (rec : AXI4_AR_t) return AXI4_AR_t_slv; + function from_slv (slv : AXI4_AR_t_slv) return AXI4_AR_t; + + type AXI4_R_t_a is array(natural range <>) of AXI4_R_t; + + constant AXI4_R_T_ZERO : AXI4_R_t := ( + id => (others => '0'), + data => (others => '0'), + resp => (others => '0'), + last => '0', + user => (others => '0'), + valid => '0' + ); + + constant AXI4_R_T_DONT_CARE : AXI4_R_t := ( + id => (others => '-'), + data => (others => '-'), + resp => (others => '-'), + last => '-', + user => (others => '-'), + valid => '-' + ); + + constant AXI4_R_T_SLV_WIDTH : natural := 76; + + subtype AXI4_R_t_slv is std_logic_vector(75 downto 0); + function to_slv (rec : AXI4_R_t) return AXI4_R_t_slv; + function from_slv (slv : AXI4_R_t_slv) return AXI4_R_t; + + type AXI4_MOSI_t_a is array(natural range <>) of AXI4_MOSI_t; + + constant AXI4_MOSI_T_ZERO : AXI4_MOSI_t := ( + ar => AXI4_AR_T_ZERO, + aw => AXI4_AW_T_ZERO, + w => AXI4_W_T_ZERO, + rready => '0', + bready => '0' + ); + + constant AXI4_MOSI_T_DONT_CARE : AXI4_MOSI_t := ( + ar => AXI4_AR_T_DONT_CARE, + aw => AXI4_AW_T_DONT_CARE, + w => AXI4_W_T_DONT_CARE, + rready => '-', + bready => '-' + ); + + constant AXI4_MOSI_T_SLV_WIDTH : natural := 284; + + subtype AXI4_MOSI_t_slv is std_logic_vector(283 downto 0); + function to_slv (rec : AXI4_MOSI_t) return AXI4_MOSI_t_slv; + function from_slv (slv : AXI4_MOSI_t_slv) return AXI4_MOSI_t; + + type AXI4_SOMI_t_a is array(natural range <>) of AXI4_SOMI_t; + + constant AXI4_SOMI_T_ZERO : AXI4_SOMI_t := ( + r => AXI4_R_T_ZERO, + b => AXI4_B_T_ZERO, + arready => '0', + awready => '0', + wready => '0' + ); + + constant AXI4_SOMI_T_DONT_CARE : AXI4_SOMI_t := ( + r => AXI4_R_T_DONT_CARE, + b => AXI4_B_T_DONT_CARE, + arready => '-', + awready => '-', + wready => '-' + ); + + constant AXI4_SOMI_T_SLV_WIDTH : natural := 122; + + subtype AXI4_SOMI_t_slv is std_logic_vector(121 downto 0); + function to_slv (rec : AXI4_SOMI_t) return AXI4_SOMI_t_slv; + function from_slv (slv : AXI4_SOMI_t_slv) return AXI4_SOMI_t; + + type AXI4_Streaming_1024_t_a is array(natural range <>) of AXI4_Streaming_1024_t; + + constant AXI4_STREAMING_1024_T_ZERO : AXI4_Streaming_1024_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_1024_T_DONT_CARE : AXI4_Streaming_1024_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_1024_T_SLV_WIDTH : natural := 1155; + + subtype AXI4_Streaming_1024_t_slv is std_logic_vector(1154 downto 0); + function to_slv (rec : AXI4_Streaming_1024_t) return AXI4_Streaming_1024_t_slv; + function from_slv (slv : AXI4_Streaming_1024_t_slv) return AXI4_Streaming_1024_t; + + type AXI4_Streaming_512_t_a is array(natural range <>) of AXI4_Streaming_512_t; + + constant AXI4_STREAMING_512_T_ZERO : AXI4_Streaming_512_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_512_T_DONT_CARE : AXI4_Streaming_512_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_512_T_SLV_WIDTH : natural := 579; + + subtype AXI4_Streaming_512_t_slv is std_logic_vector(578 downto 0); + function to_slv (rec : AXI4_Streaming_512_t) return AXI4_Streaming_512_t_slv; + function from_slv (slv : AXI4_Streaming_512_t_slv) return AXI4_Streaming_512_t; + + type AXI4_Streaming_256_t_a is array(natural range <>) of AXI4_Streaming_256_t; + + constant AXI4_STREAMING_256_T_ZERO : AXI4_Streaming_256_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_256_T_DONT_CARE : AXI4_Streaming_256_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_256_T_SLV_WIDTH : natural := 291; + + subtype AXI4_Streaming_256_t_slv is std_logic_vector(290 downto 0); + function to_slv (rec : AXI4_Streaming_256_t) return AXI4_Streaming_256_t_slv; + function from_slv (slv : AXI4_Streaming_256_t_slv) return AXI4_Streaming_256_t; + + type AXI4_Streaming_128_t_a is array(natural range <>) of AXI4_Streaming_128_t; + + constant AXI4_STREAMING_128_T_ZERO : AXI4_Streaming_128_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_128_T_DONT_CARE : AXI4_Streaming_128_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_128_T_SLV_WIDTH : natural := 147; + + subtype AXI4_Streaming_128_t_slv is std_logic_vector(146 downto 0); + function to_slv (rec : AXI4_Streaming_128_t) return AXI4_Streaming_128_t_slv; + function from_slv (slv : AXI4_Streaming_128_t_slv) return AXI4_Streaming_128_t; + + type AXI4_Streaming_64_t_a is array(natural range <>) of AXI4_Streaming_64_t; + + constant AXI4_STREAMING_64_T_ZERO : AXI4_Streaming_64_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_64_T_DONT_CARE : AXI4_Streaming_64_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_64_T_SLV_WIDTH : natural := 75; + + subtype AXI4_Streaming_64_t_slv is std_logic_vector(74 downto 0); + function to_slv (rec : AXI4_Streaming_64_t) return AXI4_Streaming_64_t_slv; + function from_slv (slv : AXI4_Streaming_64_t_slv) return AXI4_Streaming_64_t; + + type AXI4_Streaming_32_t_a is array(natural range <>) of AXI4_Streaming_32_t; + + constant AXI4_STREAMING_32_T_ZERO : AXI4_Streaming_32_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_32_T_DONT_CARE : AXI4_Streaming_32_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_32_T_SLV_WIDTH : natural := 39; + + subtype AXI4_Streaming_32_t_slv is std_logic_vector(38 downto 0); + function to_slv (rec : AXI4_Streaming_32_t) return AXI4_Streaming_32_t_slv; + function from_slv (slv : AXI4_Streaming_32_t_slv) return AXI4_Streaming_32_t; + + type AXI4_Streaming_16_t_a is array(natural range <>) of AXI4_Streaming_16_t; + + constant AXI4_STREAMING_16_T_ZERO : AXI4_Streaming_16_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_16_T_DONT_CARE : AXI4_Streaming_16_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_16_T_SLV_WIDTH : natural := 21; + + subtype AXI4_Streaming_16_t_slv is std_logic_vector(20 downto 0); + function to_slv (rec : AXI4_Streaming_16_t) return AXI4_Streaming_16_t_slv; + function from_slv (slv : AXI4_Streaming_16_t_slv) return AXI4_Streaming_16_t; + + type AXI4_Streaming_8_t_a is array(natural range <>) of AXI4_Streaming_8_t; + + constant AXI4_STREAMING_8_T_ZERO : AXI4_Streaming_8_t := ( + data => (others => '0'), + valid => '0', + last => '0', + keep => (others => '0'), + error => '0' + ); + + constant AXI4_STREAMING_8_T_DONT_CARE : AXI4_Streaming_8_t := ( + data => (others => '-'), + valid => '-', + last => '-', + keep => (others => '-'), + error => '-' + ); + + constant AXI4_STREAMING_8_T_SLV_WIDTH : natural := 12; + + subtype AXI4_Streaming_8_t_slv is std_logic_vector(11 downto 0); + function to_slv (rec : AXI4_Streaming_8_t) return AXI4_Streaming_8_t_slv; + function from_slv (slv : AXI4_Streaming_8_t_slv) return AXI4_Streaming_8_t; + + ------------------------------------------------------ + -- End of Autogenerated code. You may add yours below. + ------------------------------------------------------ + -- autogen end decl + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_AR_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_R_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_AW_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_W_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_B_t; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_8_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_16_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_32_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_64_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_128_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_256_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_512_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_1024_t; + + function empty_to_keep (empty : std_logic_vector; last : std_logic := '1') return std_logic_vector; + function keep_to_empty ( keep : std_logic_vector; last : std_logic := '1') return std_logic_vector; + +end package AXI4_pkg; + +package body AXI4_pkg is + + -- autogen start body + -------------------------------------------------- + -- Auto-generated code below. You should not edit. + -- Generated Sun Jun 19 16:08:58 2022 + -------------------------------------------------- + + function to_slv (rec : AXI4_AW_t) return AXI4_AW_t_slv is + variable v_slv : std_logic_vector(101 downto 0); + begin + v_slv(0) := rec.valid; + v_slv(32 downto 1) := rec.user; + v_slv(36 downto 33) := rec.region; + v_slv(40 downto 37) := rec.qos; + v_slv(43 downto 41) := rec.prot; + v_slv(47 downto 44) := rec.cache; + v_slv(48) := rec.lock; + v_slv(50 downto 49) := rec.burst; + v_slv(53 downto 51) := rec.size; + v_slv(61 downto 54) := rec.len; + v_slv(93 downto 62) := rec.addr; + v_slv(101 downto 94) := rec.id; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_AW_t_slv) return AXI4_AW_t is + variable v_rec : AXI4_AW_t; + begin + v_rec.valid := slv(0); + v_rec.user := slv(32 downto 1); + v_rec.region := slv(36 downto 33); + v_rec.qos := slv(40 downto 37); + v_rec.prot := slv(43 downto 41); + v_rec.cache := slv(47 downto 44); + v_rec.lock := slv(48); + v_rec.burst := slv(50 downto 49); + v_rec.size := slv(53 downto 51); + v_rec.len := slv(61 downto 54); + v_rec.addr := slv(93 downto 62); + v_rec.id := slv(101 downto 94); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_W_t) return AXI4_W_t_slv is + variable v_slv : std_logic_vector(77 downto 0); + begin + v_slv(0) := rec.valid; + v_slv(32 downto 1) := rec.user; + v_slv(33) := rec.last; + v_slv(37 downto 34) := rec.strb; + v_slv(69 downto 38) := rec.data; + v_slv(77 downto 70) := rec.id; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_W_t_slv) return AXI4_W_t is + variable v_rec : AXI4_W_t; + begin + v_rec.valid := slv(0); + v_rec.user := slv(32 downto 1); + v_rec.last := slv(33); + v_rec.strb := slv(37 downto 34); + v_rec.data := slv(69 downto 38); + v_rec.id := slv(77 downto 70); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_B_t) return AXI4_B_t_slv is + variable v_slv : std_logic_vector(42 downto 0); + begin + v_slv(0) := rec.valid; + v_slv(32 downto 1) := rec.user; + v_slv(34 downto 33) := rec.resp; + v_slv(42 downto 35) := rec.id; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_B_t_slv) return AXI4_B_t is + variable v_rec : AXI4_B_t; + begin + v_rec.valid := slv(0); + v_rec.user := slv(32 downto 1); + v_rec.resp := slv(34 downto 33); + v_rec.id := slv(42 downto 35); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_AR_t) return AXI4_AR_t_slv is + variable v_slv : std_logic_vector(101 downto 0); + begin + v_slv(0) := rec.valid; + v_slv(32 downto 1) := rec.user; + v_slv(36 downto 33) := rec.region; + v_slv(40 downto 37) := rec.qos; + v_slv(43 downto 41) := rec.prot; + v_slv(47 downto 44) := rec.cache; + v_slv(48) := rec.lock; + v_slv(50 downto 49) := rec.burst; + v_slv(53 downto 51) := rec.size; + v_slv(61 downto 54) := rec.len; + v_slv(93 downto 62) := rec.addr; + v_slv(101 downto 94) := rec.id; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_AR_t_slv) return AXI4_AR_t is + variable v_rec : AXI4_AR_t; + begin + v_rec.valid := slv(0); + v_rec.user := slv(32 downto 1); + v_rec.region := slv(36 downto 33); + v_rec.qos := slv(40 downto 37); + v_rec.prot := slv(43 downto 41); + v_rec.cache := slv(47 downto 44); + v_rec.lock := slv(48); + v_rec.burst := slv(50 downto 49); + v_rec.size := slv(53 downto 51); + v_rec.len := slv(61 downto 54); + v_rec.addr := slv(93 downto 62); + v_rec.id := slv(101 downto 94); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_R_t) return AXI4_R_t_slv is + variable v_slv : std_logic_vector(75 downto 0); + begin + v_slv(0) := rec.valid; + v_slv(32 downto 1) := rec.user; + v_slv(33) := rec.last; + v_slv(35 downto 34) := rec.resp; + v_slv(67 downto 36) := rec.data; + v_slv(75 downto 68) := rec.id; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_R_t_slv) return AXI4_R_t is + variable v_rec : AXI4_R_t; + begin + v_rec.valid := slv(0); + v_rec.user := slv(32 downto 1); + v_rec.last := slv(33); + v_rec.resp := slv(35 downto 34); + v_rec.data := slv(67 downto 36); + v_rec.id := slv(75 downto 68); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_MOSI_t) return AXI4_MOSI_t_slv is + variable v_slv : std_logic_vector(283 downto 0); + begin + v_slv(0) := rec.bready; + v_slv(1) := rec.rready; + v_slv(79 downto 2) := to_slv(rec.w); + v_slv(181 downto 80) := to_slv(rec.aw); + v_slv(283 downto 182) := to_slv(rec.ar); + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_MOSI_t_slv) return AXI4_MOSI_t is + variable v_rec : AXI4_MOSI_t; + begin + v_rec.bready := slv(0); + v_rec.rready := slv(1); + v_rec.w := from_slv(slv(79 downto 2)); + v_rec.aw := from_slv(slv(181 downto 80)); + v_rec.ar := from_slv(slv(283 downto 182)); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_SOMI_t) return AXI4_SOMI_t_slv is + variable v_slv : std_logic_vector(121 downto 0); + begin + v_slv(0) := rec.wready; + v_slv(1) := rec.awready; + v_slv(2) := rec.arready; + v_slv(45 downto 3) := to_slv(rec.b); + v_slv(121 downto 46) := to_slv(rec.r); + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_SOMI_t_slv) return AXI4_SOMI_t is + variable v_rec : AXI4_SOMI_t; + begin + v_rec.wready := slv(0); + v_rec.awready := slv(1); + v_rec.arready := slv(2); + v_rec.b := from_slv(slv(45 downto 3)); + v_rec.r := from_slv(slv(121 downto 46)); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_1024_t) return AXI4_Streaming_1024_t_slv is + variable v_slv : std_logic_vector(1154 downto 0); + begin + v_slv(0) := rec.error; + v_slv(128 downto 1) := rec.keep; + v_slv(129) := rec.last; + v_slv(130) := rec.valid; + v_slv(1154 downto 131) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_1024_t_slv) return AXI4_Streaming_1024_t is + variable v_rec : AXI4_Streaming_1024_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(128 downto 1); + v_rec.last := slv(129); + v_rec.valid := slv(130); + v_rec.data := slv(1154 downto 131); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_512_t) return AXI4_Streaming_512_t_slv is + variable v_slv : std_logic_vector(578 downto 0); + begin + v_slv(0) := rec.error; + v_slv(64 downto 1) := rec.keep; + v_slv(65) := rec.last; + v_slv(66) := rec.valid; + v_slv(578 downto 67) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_512_t_slv) return AXI4_Streaming_512_t is + variable v_rec : AXI4_Streaming_512_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(64 downto 1); + v_rec.last := slv(65); + v_rec.valid := slv(66); + v_rec.data := slv(578 downto 67); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_256_t) return AXI4_Streaming_256_t_slv is + variable v_slv : std_logic_vector(290 downto 0); + begin + v_slv(0) := rec.error; + v_slv(32 downto 1) := rec.keep; + v_slv(33) := rec.last; + v_slv(34) := rec.valid; + v_slv(290 downto 35) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_256_t_slv) return AXI4_Streaming_256_t is + variable v_rec : AXI4_Streaming_256_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(32 downto 1); + v_rec.last := slv(33); + v_rec.valid := slv(34); + v_rec.data := slv(290 downto 35); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_128_t) return AXI4_Streaming_128_t_slv is + variable v_slv : std_logic_vector(146 downto 0); + begin + v_slv(0) := rec.error; + v_slv(16 downto 1) := rec.keep; + v_slv(17) := rec.last; + v_slv(18) := rec.valid; + v_slv(146 downto 19) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_128_t_slv) return AXI4_Streaming_128_t is + variable v_rec : AXI4_Streaming_128_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(16 downto 1); + v_rec.last := slv(17); + v_rec.valid := slv(18); + v_rec.data := slv(146 downto 19); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_64_t) return AXI4_Streaming_64_t_slv is + variable v_slv : std_logic_vector(74 downto 0); + begin + v_slv(0) := rec.error; + v_slv(8 downto 1) := rec.keep; + v_slv(9) := rec.last; + v_slv(10) := rec.valid; + v_slv(74 downto 11) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_64_t_slv) return AXI4_Streaming_64_t is + variable v_rec : AXI4_Streaming_64_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(8 downto 1); + v_rec.last := slv(9); + v_rec.valid := slv(10); + v_rec.data := slv(74 downto 11); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_32_t) return AXI4_Streaming_32_t_slv is + variable v_slv : std_logic_vector(38 downto 0); + begin + v_slv(0) := rec.error; + v_slv(4 downto 1) := rec.keep; + v_slv(5) := rec.last; + v_slv(6) := rec.valid; + v_slv(38 downto 7) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_32_t_slv) return AXI4_Streaming_32_t is + variable v_rec : AXI4_Streaming_32_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(4 downto 1); + v_rec.last := slv(5); + v_rec.valid := slv(6); + v_rec.data := slv(38 downto 7); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_16_t) return AXI4_Streaming_16_t_slv is + variable v_slv : std_logic_vector(20 downto 0); + begin + v_slv(0) := rec.error; + v_slv(2 downto 1) := rec.keep; + v_slv(3) := rec.last; + v_slv(4) := rec.valid; + v_slv(20 downto 5) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_16_t_slv) return AXI4_Streaming_16_t is + variable v_rec : AXI4_Streaming_16_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(2 downto 1); + v_rec.last := slv(3); + v_rec.valid := slv(4); + v_rec.data := slv(20 downto 5); + return v_rec; + end function from_slv; + + function to_slv (rec : AXI4_Streaming_8_t) return AXI4_Streaming_8_t_slv is + variable v_slv : std_logic_vector(11 downto 0); + begin + v_slv(0) := rec.error; + v_slv(1 downto 1) := rec.keep; + v_slv(2) := rec.last; + v_slv(3) := rec.valid; + v_slv(11 downto 4) := rec.data; + return v_slv; + end function to_slv; + + function from_slv (slv : AXI4_Streaming_8_t_slv) return AXI4_Streaming_8_t is + variable v_rec : AXI4_Streaming_8_t; + begin + v_rec.error := slv(0); + v_rec.keep := slv(1 downto 1); + v_rec.last := slv(2); + v_rec.valid := slv(3); + v_rec.data := slv(11 downto 4); + return v_rec; + end function from_slv; + + ------------------------------------------------------ + -- End of Autogenerated code. You may add yours below. + ------------------------------------------------------ + -- autogen end body + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_AR_t is + variable rec : AXI4_AR_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_R_t is + variable rec : AXI4_R_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_AW_t is + variable rec : AXI4_AW_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_W_t is + variable rec : AXI4_W_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_B_t is + variable rec : AXI4_B_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_8_t is + variable rec : AXI4_Streaming_8_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_16_t is + variable rec : AXI4_Streaming_16_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_32_t is + variable rec : AXI4_Streaming_32_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_64_t is + variable rec : AXI4_Streaming_64_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_128_t is + variable rec : AXI4_Streaming_128_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_256_t is + variable rec : AXI4_Streaming_256_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_512_t is + variable rec : AXI4_Streaming_512_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_1024_t is + variable rec : AXI4_Streaming_1024_t; + begin + rec := from_slv(slv); + rec.valid := vld; + return rec; + end function from_slv; + + function empty_to_keep ( + empty : std_logic_vector; + last : std_logic := '1' + ) return std_logic_vector is + variable keep : std_logic_vector(2**empty'length-1 downto 0); + begin + if not last then + keep := (others => '1'); + else + for idx in keep'range loop + if idx >= to_01(unsigned(empty)) then + keep(idx) := '1'; + else + keep(idx) := '0'; + end if; + end loop; + end if; + return keep; + end function empty_to_keep; + + function keep_to_empty ( + keep : std_logic_vector; + last : std_logic := '1' + ) return std_logic_vector is + variable empty : unsigned(ceil_log2(keep'length+1)-1 downto 0); + begin + if not last then + empty := (others => '0'); + else + empty := count_ones(not keep); + end if; + return std_logic_vector(resize(empty, ceil_log2(keep'length))); + end function keep_to_empty; + +end package body AXI4_pkg; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D1024.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D1024.vhd new file mode 100755 index 0000000000000000000000000000000000000000..28f7f81a9e1fe0e7ab5bb6cf463c26ef983d2f6d --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D1024.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) +-- * data width: 1024 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D1024 is + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 1024 + -- convention: the first serial bit is D[1023] + function nextCRC32_D1024 + (Data: std_logic_vector(1023 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D1024; + + +package body PCK_CRC32_D1024 is + + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 1024 + -- convention: the first serial bit is D[1023] + function nextCRC32_D1024 + (Data: std_logic_vector(1023 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(1023 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(1021) xor d(1019) xor d(1018) xor d(1016) xor d(1015) xor d(1012) xor d(1011) xor d(1009) xor d(1008) xor d(1006) xor d(1005) xor d(1004) xor d(1000) xor d(999) xor d(998) xor d(996) xor d(994) xor d(992) xor d(990) xor d(985) xor d(984) xor d(983) xor d(982) xor d(981) xor d(980) xor d(979) xor d(978) xor d(977) xor d(975) xor d(974) xor d(971) xor d(967) xor d(960) xor d(959) xor d(958) xor d(955) xor d(954) xor d(953) xor d(950) xor d(948) xor d(944) xor d(941) xor d(939) xor d(938) xor d(935) xor d(934) xor d(933) xor d(931) xor d(920) xor d(918) xor d(917) xor d(915) xor d(910) xor d(907) xor d(906) xor d(904) xor d(903) xor d(902) xor d(901) xor d(900) xor d(899) xor d(898) xor d(897) xor d(896) xor d(893) xor d(891) xor d(890) xor d(889) xor d(887) xor d(886) xor d(883) xor d(881) xor d(879) xor d(878) xor d(877) xor d(876) xor d(875) xor d(874) xor d(873) xor d(871) xor d(869) xor d(868) xor d(867) xor d(863) xor d(861) xor d(860) xor d(859) xor d(857) xor d(854) xor d(853) xor d(851) xor d(850) xor d(849) xor d(848) xor d(846) xor d(842) xor d(840) xor d(839) xor d(837) xor d(835) xor d(834) xor d(832) xor d(827) xor d(825) xor d(824) xor d(819) xor d(818) xor d(816) xor d(815) xor d(814) xor d(813) xor d(812) xor d(811) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(804) xor d(803) xor d(802) xor d(800) xor d(798) xor d(793) xor d(791) xor d(788) xor d(786) xor d(785) xor d(784) xor d(782) xor d(780) xor d(776) xor d(774) xor d(769) xor d(767) xor d(765) xor d(763) xor d(762) xor d(758) xor d(756) xor d(755) xor d(753) xor d(750) xor d(748) xor d(747) xor d(744) xor d(742) xor d(741) xor d(740) xor d(736) xor d(732) xor d(731) xor d(729) xor d(727) xor d(725) xor d(724) xor d(723) xor d(722) xor d(721) xor d(720) xor d(719) xor d(715) xor d(710) xor d(708) xor d(707) xor d(704) xor d(702) xor d(701) xor d(700) xor d(698) xor d(695) xor d(694) xor d(693) xor d(691) xor d(689) xor d(687) xor d(686) xor d(680) xor d(675) xor d(674) xor d(673) xor d(672) xor d(670) xor d(669) xor d(668) xor d(667) xor d(666) xor d(665) xor d(658) xor d(656) xor d(655) xor d(653) xor d(652) xor d(649) xor d(648) xor d(646) xor d(644) xor d(642) xor d(640) xor d(636) xor d(632) xor d(630) xor d(629) xor d(626) xor d(624) xor d(623) xor d(620) xor d(619) xor d(617) xor d(615) xor d(613) xor d(612) xor d(611) xor d(610) xor d(609) xor d(607) xor d(606) xor d(604) xor d(603) xor d(602) xor d(600) xor d(599) xor d(596) xor d(595) xor d(593) xor d(592) xor d(591) xor d(587) xor d(586) xor d(585) xor d(583) xor d(580) xor d(578) xor d(575) xor d(574) xor d(573) xor d(571) xor d(567) xor d(565) xor d(563) xor d(561) xor d(560) xor d(558) xor d(557) xor d(556) xor d(555) xor d(554) xor d(551) xor d(549) xor d(545) xor d(542) xor d(540) xor d(539) xor d(535) xor d(534) xor d(532) xor d(531) xor d(530) xor d(529) xor d(528) xor d(526) xor d(525) xor d(522) xor d(521) xor d(519) xor d(518) xor d(516) xor d(514) xor d(512) xor d(511) xor d(510) xor d(508) xor d(507) xor d(506) xor d(502) xor d(501) xor d(500) xor d(495) xor d(494) xor d(493) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(486) xor d(483) xor d(482) xor d(481) xor d(480) xor d(479) xor d(477) xor d(476) xor d(472) xor d(470) xor d(468) xor d(465) xor d(464) xor d(462) xor d(461) xor d(458) xor d(452) xor d(450) xor d(449) xor d(448) xor d(444) xor d(437) xor d(436) xor d(434) xor d(433) xor d(424) xor d(422) xor d(419) xor d(418) xor d(416) xor d(414) xor d(412) xor d(409) xor d(408) xor d(407) xor d(405) xor d(404) xor d(400) xor d(399) xor d(398) xor d(396) xor d(393) xor d(392) xor d(391) xor d(390) xor d(388) xor d(387) xor d(386) xor d(381) xor d(378) xor d(376) xor d(374) xor d(372) xor d(369) xor d(368) xor d(366) xor d(363) xor d(362) xor d(359) xor d(358) xor d(357) xor d(353) xor d(349) xor d(348) xor d(347) xor d(345) xor d(344) xor d(342) xor d(341) xor d(339) xor d(338) xor d(337) xor d(335) xor d(334) xor d(333) xor d(328) xor d(327) xor d(322) xor d(321) xor d(320) xor d(319) xor d(318) xor d(317) xor d(315) xor d(312) xor d(310) xor d(309) xor d(305) xor d(303) xor d(302) xor d(300) xor d(299) xor d(298) xor d(297) xor d(296) xor d(295) xor d(294) xor d(292) xor d(290) xor d(288) xor d(287) xor d(286) xor d(283) xor d(279) xor d(277) xor d(276) xor d(274) xor d(273) xor d(269) xor d(268) xor d(265) xor d(264) xor d(261) xor d(259) xor d(257) xor d(255) xor d(252) xor d(248) xor d(243) xor d(237) xor d(234) xor d(230) xor d(228) xor d(227) xor d(226) xor d(224) xor d(216) xor d(214) xor d(212) xor d(210) xor d(209) xor d(208) xor d(207) xor d(203) xor d(202) xor d(201) xor d(199) xor d(198) xor d(197) xor d(194) xor d(193) xor d(192) xor d(191) xor d(190) xor d(188) xor d(186) xor d(183) xor d(182) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(166) xor d(162) xor d(161) xor d(158) xor d(156) xor d(155) xor d(151) xor d(149) xor d(144) xor d(143) xor d(137) xor d(136) xor d(135) xor d(134) xor d(132) xor d(128) xor d(127) xor d(126) xor d(125) xor d(123) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(111) xor d(110) xor d(106) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(81) xor d(79) xor d(73) xor d(72) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(61) xor d(60) xor d(58) xor d(55) xor d(54) xor d(53) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(37) xor d(34) xor d(32) xor d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(2) xor c(4) xor c(6) xor c(7) xor c(8) xor c(12) xor c(13) xor c(14) xor c(16) xor c(17) xor c(19) xor c(20) xor c(23) xor c(24) xor c(26) xor c(27) xor c(29); + newcrc(1) := d(1022) xor d(1021) xor d(1020) xor d(1018) xor d(1017) xor d(1015) xor d(1013) xor d(1011) xor d(1010) xor d(1008) xor d(1007) xor d(1004) xor d(1001) xor d(998) xor d(997) xor d(996) xor d(995) xor d(994) xor d(993) xor d(992) xor d(991) xor d(990) xor d(986) xor d(977) xor d(976) xor d(974) xor d(972) xor d(971) xor d(968) xor d(967) xor d(961) xor d(958) xor d(956) xor d(953) xor d(951) xor d(950) xor d(949) xor d(948) xor d(945) xor d(944) xor d(942) xor d(941) xor d(940) xor d(938) xor d(936) xor d(933) xor d(932) xor d(931) xor d(921) xor d(920) xor d(919) xor d(917) xor d(916) xor d(915) xor d(911) xor d(910) xor d(908) xor d(906) xor d(905) xor d(896) xor d(894) xor d(893) xor d(892) xor d(889) xor d(888) xor d(886) xor d(884) xor d(883) xor d(882) xor d(881) xor d(880) xor d(873) xor d(872) xor d(871) xor d(870) xor d(867) xor d(864) xor d(863) xor d(862) xor d(859) xor d(858) xor d(857) xor d(855) xor d(853) xor d(852) xor d(848) xor d(847) xor d(846) xor d(843) xor d(842) xor d(841) xor d(839) xor d(838) xor d(837) xor d(836) xor d(834) xor d(833) xor d(832) xor d(828) xor d(827) xor d(826) xor d(824) xor d(820) xor d(818) xor d(817) xor d(806) xor d(805) xor d(802) xor d(801) xor d(800) xor d(799) xor d(798) xor d(794) xor d(793) xor d(792) xor d(791) xor d(789) xor d(788) xor d(787) xor d(784) xor d(783) xor d(782) xor d(781) xor d(780) xor d(777) xor d(776) xor d(775) xor d(774) xor d(770) xor d(769) xor d(768) xor d(767) xor d(766) xor d(765) xor d(764) xor d(762) xor d(759) xor d(758) xor d(757) xor d(755) xor d(754) xor d(753) xor d(751) xor d(750) xor d(749) xor d(747) xor d(745) xor d(744) xor d(743) xor d(740) xor d(737) xor d(736) xor d(733) xor d(731) xor d(730) xor d(729) xor d(728) xor d(727) xor d(726) xor d(719) xor d(716) xor d(715) xor d(711) xor d(710) xor d(709) xor d(707) xor d(705) xor d(704) xor d(703) xor d(700) xor d(699) xor d(698) xor d(696) xor d(693) xor d(692) xor d(691) xor d(690) xor d(689) xor d(688) xor d(686) xor d(681) xor d(680) xor d(676) xor d(672) xor d(671) xor d(665) xor d(659) xor d(658) xor d(657) xor d(655) xor d(654) xor d(652) xor d(650) xor d(648) xor d(647) xor d(646) xor d(645) xor d(644) xor d(643) xor d(642) xor d(641) xor d(640) xor d(637) xor d(636) xor d(633) xor d(632) xor d(631) xor d(629) xor d(627) xor d(626) xor d(625) xor d(623) xor d(621) xor d(619) xor d(618) xor d(617) xor d(616) xor d(615) xor d(614) xor d(609) xor d(608) xor d(606) xor d(605) xor d(602) xor d(601) xor d(599) xor d(597) xor d(595) xor d(594) xor d(591) xor d(588) xor d(585) xor d(584) xor d(583) xor d(581) xor d(580) xor d(579) xor d(578) xor d(576) xor d(573) xor d(572) xor d(571) xor d(568) xor d(567) xor d(566) xor d(565) xor d(564) xor d(563) xor d(562) xor d(560) xor d(559) xor d(554) xor d(552) xor d(551) xor d(550) xor d(549) xor d(546) xor d(545) xor d(543) xor d(542) xor d(541) xor d(539) xor d(536) xor d(534) xor d(533) xor d(528) xor d(527) xor d(525) xor d(523) xor d(521) xor d(520) xor d(518) xor d(517) xor d(516) xor d(515) xor d(514) xor d(513) xor d(510) xor d(509) xor d(506) xor d(503) xor d(500) xor d(496) xor d(488) xor d(487) xor d(486) xor d(484) xor d(479) xor d(478) xor d(476) xor d(473) xor d(472) xor d(471) xor d(470) xor d(469) xor d(468) xor d(466) xor d(464) xor d(463) xor d(461) xor d(459) xor d(458) xor d(453) xor d(452) xor d(451) xor d(448) xor d(445) xor d(444) xor d(438) xor d(436) xor d(435) xor d(433) xor d(425) xor d(424) xor d(423) xor d(422) xor d(420) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(410) xor d(407) xor d(406) xor d(404) xor d(401) xor d(398) xor d(397) xor d(396) xor d(394) xor d(390) xor d(389) xor d(386) xor d(382) xor d(381) xor d(379) xor d(378) xor d(377) xor d(376) xor d(375) xor d(374) xor d(373) xor d(372) xor d(370) xor d(368) xor d(367) xor d(366) xor d(364) xor d(362) xor d(360) xor d(357) xor d(354) xor d(353) xor d(350) xor d(347) xor d(346) xor d(344) xor d(343) xor d(341) xor d(340) xor d(337) xor d(336) xor d(333) xor d(329) xor d(327) xor d(323) xor d(317) xor d(316) xor d(315) xor d(313) xor d(312) xor d(311) xor d(309) xor d(306) xor d(305) xor d(304) xor d(302) xor d(301) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(289) xor d(286) xor d(284) xor d(283) xor d(280) xor d(279) xor d(278) xor d(276) xor d(275) xor d(273) xor d(270) xor d(268) xor d(266) xor d(264) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(257) xor d(256) xor d(255) xor d(253) xor d(252) xor d(249) xor d(248) xor d(244) xor d(243) xor d(238) xor d(237) xor d(235) xor d(234) xor d(231) xor d(230) xor d(229) xor d(226) xor d(225) xor d(224) xor d(217) xor d(216) xor d(215) xor d(214) xor d(213) xor d(212) xor d(211) xor d(207) xor d(204) xor d(201) xor d(200) xor d(197) xor d(195) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(182) xor d(173) xor d(169) xor d(168) xor d(166) xor d(163) xor d(161) xor d(159) xor d(158) xor d(157) xor d(155) xor d(152) xor d(151) xor d(150) xor d(149) xor d(145) xor d(143) xor d(138) xor d(134) xor d(133) xor d(132) xor d(129) xor d(125) xor d(124) xor d(123) xor d(120) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(101) xor d(100) xor d(94) xor d(88) xor d(87) xor d(86) xor d(81) xor d(80) xor d(79) xor d(74) xor d(72) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(53) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(44) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(9) xor c(12) xor c(15) xor c(16) xor c(18) xor c(19) xor c(21) xor c(23) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30); + newcrc(2) := d(1023) xor d(1022) xor d(1015) xor d(1014) xor d(1006) xor d(1004) xor d(1002) xor d(1000) xor d(997) xor d(995) xor d(993) xor d(991) xor d(990) xor d(987) xor d(985) xor d(984) xor d(983) xor d(982) xor d(981) xor d(980) xor d(979) xor d(974) xor d(973) xor d(972) xor d(971) xor d(969) xor d(968) xor d(967) xor d(962) xor d(960) xor d(958) xor d(957) xor d(955) xor d(953) xor d(952) xor d(951) xor d(949) xor d(948) xor d(946) xor d(945) xor d(944) xor d(943) xor d(942) xor d(938) xor d(937) xor d(935) xor d(932) xor d(931) xor d(922) xor d(921) xor d(916) xor d(915) xor d(912) xor d(911) xor d(910) xor d(909) xor d(904) xor d(903) xor d(902) xor d(901) xor d(900) xor d(899) xor d(898) xor d(896) xor d(895) xor d(894) xor d(891) xor d(886) xor d(885) xor d(884) xor d(882) xor d(879) xor d(878) xor d(877) xor d(876) xor d(875) xor d(872) xor d(869) xor d(867) xor d(865) xor d(864) xor d(861) xor d(858) xor d(857) xor d(856) xor d(851) xor d(850) xor d(847) xor d(846) xor d(844) xor d(843) xor d(838) xor d(833) xor d(832) xor d(829) xor d(828) xor d(824) xor d(821) xor d(816) xor d(815) xor d(814) xor d(813) xor d(812) xor d(811) xor d(810) xor d(809) xor d(808) xor d(804) xor d(801) xor d(799) xor d(798) xor d(795) xor d(794) xor d(792) xor d(791) xor d(790) xor d(789) xor d(786) xor d(783) xor d(781) xor d(780) xor d(778) xor d(777) xor d(775) xor d(774) xor d(771) xor d(770) xor d(768) xor d(766) xor d(762) xor d(760) xor d(759) xor d(754) xor d(753) xor d(752) xor d(751) xor d(747) xor d(746) xor d(745) xor d(742) xor d(740) xor d(738) xor d(737) xor d(736) xor d(734) xor d(730) xor d(728) xor d(725) xor d(724) xor d(723) xor d(722) xor d(721) xor d(719) xor d(717) xor d(716) xor d(715) xor d(712) xor d(711) xor d(707) xor d(706) xor d(705) xor d(702) xor d(699) xor d(698) xor d(697) xor d(695) xor d(692) xor d(690) xor d(686) xor d(682) xor d(681) xor d(680) xor d(677) xor d(675) xor d(674) xor d(670) xor d(669) xor d(668) xor d(667) xor d(665) xor d(660) xor d(659) xor d(652) xor d(651) xor d(647) xor d(645) xor d(643) xor d(641) xor d(640) xor d(638) xor d(637) xor d(636) xor d(634) xor d(633) xor d(629) xor d(628) xor d(627) xor d(623) xor d(622) xor d(618) xor d(616) xor d(613) xor d(612) xor d(611) xor d(604) xor d(599) xor d(598) xor d(593) xor d(591) xor d(589) xor d(587) xor d(584) xor d(583) xor d(582) xor d(581) xor d(579) xor d(578) xor d(577) xor d(575) xor d(572) xor d(571) xor d(569) xor d(568) xor d(566) xor d(564) xor d(558) xor d(557) xor d(556) xor d(554) xor d(553) xor d(552) xor d(550) xor d(549) xor d(547) xor d(546) xor d(545) xor d(544) xor d(543) xor d(539) xor d(537) xor d(532) xor d(531) xor d(530) xor d(525) xor d(524) xor d(517) xor d(515) xor d(512) xor d(508) xor d(506) xor d(504) xor d(502) xor d(500) xor d(497) xor d(495) xor d(494) xor d(493) xor d(492) xor d(491) xor d(490) xor d(487) xor d(486) xor d(485) xor d(483) xor d(482) xor d(481) xor d(476) xor d(474) xor d(473) xor d(471) xor d(469) xor d(468) xor d(467) xor d(461) xor d(460) xor d(459) xor d(458) xor d(454) xor d(453) xor d(450) xor d(448) xor d(446) xor d(445) xor d(444) xor d(439) xor d(433) xor d(426) xor d(425) xor d(423) xor d(422) xor d(421) xor d(417) xor d(415) xor d(413) xor d(412) xor d(411) xor d(409) xor d(404) xor d(402) xor d(400) xor d(397) xor d(396) xor d(395) xor d(393) xor d(392) xor d(388) xor d(386) xor d(383) xor d(382) xor d(381) xor d(380) xor d(379) xor d(377) xor d(375) xor d(373) xor d(372) xor d(371) xor d(367) xor d(366) xor d(365) xor d(362) xor d(361) xor d(359) xor d(357) xor d(355) xor d(354) xor d(353) xor d(351) xor d(349) xor d(339) xor d(335) xor d(333) xor d(330) xor d(327) xor d(324) xor d(322) xor d(321) xor d(320) xor d(319) xor d(316) xor d(315) xor d(314) xor d(313) xor d(309) xor d(307) xor d(306) xor d(300) xor d(299) xor d(298) xor d(297) xor d(296) xor d(293) xor d(291) xor d(288) xor d(286) xor d(285) xor d(284) xor d(283) xor d(281) xor d(280) xor d(273) xor d(271) xor d(268) xor d(267) xor d(264) xor d(263) xor d(262) xor d(260) xor d(258) xor d(256) xor d(255) xor d(254) xor d(253) xor d(252) xor d(250) xor d(249) xor d(248) xor d(245) xor d(244) xor d(243) xor d(239) xor d(238) xor d(237) xor d(236) xor d(235) xor d(234) xor d(232) xor d(231) xor d(228) xor d(225) xor d(224) xor d(218) xor d(217) xor d(215) xor d(213) xor d(210) xor d(209) xor d(207) xor d(205) xor d(203) xor d(199) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(189) xor d(187) xor d(186) xor d(185) xor d(182) xor d(174) xor d(172) xor d(171) xor d(166) xor d(164) xor d(161) xor d(160) xor d(159) xor d(155) xor d(153) xor d(152) xor d(150) xor d(149) xor d(146) xor d(143) xor d(139) xor d(137) xor d(136) xor d(133) xor d(132) xor d(130) xor d(128) xor d(127) xor d(124) xor d(123) xor d(121) xor d(119) xor d(118) xor d(110) xor d(108) xor d(107) xor d(102) xor d(99) xor d(98) xor d(97) xor d(96) xor d(94) xor d(89) xor d(88) xor d(85) xor d(84) xor d(83) xor d(80) xor d(79) xor d(75) xor d(72) xor d(70) xor d(68) xor d(67) xor d(64) xor d(59) xor d(58) xor d(57) xor d(55) xor d(53) xor d(52) xor d(51) xor d(44) xor d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(32) xor d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(1) xor c(3) xor c(5) xor c(8) xor c(10) xor c(12) xor c(14) xor c(22) xor c(23) xor c(30) xor c(31); + newcrc(3) := d(1023) xor d(1016) xor d(1015) xor d(1007) xor d(1005) xor d(1003) xor d(1001) xor d(998) xor d(996) xor d(994) xor d(992) xor d(991) xor d(988) xor d(986) xor d(985) xor d(984) xor d(983) xor d(982) xor d(981) xor d(980) xor d(975) xor d(974) xor d(973) xor d(972) xor d(970) xor d(969) xor d(968) xor d(963) xor d(961) xor d(959) xor d(958) xor d(956) xor d(954) xor d(953) xor d(952) xor d(950) xor d(949) xor d(947) xor d(946) xor d(945) xor d(944) xor d(943) xor d(939) xor d(938) xor d(936) xor d(933) xor d(932) xor d(923) xor d(922) xor d(917) xor d(916) xor d(913) xor d(912) xor d(911) xor d(910) xor d(905) xor d(904) xor d(903) xor d(902) xor d(901) xor d(900) xor d(899) xor d(897) xor d(896) xor d(895) xor d(892) xor d(887) xor d(886) xor d(885) xor d(883) xor d(880) xor d(879) xor d(878) xor d(877) xor d(876) xor d(873) xor d(870) xor d(868) xor d(866) xor d(865) xor d(862) xor d(859) xor d(858) xor d(857) xor d(852) xor d(851) xor d(848) xor d(847) xor d(845) xor d(844) xor d(839) xor d(834) xor d(833) xor d(830) xor d(829) xor d(825) xor d(822) xor d(817) xor d(816) xor d(815) xor d(814) xor d(813) xor d(812) xor d(811) xor d(810) xor d(809) xor d(805) xor d(802) xor d(800) xor d(799) xor d(796) xor d(795) xor d(793) xor d(792) xor d(791) xor d(790) xor d(787) xor d(784) xor d(782) xor d(781) xor d(779) xor d(778) xor d(776) xor d(775) xor d(772) xor d(771) xor d(769) xor d(767) xor d(763) xor d(761) xor d(760) xor d(755) xor d(754) xor d(753) xor d(752) xor d(748) xor d(747) xor d(746) xor d(743) xor d(741) xor d(739) xor d(738) xor d(737) xor d(735) xor d(731) xor d(729) xor d(726) xor d(725) xor d(724) xor d(723) xor d(722) xor d(720) xor d(718) xor d(717) xor d(716) xor d(713) xor d(712) xor d(708) xor d(707) xor d(706) xor d(703) xor d(700) xor d(699) xor d(698) xor d(696) xor d(693) xor d(691) xor d(687) xor d(683) xor d(682) xor d(681) xor d(678) xor d(676) xor d(675) xor d(671) xor d(670) xor d(669) xor d(668) xor d(666) xor d(661) xor d(660) xor d(653) xor d(652) xor d(648) xor d(646) xor d(644) xor d(642) xor d(641) xor d(639) xor d(638) xor d(637) xor d(635) xor d(634) xor d(630) xor d(629) xor d(628) xor d(624) xor d(623) xor d(619) xor d(617) xor d(614) xor d(613) xor d(612) xor d(605) xor d(600) xor d(599) xor d(594) xor d(592) xor d(590) xor d(588) xor d(585) xor d(584) xor d(583) xor d(582) xor d(580) xor d(579) xor d(578) xor d(576) xor d(573) xor d(572) xor d(570) xor d(569) xor d(567) xor d(565) xor d(559) xor d(558) xor d(557) xor d(555) xor d(554) xor d(553) xor d(551) xor d(550) xor d(548) xor d(547) xor d(546) xor d(545) xor d(544) xor d(540) xor d(538) xor d(533) xor d(532) xor d(531) xor d(526) xor d(525) xor d(518) xor d(516) xor d(513) xor d(509) xor d(507) xor d(505) xor d(503) xor d(501) xor d(498) xor d(496) xor d(495) xor d(494) xor d(493) xor d(492) xor d(491) xor d(488) xor d(487) xor d(486) xor d(484) xor d(483) xor d(482) xor d(477) xor d(475) xor d(474) xor d(472) xor d(470) xor d(469) xor d(468) xor d(462) xor d(461) xor d(460) xor d(459) xor d(455) xor d(454) xor d(451) xor d(449) xor d(447) xor d(446) xor d(445) xor d(440) xor d(434) xor d(427) xor d(426) xor d(424) xor d(423) xor d(422) xor d(418) xor d(416) xor d(414) xor d(413) xor d(412) xor d(410) xor d(405) xor d(403) xor d(401) xor d(398) xor d(397) xor d(396) xor d(394) xor d(393) xor d(389) xor d(387) xor d(384) xor d(383) xor d(382) xor d(381) xor d(380) xor d(378) xor d(376) xor d(374) xor d(373) xor d(372) xor d(368) xor d(367) xor d(366) xor d(363) xor d(362) xor d(360) xor d(358) xor d(356) xor d(355) xor d(354) xor d(352) xor d(350) xor d(340) xor d(336) xor d(334) xor d(331) xor d(328) xor d(325) xor d(323) xor d(322) xor d(321) xor d(320) xor d(317) xor d(316) xor d(315) xor d(314) xor d(310) xor d(308) xor d(307) xor d(301) xor d(300) xor d(299) xor d(298) xor d(297) xor d(294) xor d(292) xor d(289) xor d(287) xor d(286) xor d(285) xor d(284) xor d(282) xor d(281) xor d(274) xor d(272) xor d(269) xor d(268) xor d(265) xor d(264) xor d(263) xor d(261) xor d(259) xor d(257) xor d(256) xor d(255) xor d(254) xor d(253) xor d(251) xor d(250) xor d(249) xor d(246) xor d(245) xor d(244) xor d(240) xor d(239) xor d(238) xor d(237) xor d(236) xor d(235) xor d(233) xor d(232) xor d(229) xor d(226) xor d(225) xor d(219) xor d(218) xor d(216) xor d(214) xor d(211) xor d(210) xor d(208) xor d(206) xor d(204) xor d(200) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(190) xor d(188) xor d(187) xor d(186) xor d(183) xor d(175) xor d(173) xor d(172) xor d(167) xor d(165) xor d(162) xor d(161) xor d(160) xor d(156) xor d(154) xor d(153) xor d(151) xor d(150) xor d(147) xor d(144) xor d(140) xor d(138) xor d(137) xor d(134) xor d(133) xor d(131) xor d(129) xor d(128) xor d(125) xor d(124) xor d(122) xor d(120) xor d(119) xor d(111) xor d(109) xor d(108) xor d(103) xor d(100) xor d(99) xor d(98) xor d(97) xor d(95) xor d(90) xor d(89) xor d(86) xor d(85) xor d(84) xor d(81) xor d(80) xor d(76) xor d(73) xor d(71) xor d(69) xor d(68) xor d(65) xor d(60) xor d(59) xor d(58) xor d(56) xor d(54) xor d(53) xor d(52) xor d(45) xor d(40) xor d(39) xor d(38) xor d(37) xor d(36) xor d(33) xor d(32) xor d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(0) xor c(2) xor c(4) xor c(6) xor c(9) xor c(11) xor c(13) xor c(15) xor c(23) xor c(24) xor c(31); + newcrc(4) := d(1021) xor d(1019) xor d(1018) xor d(1017) xor d(1015) xor d(1012) xor d(1011) xor d(1009) xor d(1005) xor d(1002) xor d(1000) xor d(998) xor d(997) xor d(996) xor d(995) xor d(994) xor d(993) xor d(990) xor d(989) xor d(987) xor d(986) xor d(980) xor d(979) xor d(978) xor d(977) xor d(976) xor d(973) xor d(970) xor d(969) xor d(967) xor d(964) xor d(962) xor d(958) xor d(957) xor d(951) xor d(947) xor d(946) xor d(945) xor d(941) xor d(940) xor d(938) xor d(937) xor d(935) xor d(931) xor d(924) xor d(923) xor d(920) xor d(915) xor d(914) xor d(913) xor d(912) xor d(911) xor d(910) xor d(907) xor d(905) xor d(899) xor d(891) xor d(890) xor d(889) xor d(888) xor d(884) xor d(883) xor d(880) xor d(876) xor d(875) xor d(873) xor d(868) xor d(866) xor d(861) xor d(858) xor d(857) xor d(854) xor d(852) xor d(851) xor d(850) xor d(845) xor d(842) xor d(839) xor d(837) xor d(832) xor d(831) xor d(830) xor d(827) xor d(826) xor d(825) xor d(824) xor d(823) xor d(819) xor d(817) xor d(809) xor d(808) xor d(807) xor d(804) xor d(802) xor d(801) xor d(798) xor d(797) xor d(796) xor d(794) xor d(792) xor d(786) xor d(784) xor d(783) xor d(779) xor d(777) xor d(774) xor d(773) xor d(772) xor d(770) xor d(769) xor d(768) xor d(767) xor d(765) xor d(764) xor d(763) xor d(761) xor d(758) xor d(754) xor d(750) xor d(749) xor d(741) xor d(739) xor d(738) xor d(731) xor d(730) xor d(729) xor d(726) xor d(722) xor d(720) xor d(718) xor d(717) xor d(715) xor d(714) xor d(713) xor d(710) xor d(709) xor d(702) xor d(699) xor d(698) xor d(697) xor d(695) xor d(693) xor d(692) xor d(691) xor d(689) xor d(688) xor d(687) xor d(686) xor d(684) xor d(683) xor d(682) xor d(680) xor d(679) xor d(677) xor d(676) xor d(675) xor d(674) xor d(673) xor d(671) xor d(668) xor d(666) xor d(665) xor d(662) xor d(661) xor d(658) xor d(656) xor d(655) xor d(654) xor d(652) xor d(648) xor d(647) xor d(646) xor d(645) xor d(644) xor d(643) xor d(639) xor d(638) xor d(635) xor d(632) xor d(631) xor d(626) xor d(625) xor d(623) xor d(619) xor d(618) xor d(617) xor d(614) xor d(612) xor d(611) xor d(610) xor d(609) xor d(607) xor d(604) xor d(603) xor d(602) xor d(601) xor d(599) xor d(596) xor d(592) xor d(589) xor d(587) xor d(584) xor d(581) xor d(579) xor d(578) xor d(577) xor d(575) xor d(570) xor d(568) xor d(567) xor d(566) xor d(565) xor d(563) xor d(561) xor d(559) xor d(557) xor d(552) xor d(548) xor d(547) xor d(546) xor d(542) xor d(541) xor d(540) xor d(535) xor d(533) xor d(531) xor d(530) xor d(529) xor d(528) xor d(527) xor d(525) xor d(522) xor d(521) xor d(518) xor d(517) xor d(516) xor d(512) xor d(511) xor d(507) xor d(504) xor d(501) xor d(500) xor d(499) xor d(497) xor d(496) xor d(491) xor d(490) xor d(487) xor d(486) xor d(485) xor d(484) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(477) xor d(475) xor d(473) xor d(472) xor d(471) xor d(469) xor d(468) xor d(465) xor d(464) xor d(463) xor d(460) xor d(458) xor d(456) xor d(455) xor d(449) xor d(447) xor d(446) xor d(444) xor d(441) xor d(437) xor d(436) xor d(435) xor d(434) xor d(433) xor d(428) xor d(427) xor d(425) xor d(423) xor d(422) xor d(418) xor d(417) xor d(416) xor d(415) xor d(413) xor d(412) xor d(411) xor d(409) xor d(408) xor d(407) xor d(406) xor d(405) xor d(402) xor d(400) xor d(397) xor d(396) xor d(395) xor d(394) xor d(393) xor d(392) xor d(391) xor d(387) xor d(386) xor d(385) xor d(384) xor d(383) xor d(382) xor d(379) xor d(378) xor d(377) xor d(376) xor d(375) xor d(373) xor d(372) xor d(367) xor d(366) xor d(364) xor d(362) xor d(361) xor d(358) xor d(356) xor d(355) xor d(351) xor d(349) xor d(348) xor d(347) xor d(345) xor d(344) xor d(342) xor d(339) xor d(338) xor d(334) xor d(333) xor d(332) xor d(329) xor d(328) xor d(327) xor d(326) xor d(324) xor d(323) xor d(320) xor d(319) xor d(316) xor d(312) xor d(311) xor d(310) xor d(308) xor d(305) xor d(303) xor d(301) xor d(297) xor d(296) xor d(294) xor d(293) xor d(292) xor d(285) xor d(282) xor d(279) xor d(277) xor d(276) xor d(275) xor d(274) xor d(270) xor d(268) xor d(266) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(256) xor d(254) xor d(251) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(243) xor d(241) xor d(240) xor d(239) xor d(238) xor d(236) xor d(233) xor d(228) xor d(224) xor d(220) xor d(219) xor d(217) xor d(216) xor d(215) xor d(214) xor d(211) xor d(210) xor d(208) xor d(205) xor d(203) xor d(202) xor d(197) xor d(196) xor d(195) xor d(193) xor d(192) xor d(190) xor d(189) xor d(187) xor d(186) xor d(184) xor d(183) xor d(182) xor d(176) xor d(174) xor d(173) xor d(172) xor d(171) xor d(170) xor d(169) xor d(168) xor d(167) xor d(163) xor d(158) xor d(157) xor d(156) xor d(154) xor d(152) xor d(149) xor d(148) xor d(145) xor d(144) xor d(143) xor d(141) xor d(139) xor d(138) xor d(137) xor d(136) xor d(130) xor d(129) xor d(128) xor d(127) xor d(121) xor d(120) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(106) xor d(103) xor d(100) xor d(97) xor d(95) xor d(94) xor d(91) xor d(90) xor d(86) xor d(84) xor d(83) xor d(79) xor d(77) xor d(74) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(65) xor d(63) xor d(59) xor d(58) xor d(57) xor d(50) xor d(48) xor d(47) xor d(46) xor d(45) xor d(44) xor d(41) xor d(40) xor d(39) xor d(38) xor d(33) xor d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(8) xor c(10) xor c(13) xor c(17) xor c(19) xor c(20) xor c(23) xor c(25) xor c(26) xor c(27) xor c(29); + newcrc(5) := d(1022) xor d(1021) xor d(1020) xor d(1015) xor d(1013) xor d(1011) xor d(1010) xor d(1009) xor d(1008) xor d(1005) xor d(1004) xor d(1003) xor d(1001) xor d(1000) xor d(997) xor d(995) xor d(992) xor d(991) xor d(988) xor d(987) xor d(985) xor d(984) xor d(983) xor d(982) xor d(975) xor d(970) xor d(968) xor d(967) xor d(965) xor d(963) xor d(960) xor d(955) xor d(954) xor d(953) xor d(952) xor d(950) xor d(947) xor d(946) xor d(944) xor d(942) xor d(936) xor d(935) xor d(934) xor d(933) xor d(932) xor d(931) xor d(925) xor d(924) xor d(921) xor d(920) xor d(918) xor d(917) xor d(916) xor d(914) xor d(913) xor d(912) xor d(911) xor d(910) xor d(908) xor d(907) xor d(904) xor d(903) xor d(902) xor d(901) xor d(899) xor d(898) xor d(897) xor d(896) xor d(893) xor d(892) xor d(887) xor d(886) xor d(885) xor d(884) xor d(883) xor d(879) xor d(878) xor d(875) xor d(873) xor d(871) xor d(868) xor d(863) xor d(862) xor d(861) xor d(860) xor d(858) xor d(857) xor d(855) xor d(854) xor d(852) xor d(850) xor d(849) xor d(848) xor d(843) xor d(842) xor d(839) xor d(838) xor d(837) xor d(835) xor d(834) xor d(833) xor d(831) xor d(828) xor d(826) xor d(820) xor d(819) xor d(816) xor d(815) xor d(814) xor d(813) xor d(812) xor d(811) xor d(807) xor d(806) xor d(805) xor d(804) xor d(800) xor d(799) xor d(797) xor d(795) xor d(791) xor d(788) xor d(787) xor d(786) xor d(782) xor d(778) xor d(776) xor d(775) xor d(773) xor d(771) xor d(770) xor d(768) xor d(767) xor d(766) xor d(764) xor d(763) xor d(759) xor d(758) xor d(756) xor d(753) xor d(751) xor d(748) xor d(747) xor d(744) xor d(741) xor d(739) xor d(736) xor d(730) xor d(729) xor d(725) xor d(724) xor d(722) xor d(720) xor d(718) xor d(716) xor d(714) xor d(711) xor d(708) xor d(707) xor d(704) xor d(703) xor d(702) xor d(701) xor d(699) xor d(696) xor d(695) xor d(692) xor d(691) xor d(690) xor d(688) xor d(686) xor d(685) xor d(684) xor d(683) xor d(681) xor d(678) xor d(677) xor d(676) xor d(673) xor d(670) xor d(668) xor d(665) xor d(663) xor d(662) xor d(659) xor d(658) xor d(657) xor d(652) xor d(647) xor d(645) xor d(642) xor d(639) xor d(633) xor d(630) xor d(629) xor d(627) xor d(623) xor d(618) xor d(617) xor d(609) xor d(608) xor d(607) xor d(606) xor d(605) xor d(599) xor d(597) xor d(596) xor d(595) xor d(592) xor d(591) xor d(590) xor d(588) xor d(587) xor d(586) xor d(583) xor d(582) xor d(579) xor d(576) xor d(575) xor d(574) xor d(573) xor d(569) xor d(568) xor d(566) xor d(565) xor d(564) xor d(563) xor d(562) xor d(561) xor d(557) xor d(556) xor d(555) xor d(554) xor d(553) xor d(551) xor d(548) xor d(547) xor d(545) xor d(543) xor d(541) xor d(540) xor d(539) xor d(536) xor d(535) xor d(525) xor d(523) xor d(521) xor d(517) xor d(516) xor d(514) xor d(513) xor d(511) xor d(510) xor d(507) xor d(506) xor d(505) xor d(498) xor d(497) xor d(495) xor d(494) xor d(493) xor d(490) xor d(489) xor d(487) xor d(485) xor d(478) xor d(477) xor d(474) xor d(473) xor d(469) xor d(468) xor d(466) xor d(462) xor d(459) xor d(458) xor d(457) xor d(456) xor d(452) xor d(449) xor d(447) xor d(445) xor d(444) xor d(442) xor d(438) xor d(435) xor d(433) xor d(429) xor d(428) xor d(426) xor d(423) xor d(422) xor d(417) xor d(413) xor d(410) xor d(406) xor d(405) xor d(404) xor d(403) xor d(401) xor d(400) xor d(399) xor d(397) xor d(395) xor d(394) xor d(391) xor d(390) xor d(385) xor d(384) xor d(383) xor d(381) xor d(380) xor d(379) xor d(377) xor d(373) xor d(372) xor d(369) xor d(367) xor d(366) xor d(365) xor d(358) xor d(356) xor d(353) xor d(352) xor d(350) xor d(347) xor d(346) xor d(344) xor d(343) xor d(342) xor d(341) xor d(340) xor d(338) xor d(337) xor d(330) xor d(329) xor d(325) xor d(324) xor d(322) xor d(319) xor d(318) xor d(315) xor d(313) xor d(311) xor d(310) xor d(306) xor d(305) xor d(304) xor d(303) xor d(300) xor d(299) xor d(296) xor d(293) xor d(292) xor d(290) xor d(288) xor d(287) xor d(280) xor d(279) xor d(278) xor d(275) xor d(274) xor d(273) xor d(271) xor d(268) xor d(267) xor d(265) xor d(264) xor d(263) xor d(262) xor d(260) xor d(251) xor d(249) xor d(247) xor d(246) xor d(244) xor d(243) xor d(242) xor d(241) xor d(240) xor d(239) xor d(230) xor d(229) xor d(228) xor d(227) xor d(226) xor d(225) xor d(224) xor d(221) xor d(220) xor d(218) xor d(217) xor d(215) xor d(214) xor d(211) xor d(210) xor d(208) xor d(207) xor d(206) xor d(204) xor d(202) xor d(201) xor d(199) xor d(196) xor d(192) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(177) xor d(175) xor d(174) xor d(173) xor d(168) xor d(167) xor d(166) xor d(164) xor d(162) xor d(161) xor d(159) xor d(157) xor d(156) xor d(153) xor d(151) xor d(150) xor d(146) xor d(145) xor d(143) xor d(142) xor d(140) xor d(139) xor d(138) xor d(136) xor d(135) xor d(134) xor d(132) xor d(131) xor d(130) xor d(129) xor d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(116) xor d(115) xor d(112) xor d(111) xor d(107) xor d(106) xor d(103) xor d(99) xor d(97) xor d(94) xor d(92) xor d(91) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(69) xor d(67) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(55) xor d(54) xor d(53) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(42) xor d(41) xor d(40) xor d(39) xor d(37) xor d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(3) xor c(5) xor c(8) xor c(9) xor c(11) xor c(12) xor c(13) xor c(16) xor c(17) xor c(18) xor c(19) xor c(21) xor c(23) xor c(28) xor c(29) xor c(30); + newcrc(6) := d(1023) xor d(1022) xor d(1021) xor d(1016) xor d(1014) xor d(1012) xor d(1011) xor d(1010) xor d(1009) xor d(1006) xor d(1005) xor d(1004) xor d(1002) xor d(1001) xor d(998) xor d(996) xor d(993) xor d(992) xor d(989) xor d(988) xor d(986) xor d(985) xor d(984) xor d(983) xor d(976) xor d(971) xor d(969) xor d(968) xor d(966) xor d(964) xor d(961) xor d(956) xor d(955) xor d(954) xor d(953) xor d(951) xor d(948) xor d(947) xor d(945) xor d(943) xor d(937) xor d(936) xor d(935) xor d(934) xor d(933) xor d(932) xor d(926) xor d(925) xor d(922) xor d(921) xor d(919) xor d(918) xor d(917) xor d(915) xor d(914) xor d(913) xor d(912) xor d(911) xor d(909) xor d(908) xor d(905) xor d(904) xor d(903) xor d(902) xor d(900) xor d(899) xor d(898) xor d(897) xor d(894) xor d(893) xor d(888) xor d(887) xor d(886) xor d(885) xor d(884) xor d(880) xor d(879) xor d(876) xor d(874) xor d(872) xor d(869) xor d(864) xor d(863) xor d(862) xor d(861) xor d(859) xor d(858) xor d(856) xor d(855) xor d(853) xor d(851) xor d(850) xor d(849) xor d(844) xor d(843) xor d(840) xor d(839) xor d(838) xor d(836) xor d(835) xor d(834) xor d(832) xor d(829) xor d(827) xor d(821) xor d(820) xor d(817) xor d(816) xor d(815) xor d(814) xor d(813) xor d(812) xor d(808) xor d(807) xor d(806) xor d(805) xor d(801) xor d(800) xor d(798) xor d(796) xor d(792) xor d(789) xor d(788) xor d(787) xor d(783) xor d(779) xor d(777) xor d(776) xor d(774) xor d(772) xor d(771) xor d(769) xor d(768) xor d(767) xor d(765) xor d(764) xor d(760) xor d(759) xor d(757) xor d(754) xor d(752) xor d(749) xor d(748) xor d(745) xor d(742) xor d(740) xor d(737) xor d(731) xor d(730) xor d(726) xor d(725) xor d(723) xor d(721) xor d(719) xor d(717) xor d(715) xor d(712) xor d(709) xor d(708) xor d(705) xor d(704) xor d(703) xor d(702) xor d(700) xor d(697) xor d(696) xor d(693) xor d(692) xor d(691) xor d(689) xor d(687) xor d(686) xor d(685) xor d(684) xor d(682) xor d(679) xor d(678) xor d(677) xor d(674) xor d(671) xor d(669) xor d(666) xor d(664) xor d(663) xor d(660) xor d(659) xor d(658) xor d(653) xor d(648) xor d(646) xor d(643) xor d(640) xor d(634) xor d(631) xor d(630) xor d(628) xor d(624) xor d(619) xor d(618) xor d(610) xor d(609) xor d(608) xor d(607) xor d(606) xor d(600) xor d(598) xor d(597) xor d(596) xor d(593) xor d(592) xor d(591) xor d(589) xor d(588) xor d(587) xor d(584) xor d(583) xor d(580) xor d(577) xor d(576) xor d(575) xor d(574) xor d(570) xor d(569) xor d(567) xor d(566) xor d(565) xor d(564) xor d(563) xor d(562) xor d(558) xor d(557) xor d(556) xor d(555) xor d(554) xor d(552) xor d(549) xor d(548) xor d(546) xor d(544) xor d(542) xor d(541) xor d(540) xor d(537) xor d(536) xor d(526) xor d(524) xor d(522) xor d(518) xor d(517) xor d(515) xor d(514) xor d(512) xor d(511) xor d(508) xor d(507) xor d(506) xor d(499) xor d(498) xor d(496) xor d(495) xor d(494) xor d(491) xor d(490) xor d(488) xor d(486) xor d(479) xor d(478) xor d(475) xor d(474) xor d(470) xor d(469) xor d(467) xor d(463) xor d(460) xor d(459) xor d(458) xor d(457) xor d(453) xor d(450) xor d(448) xor d(446) xor d(445) xor d(443) xor d(439) xor d(436) xor d(434) xor d(430) xor d(429) xor d(427) xor d(424) xor d(423) xor d(418) xor d(414) xor d(411) xor d(407) xor d(406) xor d(405) xor d(404) xor d(402) xor d(401) xor d(400) xor d(398) xor d(396) xor d(395) xor d(392) xor d(391) xor d(386) xor d(385) xor d(384) xor d(382) xor d(381) xor d(380) xor d(378) xor d(374) xor d(373) xor d(370) xor d(368) xor d(367) xor d(366) xor d(359) xor d(357) xor d(354) xor d(353) xor d(351) xor d(348) xor d(347) xor d(345) xor d(344) xor d(343) xor d(342) xor d(341) xor d(339) xor d(338) xor d(331) xor d(330) xor d(326) xor d(325) xor d(323) xor d(320) xor d(319) xor d(316) xor d(314) xor d(312) xor d(311) xor d(307) xor d(306) xor d(305) xor d(304) xor d(301) xor d(300) xor d(297) xor d(294) xor d(293) xor d(291) xor d(289) xor d(288) xor d(281) xor d(280) xor d(279) xor d(276) xor d(275) xor d(274) xor d(272) xor d(269) xor d(268) xor d(266) xor d(265) xor d(264) xor d(263) xor d(261) xor d(252) xor d(250) xor d(248) xor d(247) xor d(245) xor d(244) xor d(243) xor d(242) xor d(241) xor d(240) xor d(231) xor d(230) xor d(229) xor d(228) xor d(227) xor d(226) xor d(225) xor d(222) xor d(221) xor d(219) xor d(218) xor d(216) xor d(215) xor d(212) xor d(211) xor d(209) xor d(208) xor d(207) xor d(205) xor d(203) xor d(202) xor d(200) xor d(197) xor d(193) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(178) xor d(176) xor d(175) xor d(174) xor d(169) xor d(168) xor d(167) xor d(165) xor d(163) xor d(162) xor d(160) xor d(158) xor d(157) xor d(154) xor d(152) xor d(151) xor d(147) xor d(146) xor d(144) xor d(143) xor d(141) xor d(140) xor d(139) xor d(137) xor d(136) xor d(135) xor d(133) xor d(132) xor d(131) xor d(130) xor d(128) xor d(127) xor d(126) xor d(124) xor d(123) xor d(122) xor d(121) xor d(117) xor d(116) xor d(113) xor d(112) xor d(108) xor d(107) xor d(104) xor d(100) xor d(98) xor d(95) xor d(93) xor d(92) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(76) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(56) xor d(55) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(43) xor d(42) xor d(41) xor d(40) xor d(38) xor d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(0) xor c(1) xor c(4) xor c(6) xor c(9) xor c(10) xor c(12) xor c(13) xor c(14) xor c(17) xor c(18) xor c(19) xor c(20) xor c(22) xor c(24) xor c(29) xor c(30) xor c(31); + newcrc(7) := d(1023) xor d(1022) xor d(1021) xor d(1019) xor d(1018) xor d(1017) xor d(1016) xor d(1013) xor d(1010) xor d(1009) xor d(1008) xor d(1007) xor d(1004) xor d(1003) xor d(1002) xor d(1000) xor d(998) xor d(997) xor d(996) xor d(993) xor d(992) xor d(989) xor d(987) xor d(986) xor d(983) xor d(982) xor d(981) xor d(980) xor d(979) xor d(978) xor d(975) xor d(974) xor d(972) xor d(971) xor d(970) xor d(969) xor d(965) xor d(962) xor d(960) xor d(959) xor d(958) xor d(957) xor d(956) xor d(953) xor d(952) xor d(950) xor d(949) xor d(946) xor d(941) xor d(939) xor d(937) xor d(936) xor d(931) xor d(927) xor d(926) xor d(923) xor d(922) xor d(919) xor d(917) xor d(916) xor d(914) xor d(913) xor d(912) xor d(909) xor d(907) xor d(905) xor d(902) xor d(897) xor d(896) xor d(895) xor d(894) xor d(893) xor d(891) xor d(890) xor d(888) xor d(885) xor d(883) xor d(880) xor d(879) xor d(878) xor d(876) xor d(874) xor d(871) xor d(870) xor d(869) xor d(868) xor d(867) xor d(865) xor d(864) xor d(862) xor d(861) xor d(856) xor d(853) xor d(852) xor d(849) xor d(848) xor d(846) xor d(845) xor d(844) xor d(842) xor d(841) xor d(836) xor d(834) xor d(833) xor d(832) xor d(830) xor d(828) xor d(827) xor d(825) xor d(824) xor d(822) xor d(821) xor d(819) xor d(817) xor d(812) xor d(811) xor d(810) xor d(804) xor d(803) xor d(801) xor d(800) xor d(799) xor d(798) xor d(797) xor d(791) xor d(790) xor d(789) xor d(786) xor d(785) xor d(782) xor d(778) xor d(777) xor d(776) xor d(775) xor d(774) xor d(773) xor d(772) xor d(770) xor d(768) xor d(767) xor d(766) xor d(763) xor d(762) xor d(761) xor d(760) xor d(756) xor d(749) xor d(748) xor d(747) xor d(746) xor d(744) xor d(743) xor d(742) xor d(740) xor d(738) xor d(736) xor d(729) xor d(726) xor d(725) xor d(723) xor d(721) xor d(719) xor d(718) xor d(716) xor d(715) xor d(713) xor d(709) xor d(708) xor d(707) xor d(706) xor d(705) xor d(703) xor d(702) xor d(700) xor d(697) xor d(695) xor d(692) xor d(691) xor d(690) xor d(689) xor d(688) xor d(685) xor d(683) xor d(679) xor d(678) xor d(674) xor d(673) xor d(669) xor d(668) xor d(666) xor d(664) xor d(661) xor d(660) xor d(659) xor d(658) xor d(656) xor d(655) xor d(654) xor d(653) xor d(652) xor d(648) xor d(647) xor d(646) xor d(642) xor d(641) xor d(640) xor d(636) xor d(635) xor d(631) xor d(630) xor d(626) xor d(625) xor d(624) xor d(623) xor d(617) xor d(615) xor d(613) xor d(612) xor d(608) xor d(606) xor d(604) xor d(603) xor d(602) xor d(601) xor d(600) xor d(598) xor d(597) xor d(596) xor d(595) xor d(594) xor d(591) xor d(590) xor d(589) xor d(588) xor d(587) xor d(586) xor d(584) xor d(583) xor d(581) xor d(580) xor d(577) xor d(576) xor d(574) xor d(573) xor d(570) xor d(568) xor d(566) xor d(564) xor d(561) xor d(560) xor d(559) xor d(554) xor d(553) xor d(551) xor d(550) xor d(547) xor d(543) xor d(541) xor d(540) xor d(539) xor d(538) xor d(537) xor d(535) xor d(534) xor d(532) xor d(531) xor d(530) xor d(529) xor d(528) xor d(527) xor d(526) xor d(523) xor d(522) xor d(521) xor d(515) xor d(514) xor d(513) xor d(511) xor d(510) xor d(509) xor d(506) xor d(502) xor d(501) xor d(499) xor d(497) xor d(496) xor d(494) xor d(493) xor d(490) xor d(488) xor d(487) xor d(486) xor d(483) xor d(482) xor d(481) xor d(477) xor d(475) xor d(472) xor d(471) xor d(465) xor d(462) xor d(460) xor d(459) xor d(454) xor d(452) xor d(451) xor d(450) xor d(448) xor d(447) xor d(446) xor d(440) xor d(436) xor d(435) xor d(434) xor d(433) xor d(431) xor d(430) xor d(428) xor d(425) xor d(422) xor d(418) xor d(416) xor d(415) xor d(414) xor d(409) xor d(406) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(398) xor d(397) xor d(391) xor d(390) xor d(388) xor d(385) xor d(383) xor d(382) xor d(379) xor d(378) xor d(376) xor d(375) xor d(372) xor d(371) xor d(367) xor d(366) xor d(363) xor d(362) xor d(360) xor d(359) xor d(357) xor d(355) xor d(354) xor d(353) xor d(352) xor d(347) xor d(346) xor d(343) xor d(341) xor d(340) xor d(338) xor d(337) xor d(335) xor d(334) xor d(333) xor d(332) xor d(331) xor d(328) xor d(326) xor d(324) xor d(322) xor d(319) xor d(318) xor d(313) xor d(310) xor d(309) xor d(308) xor d(307) xor d(306) xor d(303) xor d(301) xor d(300) xor d(299) xor d(297) xor d(296) xor d(289) xor d(288) xor d(287) xor d(286) xor d(283) xor d(282) xor d(281) xor d(280) xor d(279) xor d(275) xor d(274) xor d(270) xor d(268) xor d(267) xor d(266) xor d(262) xor d(261) xor d(259) xor d(257) xor d(255) xor d(253) xor d(252) xor d(251) xor d(249) xor d(246) xor d(245) xor d(244) xor d(242) xor d(241) xor d(237) xor d(234) xor d(232) xor d(231) xor d(229) xor d(224) xor d(223) xor d(222) xor d(220) xor d(219) xor d(217) xor d(214) xor d(213) xor d(207) xor d(206) xor d(204) xor d(202) xor d(199) xor d(197) xor d(193) xor d(192) xor d(191) xor d(190) xor d(189) xor d(187) xor d(184) xor d(183) xor d(182) xor d(179) xor d(177) xor d(176) xor d(175) xor d(172) xor d(171) xor d(168) xor d(167) xor d(164) xor d(163) xor d(162) xor d(159) xor d(156) xor d(153) xor d(152) xor d(151) xor d(149) xor d(148) xor d(147) xor d(145) xor d(143) xor d(142) xor d(141) xor d(140) xor d(138) xor d(135) xor d(133) xor d(131) xor d(129) xor d(126) xor d(124) xor d(122) xor d(119) xor d(116) xor d(111) xor d(110) xor d(109) xor d(108) xor d(106) xor d(105) xor d(104) xor d(103) xor d(98) xor d(97) xor d(95) xor d(93) xor d(87) xor d(80) xor d(79) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(69) xor d(68) xor d(60) xor d(58) xor d(57) xor d(56) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(46) xor d(45) xor d(43) xor d(42) xor d(41) xor d(39) xor d(37) xor d(34) xor d(32) xor d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(1) xor c(4) xor c(5) xor c(6) xor c(8) xor c(10) xor c(11) xor c(12) xor c(15) xor c(16) xor c(17) xor c(18) xor c(21) xor c(24) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(8) := d(1023) xor d(1022) xor d(1021) xor d(1020) xor d(1017) xor d(1016) xor d(1015) xor d(1014) xor d(1012) xor d(1010) xor d(1006) xor d(1003) xor d(1001) xor d(1000) xor d(997) xor d(996) xor d(993) xor d(992) xor d(988) xor d(987) xor d(985) xor d(978) xor d(977) xor d(976) xor d(974) xor d(973) xor d(972) xor d(970) xor d(967) xor d(966) xor d(963) xor d(961) xor d(957) xor d(955) xor d(951) xor d(948) xor d(947) xor d(944) xor d(942) xor d(941) xor d(940) xor d(939) xor d(937) xor d(935) xor d(934) xor d(933) xor d(932) xor d(931) xor d(928) xor d(927) xor d(924) xor d(923) xor d(914) xor d(913) xor d(908) xor d(907) xor d(904) xor d(902) xor d(901) xor d(900) xor d(899) xor d(895) xor d(894) xor d(893) xor d(892) xor d(890) xor d(887) xor d(884) xor d(883) xor d(880) xor d(878) xor d(876) xor d(874) xor d(873) xor d(872) xor d(870) xor d(867) xor d(866) xor d(865) xor d(862) xor d(861) xor d(860) xor d(859) xor d(851) xor d(848) xor d(847) xor d(845) xor d(843) xor d(840) xor d(839) xor d(833) xor d(832) xor d(831) xor d(829) xor d(828) xor d(827) xor d(826) xor d(824) xor d(823) xor d(822) xor d(820) xor d(819) xor d(816) xor d(815) xor d(814) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(805) xor d(803) xor d(801) xor d(799) xor d(793) xor d(792) xor d(790) xor d(788) xor d(787) xor d(785) xor d(784) xor d(783) xor d(782) xor d(780) xor d(779) xor d(778) xor d(777) xor d(775) xor d(773) xor d(771) xor d(768) xor d(765) xor d(764) xor d(761) xor d(758) xor d(757) xor d(756) xor d(755) xor d(753) xor d(749) xor d(745) xor d(743) xor d(742) xor d(740) xor d(739) xor d(737) xor d(736) xor d(732) xor d(731) xor d(730) xor d(729) xor d(726) xor d(725) xor d(723) xor d(721) xor d(717) xor d(716) xor d(715) xor d(714) xor d(709) xor d(706) xor d(703) xor d(702) xor d(700) xor d(696) xor d(695) xor d(694) xor d(692) xor d(690) xor d(687) xor d(684) xor d(679) xor d(673) xor d(672) xor d(668) xor d(666) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(657) xor d(654) xor d(652) xor d(647) xor d(646) xor d(644) xor d(643) xor d(641) xor d(640) xor d(637) xor d(631) xor d(630) xor d(629) xor d(627) xor d(625) xor d(623) xor d(620) xor d(619) xor d(618) xor d(617) xor d(616) xor d(615) xor d(614) xor d(612) xor d(611) xor d(610) xor d(606) xor d(605) xor d(601) xor d(600) xor d(598) xor d(597) xor d(593) xor d(590) xor d(589) xor d(588) xor d(586) xor d(584) xor d(583) xor d(582) xor d(581) xor d(580) xor d(577) xor d(573) xor d(569) xor d(563) xor d(562) xor d(558) xor d(557) xor d(556) xor d(552) xor d(549) xor d(548) xor d(545) xor d(544) xor d(541) xor d(538) xor d(536) xor d(534) xor d(533) xor d(527) xor d(526) xor d(525) xor d(524) xor d(523) xor d(521) xor d(519) xor d(518) xor d(515) xor d(508) xor d(506) xor d(503) xor d(501) xor d(498) xor d(497) xor d(493) xor d(492) xor d(490) xor d(487) xor d(486) xor d(484) xor d(481) xor d(480) xor d(479) xor d(478) xor d(477) xor d(473) xor d(470) xor d(468) xor d(466) xor d(465) xor d(464) xor d(463) xor d(462) xor d(460) xor d(458) xor d(455) xor d(453) xor d(451) xor d(450) xor d(447) xor d(444) xor d(441) xor d(435) xor d(433) xor d(432) xor d(431) xor d(429) xor d(426) xor d(424) xor d(423) xor d(422) xor d(418) xor d(417) xor d(415) xor d(414) xor d(412) xor d(410) xor d(409) xor d(408) xor d(403) xor d(402) xor d(401) xor d(400) xor d(396) xor d(393) xor d(390) xor d(389) xor d(388) xor d(387) xor d(384) xor d(383) xor d(381) xor d(380) xor d(379) xor d(378) xor d(377) xor d(374) xor d(373) xor d(369) xor d(367) xor d(366) xor d(364) xor d(362) xor d(361) xor d(360) xor d(359) xor d(357) xor d(356) xor d(355) xor d(354) xor d(349) xor d(345) xor d(337) xor d(336) xor d(332) xor d(329) xor d(328) xor d(325) xor d(323) xor d(322) xor d(321) xor d(318) xor d(317) xor d(315) xor d(314) xor d(312) xor d(311) xor d(308) xor d(307) xor d(305) xor d(304) xor d(303) xor d(301) xor d(299) xor d(296) xor d(295) xor d(294) xor d(292) xor d(289) xor d(286) xor d(284) xor d(282) xor d(281) xor d(280) xor d(279) xor d(277) xor d(275) xor d(274) xor d(273) xor d(271) xor d(267) xor d(265) xor d(264) xor d(263) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(257) xor d(256) xor d(255) xor d(254) xor d(253) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(242) xor d(238) xor d(237) xor d(235) xor d(234) xor d(233) xor d(232) xor d(228) xor d(227) xor d(226) xor d(225) xor d(223) xor d(221) xor d(220) xor d(218) xor d(216) xor d(215) xor d(212) xor d(210) xor d(209) xor d(205) xor d(202) xor d(201) xor d(200) xor d(199) xor d(197) xor d(186) xor d(185) xor d(184) xor d(182) xor d(180) xor d(178) xor d(177) xor d(176) xor d(173) xor d(171) xor d(170) xor d(168) xor d(167) xor d(166) xor d(165) xor d(164) xor d(163) xor d(162) xor d(161) xor d(160) xor d(158) xor d(157) xor d(156) xor d(155) xor d(154) xor d(153) xor d(152) xor d(151) xor d(150) xor d(148) xor d(146) xor d(142) xor d(141) xor d(139) xor d(137) xor d(135) xor d(130) xor d(128) xor d(126) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(113) xor d(112) xor d(109) xor d(107) xor d(105) xor d(103) xor d(101) xor d(97) xor d(95) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(60) xor d(59) xor d(57) xor d(54) xor d(52) xor d(51) xor d(50) xor d(46) xor d(45) xor d(43) xor d(42) xor d(40) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(32) xor d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(4) xor c(5) xor c(8) xor c(9) xor c(11) xor c(14) xor c(18) xor c(20) xor c(22) xor c(23) xor c(24) xor c(25) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(9) := d(1023) xor d(1022) xor d(1021) xor d(1018) xor d(1017) xor d(1016) xor d(1015) xor d(1013) xor d(1011) xor d(1007) xor d(1004) xor d(1002) xor d(1001) xor d(998) xor d(997) xor d(994) xor d(993) xor d(989) xor d(988) xor d(986) xor d(979) xor d(978) xor d(977) xor d(975) xor d(974) xor d(973) xor d(971) xor d(968) xor d(967) xor d(964) xor d(962) xor d(958) xor d(956) xor d(952) xor d(949) xor d(948) xor d(945) xor d(943) xor d(942) xor d(941) xor d(940) xor d(938) xor d(936) xor d(935) xor d(934) xor d(933) xor d(932) xor d(929) xor d(928) xor d(925) xor d(924) xor d(915) xor d(914) xor d(909) xor d(908) xor d(905) xor d(903) xor d(902) xor d(901) xor d(900) xor d(896) xor d(895) xor d(894) xor d(893) xor d(891) xor d(888) xor d(885) xor d(884) xor d(881) xor d(879) xor d(877) xor d(875) xor d(874) xor d(873) xor d(871) xor d(868) xor d(867) xor d(866) xor d(863) xor d(862) xor d(861) xor d(860) xor d(852) xor d(849) xor d(848) xor d(846) xor d(844) xor d(841) xor d(840) xor d(834) xor d(833) xor d(832) xor d(830) xor d(829) xor d(828) xor d(827) xor d(825) xor d(824) xor d(823) xor d(821) xor d(820) xor d(817) xor d(816) xor d(815) xor d(811) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(804) xor d(802) xor d(800) xor d(794) xor d(793) xor d(791) xor d(789) xor d(788) xor d(786) xor d(785) xor d(784) xor d(783) xor d(781) xor d(780) xor d(779) xor d(778) xor d(776) xor d(774) xor d(772) xor d(769) xor d(766) xor d(765) xor d(762) xor d(759) xor d(758) xor d(757) xor d(756) xor d(754) xor d(750) xor d(746) xor d(744) xor d(743) xor d(741) xor d(740) xor d(738) xor d(737) xor d(733) xor d(732) xor d(731) xor d(730) xor d(727) xor d(726) xor d(724) xor d(722) xor d(718) xor d(717) xor d(716) xor d(715) xor d(710) xor d(707) xor d(704) xor d(703) xor d(701) xor d(697) xor d(696) xor d(695) xor d(693) xor d(691) xor d(688) xor d(685) xor d(680) xor d(674) xor d(673) xor d(669) xor d(667) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(655) xor d(653) xor d(648) xor d(647) xor d(645) xor d(644) xor d(642) xor d(641) xor d(638) xor d(632) xor d(631) xor d(630) xor d(628) xor d(626) xor d(624) xor d(621) xor d(620) xor d(619) xor d(618) xor d(617) xor d(616) xor d(615) xor d(613) xor d(612) xor d(611) xor d(607) xor d(606) xor d(602) xor d(601) xor d(599) xor d(598) xor d(594) xor d(591) xor d(590) xor d(589) xor d(587) xor d(585) xor d(584) xor d(583) xor d(582) xor d(581) xor d(578) xor d(574) xor d(570) xor d(564) xor d(563) xor d(559) xor d(558) xor d(557) xor d(553) xor d(550) xor d(549) xor d(546) xor d(545) xor d(542) xor d(539) xor d(537) xor d(535) xor d(534) xor d(528) xor d(527) xor d(526) xor d(525) xor d(524) xor d(522) xor d(520) xor d(519) xor d(516) xor d(509) xor d(507) xor d(504) xor d(502) xor d(499) xor d(498) xor d(494) xor d(493) xor d(491) xor d(488) xor d(487) xor d(485) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(474) xor d(471) xor d(469) xor d(467) xor d(466) xor d(465) xor d(464) xor d(463) xor d(461) xor d(459) xor d(456) xor d(454) xor d(452) xor d(451) xor d(448) xor d(445) xor d(442) xor d(436) xor d(434) xor d(433) xor d(432) xor d(430) xor d(427) xor d(425) xor d(424) xor d(423) xor d(419) xor d(418) xor d(416) xor d(415) xor d(413) xor d(411) xor d(410) xor d(409) xor d(404) xor d(403) xor d(402) xor d(401) xor d(397) xor d(394) xor d(391) xor d(390) xor d(389) xor d(388) xor d(385) xor d(384) xor d(382) xor d(381) xor d(380) xor d(379) xor d(378) xor d(375) xor d(374) xor d(370) xor d(368) xor d(367) xor d(365) xor d(363) xor d(362) xor d(361) xor d(360) xor d(358) xor d(357) xor d(356) xor d(355) xor d(350) xor d(346) xor d(338) xor d(337) xor d(333) xor d(330) xor d(329) xor d(326) xor d(324) xor d(323) xor d(322) xor d(319) xor d(318) xor d(316) xor d(315) xor d(313) xor d(312) xor d(309) xor d(308) xor d(306) xor d(305) xor d(304) xor d(302) xor d(300) xor d(297) xor d(296) xor d(295) xor d(293) xor d(290) xor d(287) xor d(285) xor d(283) xor d(282) xor d(281) xor d(280) xor d(278) xor d(276) xor d(275) xor d(274) xor d(272) xor d(268) xor d(266) xor d(265) xor d(264) xor d(263) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(257) xor d(256) xor d(255) xor d(254) xor d(251) xor d(249) xor d(248) xor d(247) xor d(246) xor d(243) xor d(239) xor d(238) xor d(236) xor d(235) xor d(234) xor d(233) xor d(229) xor d(228) xor d(227) xor d(226) xor d(224) xor d(222) xor d(221) xor d(219) xor d(217) xor d(216) xor d(213) xor d(211) xor d(210) xor d(206) xor d(203) xor d(202) xor d(201) xor d(200) xor d(198) xor d(187) xor d(186) xor d(185) xor d(183) xor d(181) xor d(179) xor d(178) xor d(177) xor d(174) xor d(172) xor d(171) xor d(169) xor d(168) xor d(167) xor d(166) xor d(165) xor d(164) xor d(163) xor d(162) xor d(161) xor d(159) xor d(158) xor d(157) xor d(156) xor d(155) xor d(154) xor d(153) xor d(152) xor d(151) xor d(149) xor d(147) xor d(143) xor d(142) xor d(140) xor d(138) xor d(136) xor d(131) xor d(129) xor d(127) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(114) xor d(113) xor d(110) xor d(108) xor d(106) xor d(104) xor d(102) xor d(98) xor d(96) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(71) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(64) xor d(61) xor d(60) xor d(58) xor d(55) xor d(53) xor d(52) xor d(51) xor d(47) xor d(46) xor d(44) xor d(43) xor d(41) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(33) xor d(32) xor d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(2) xor c(5) xor c(6) xor c(9) xor c(10) xor c(12) xor c(15) xor c(19) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(29) xor c(30) xor c(31); + newcrc(10) := d(1023) xor d(1022) xor d(1021) xor d(1017) xor d(1015) xor d(1014) xor d(1011) xor d(1009) xor d(1006) xor d(1004) xor d(1003) xor d(1002) xor d(1000) xor d(996) xor d(995) xor d(992) xor d(989) xor d(987) xor d(985) xor d(984) xor d(983) xor d(982) xor d(981) xor d(977) xor d(976) xor d(972) xor d(971) xor d(969) xor d(968) xor d(967) xor d(965) xor d(963) xor d(960) xor d(958) xor d(957) xor d(955) xor d(954) xor d(949) xor d(948) xor d(946) xor d(943) xor d(942) xor d(938) xor d(937) xor d(936) xor d(931) xor d(930) xor d(929) xor d(926) xor d(925) xor d(920) xor d(918) xor d(917) xor d(916) xor d(909) xor d(907) xor d(900) xor d(899) xor d(898) xor d(895) xor d(894) xor d(893) xor d(892) xor d(891) xor d(890) xor d(887) xor d(885) xor d(883) xor d(882) xor d(881) xor d(880) xor d(879) xor d(877) xor d(873) xor d(872) xor d(871) xor d(864) xor d(862) xor d(860) xor d(859) xor d(857) xor d(854) xor d(851) xor d(848) xor d(847) xor d(846) xor d(845) xor d(841) xor d(840) xor d(839) xor d(837) xor d(833) xor d(832) xor d(831) xor d(830) xor d(829) xor d(828) xor d(827) xor d(826) xor d(822) xor d(821) xor d(819) xor d(817) xor d(815) xor d(814) xor d(813) xor d(806) xor d(805) xor d(804) xor d(802) xor d(801) xor d(800) xor d(798) xor d(795) xor d(794) xor d(793) xor d(792) xor d(791) xor d(790) xor d(789) xor d(788) xor d(787) xor d(781) xor d(779) xor d(777) xor d(776) xor d(775) xor d(774) xor d(773) xor d(770) xor d(769) xor d(766) xor d(765) xor d(762) xor d(760) xor d(759) xor d(757) xor d(756) xor d(753) xor d(751) xor d(750) xor d(748) xor d(745) xor d(740) xor d(739) xor d(738) xor d(736) xor d(734) xor d(733) xor d(729) xor d(728) xor d(724) xor d(722) xor d(721) xor d(720) xor d(718) xor d(717) xor d(716) xor d(715) xor d(711) xor d(710) xor d(707) xor d(705) xor d(701) xor d(700) xor d(697) xor d(696) xor d(695) xor d(693) xor d(692) xor d(691) xor d(687) xor d(681) xor d(680) xor d(673) xor d(672) xor d(669) xor d(667) xor d(666) xor d(665) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(655) xor d(654) xor d(653) xor d(652) xor d(645) xor d(644) xor d(643) xor d(640) xor d(639) xor d(636) xor d(633) xor d(631) xor d(630) xor d(627) xor d(626) xor d(625) xor d(624) xor d(623) xor d(622) xor d(621) xor d(618) xor d(616) xor d(615) xor d(614) xor d(611) xor d(610) xor d(609) xor d(608) xor d(606) xor d(604) xor d(596) xor d(593) xor d(590) xor d(588) xor d(587) xor d(584) xor d(582) xor d(580) xor d(579) xor d(578) xor d(574) xor d(573) xor d(567) xor d(564) xor d(563) xor d(561) xor d(559) xor d(557) xor d(556) xor d(555) xor d(550) xor d(549) xor d(547) xor d(546) xor d(545) xor d(543) xor d(542) xor d(539) xor d(538) xor d(536) xor d(534) xor d(532) xor d(531) xor d(530) xor d(527) xor d(523) xor d(522) xor d(520) xor d(519) xor d(518) xor d(517) xor d(516) xor d(514) xor d(512) xor d(511) xor d(507) xor d(506) xor d(505) xor d(503) xor d(502) xor d(501) xor d(499) xor d(493) xor d(491) xor d(490) xor d(477) xor d(476) xor d(475) xor d(467) xor d(466) xor d(461) xor d(460) xor d(458) xor d(457) xor d(455) xor d(453) xor d(450) xor d(448) xor d(446) xor d(444) xor d(443) xor d(436) xor d(435) xor d(431) xor d(428) xor d(426) xor d(425) xor d(422) xor d(420) xor d(418) xor d(417) xor d(411) xor d(410) xor d(409) xor d(408) xor d(407) xor d(403) xor d(402) xor d(400) xor d(399) xor d(396) xor d(395) xor d(393) xor d(389) xor d(388) xor d(387) xor d(385) xor d(383) xor d(382) xor d(380) xor d(379) xor d(378) xor d(375) xor d(374) xor d(372) xor d(371) xor d(364) xor d(361) xor d(356) xor d(353) xor d(351) xor d(349) xor d(348) xor d(345) xor d(344) xor d(342) xor d(341) xor d(337) xor d(335) xor d(333) xor d(331) xor d(330) xor d(328) xor d(325) xor d(324) xor d(323) xor d(322) xor d(321) xor d(318) xor d(316) xor d(315) xor d(314) xor d(313) xor d(312) xor d(307) xor d(306) xor d(302) xor d(301) xor d(300) xor d(299) xor d(295) xor d(292) xor d(291) xor d(290) xor d(287) xor d(284) xor d(282) xor d(281) xor d(275) xor d(274) xor d(268) xor d(267) xor d(266) xor d(263) xor d(262) xor d(260) xor d(258) xor d(256) xor d(250) xor d(249) xor d(247) xor d(244) xor d(243) xor d(240) xor d(239) xor d(236) xor d(235) xor d(229) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(220) xor d(218) xor d(217) xor d(216) xor d(211) xor d(210) xor d(209) xor d(208) xor d(204) xor d(198) xor d(197) xor d(194) xor d(193) xor d(192) xor d(191) xor d(190) xor d(187) xor d(184) xor d(183) xor d(180) xor d(179) xor d(178) xor d(175) xor d(173) xor d(171) xor d(168) xor d(165) xor d(164) xor d(163) xor d(161) xor d(160) xor d(159) xor d(157) xor d(154) xor d(153) xor d(152) xor d(151) xor d(150) xor d(149) xor d(148) xor d(141) xor d(139) xor d(136) xor d(135) xor d(134) xor d(130) xor d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(110) xor d(109) xor d(107) xor d(106) xor d(105) xor d(104) xor d(101) xor d(98) xor d(96) xor d(95) xor d(94) xor d(90) xor d(89) xor d(86) xor d(83) xor d(80) xor d(78) xor d(77) xor d(75) xor d(73) xor d(71) xor d(70) xor d(69) xor d(66) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(55) xor d(52) xor d(50) xor d(42) xor d(40) xor d(39) xor d(36) xor d(35) xor d(33) xor d(32) xor d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(3) xor c(4) xor c(8) xor c(10) xor c(11) xor c(12) xor c(14) xor c(17) xor c(19) xor c(22) xor c(23) xor c(25) xor c(29) xor c(30) xor c(31); + newcrc(11) := d(1023) xor d(1022) xor d(1021) xor d(1019) xor d(1011) xor d(1010) xor d(1009) xor d(1008) xor d(1007) xor d(1006) xor d(1003) xor d(1001) xor d(1000) xor d(999) xor d(998) xor d(997) xor d(994) xor d(993) xor d(992) xor d(988) xor d(986) xor d(981) xor d(980) xor d(979) xor d(975) xor d(974) xor d(973) xor d(972) xor d(971) xor d(970) xor d(969) xor d(968) xor d(967) xor d(966) xor d(964) xor d(961) xor d(960) xor d(956) xor d(954) xor d(953) xor d(949) xor d(948) xor d(947) xor d(943) xor d(941) xor d(937) xor d(935) xor d(934) xor d(933) xor d(932) xor d(930) xor d(927) xor d(926) xor d(921) xor d(920) xor d(919) xor d(915) xor d(908) xor d(907) xor d(906) xor d(904) xor d(903) xor d(902) xor d(898) xor d(897) xor d(895) xor d(894) xor d(892) xor d(890) xor d(889) xor d(888) xor d(887) xor d(884) xor d(882) xor d(880) xor d(879) xor d(877) xor d(876) xor d(875) xor d(872) xor d(871) xor d(869) xor d(868) xor d(867) xor d(865) xor d(859) xor d(858) xor d(857) xor d(855) xor d(854) xor d(853) xor d(852) xor d(851) xor d(850) xor d(847) xor d(841) xor d(839) xor d(838) xor d(837) xor d(835) xor d(833) xor d(831) xor d(830) xor d(829) xor d(828) xor d(825) xor d(824) xor d(823) xor d(822) xor d(820) xor d(819) xor d(813) xor d(812) xor d(811) xor d(810) xor d(809) xor d(808) xor d(805) xor d(804) xor d(801) xor d(800) xor d(799) xor d(798) xor d(796) xor d(795) xor d(794) xor d(792) xor d(790) xor d(789) xor d(786) xor d(785) xor d(784) xor d(778) xor d(777) xor d(775) xor d(771) xor d(770) xor d(769) xor d(766) xor d(765) xor d(762) xor d(761) xor d(760) xor d(757) xor d(756) xor d(755) xor d(754) xor d(753) xor d(752) xor d(751) xor d(750) xor d(749) xor d(748) xor d(747) xor d(746) xor d(744) xor d(742) xor d(739) xor d(737) xor d(736) xor d(735) xor d(734) xor d(732) xor d(731) xor d(730) xor d(727) xor d(724) xor d(720) xor d(718) xor d(717) xor d(716) xor d(715) xor d(712) xor d(711) xor d(710) xor d(707) xor d(706) xor d(704) xor d(700) xor d(697) xor d(696) xor d(695) xor d(692) xor d(691) xor d(689) xor d(688) xor d(687) xor d(686) xor d(682) xor d(681) xor d(680) xor d(675) xor d(672) xor d(669) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(654) xor d(652) xor d(649) xor d(648) xor d(645) xor d(642) xor d(641) xor d(637) xor d(636) xor d(634) xor d(631) xor d(630) xor d(629) xor d(628) xor d(627) xor d(625) xor d(622) xor d(620) xor d(616) xor d(613) xor d(606) xor d(605) xor d(604) xor d(603) xor d(602) xor d(600) xor d(599) xor d(597) xor d(596) xor d(595) xor d(594) xor d(593) xor d(592) xor d(589) xor d(588) xor d(587) xor d(586) xor d(581) xor d(579) xor d(578) xor d(573) xor d(571) xor d(568) xor d(567) xor d(564) xor d(563) xor d(562) xor d(561) xor d(555) xor d(554) xor d(550) xor d(549) xor d(548) xor d(547) xor d(546) xor d(545) xor d(544) xor d(543) xor d(542) xor d(537) xor d(534) xor d(533) xor d(530) xor d(529) xor d(526) xor d(525) xor d(524) xor d(523) xor d(522) xor d(520) xor d(517) xor d(516) xor d(515) xor d(514) xor d(513) xor d(511) xor d(510) xor d(504) xor d(503) xor d(501) xor d(495) xor d(493) xor d(490) xor d(489) xor d(488) xor d(486) xor d(483) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(472) xor d(470) xor d(467) xor d(465) xor d(464) xor d(459) xor d(456) xor d(454) xor d(452) xor d(451) xor d(450) xor d(448) xor d(447) xor d(445) xor d(434) xor d(433) xor d(432) xor d(429) xor d(427) xor d(426) xor d(424) xor d(423) xor d(422) xor d(421) xor d(416) xor d(414) xor d(411) xor d(410) xor d(407) xor d(405) xor d(403) xor d(401) xor d(399) xor d(398) xor d(397) xor d(394) xor d(393) xor d(392) xor d(391) xor d(389) xor d(387) xor d(384) xor d(383) xor d(380) xor d(379) xor d(378) xor d(375) xor d(374) xor d(373) xor d(369) xor d(368) xor d(366) xor d(365) xor d(363) xor d(359) xor d(358) xor d(354) xor d(353) xor d(352) xor d(350) xor d(348) xor d(347) xor d(346) xor d(344) xor d(343) xor d(341) xor d(339) xor d(337) xor d(336) xor d(335) xor d(333) xor d(332) xor d(331) xor d(329) xor d(328) xor d(327) xor d(326) xor d(325) xor d(324) xor d(323) xor d(321) xor d(320) xor d(318) xor d(316) xor d(314) xor d(313) xor d(312) xor d(310) xor d(309) xor d(308) xor d(307) xor d(305) xor d(301) xor d(299) xor d(298) xor d(297) xor d(295) xor d(294) xor d(293) xor d(291) xor d(290) xor d(287) xor d(286) xor d(285) xor d(282) xor d(279) xor d(277) xor d(275) xor d(274) xor d(273) xor d(267) xor d(265) xor d(263) xor d(255) xor d(252) xor d(251) xor d(250) xor d(245) xor d(244) xor d(243) xor d(241) xor d(240) xor d(236) xor d(234) xor d(228) xor d(225) xor d(223) xor d(221) xor d(219) xor d(218) xor d(217) xor d(216) xor d(214) xor d(211) xor d(208) xor d(207) xor d(205) xor d(203) xor d(202) xor d(201) xor d(197) xor d(195) xor d(190) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(181) xor d(180) xor d(179) xor d(176) xor d(174) xor d(171) xor d(170) xor d(167) xor d(165) xor d(164) xor d(160) xor d(156) xor d(154) xor d(153) xor d(152) xor d(150) xor d(144) xor d(143) xor d(142) xor d(140) xor d(134) xor d(132) xor d(131) xor d(125) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(108) xor d(107) xor d(105) xor d(104) xor d(103) xor d(102) xor d(101) xor d(98) xor d(94) xor d(91) xor d(90) xor d(85) xor d(83) xor d(82) xor d(78) xor d(76) xor d(74) xor d(73) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(59) xor d(58) xor d(57) xor d(56) xor d(55) xor d(54) xor d(51) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(40) xor d(36) xor d(33) xor d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(11) xor c(14) xor c(15) xor c(16) xor c(17) xor c(18) xor c(19) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(12) := d(1023) xor d(1022) xor d(1021) xor d(1020) xor d(1019) xor d(1018) xor d(1016) xor d(1015) xor d(1010) xor d(1007) xor d(1006) xor d(1005) xor d(1002) xor d(1001) xor d(996) xor d(995) xor d(993) xor d(992) xor d(990) xor d(989) xor d(987) xor d(985) xor d(984) xor d(983) xor d(979) xor d(978) xor d(977) xor d(976) xor d(973) xor d(972) xor d(970) xor d(969) xor d(968) xor d(965) xor d(962) xor d(961) xor d(960) xor d(959) xor d(958) xor d(957) xor d(953) xor d(949) xor d(942) xor d(941) xor d(939) xor d(936) xor d(928) xor d(927) xor d(922) xor d(921) xor d(918) xor d(917) xor d(916) xor d(915) xor d(910) xor d(909) xor d(908) xor d(906) xor d(905) xor d(902) xor d(901) xor d(900) xor d(897) xor d(895) xor d(888) xor d(887) xor d(886) xor d(885) xor d(880) xor d(879) xor d(875) xor d(874) xor d(872) xor d(871) xor d(870) xor d(867) xor d(866) xor d(863) xor d(861) xor d(858) xor d(857) xor d(856) xor d(855) xor d(852) xor d(850) xor d(849) xor d(846) xor d(838) xor d(837) xor d(836) xor d(835) xor d(831) xor d(830) xor d(829) xor d(827) xor d(826) xor d(823) xor d(821) xor d(820) xor d(819) xor d(818) xor d(816) xor d(815) xor d(808) xor d(807) xor d(805) xor d(804) xor d(803) xor d(801) xor d(799) xor d(798) xor d(797) xor d(796) xor d(795) xor d(790) xor d(788) xor d(787) xor d(784) xor d(782) xor d(780) xor d(779) xor d(778) xor d(774) xor d(772) xor d(771) xor d(770) xor d(769) xor d(766) xor d(765) xor d(761) xor d(757) xor d(754) xor d(752) xor d(751) xor d(749) xor d(745) xor d(744) xor d(743) xor d(742) xor d(741) xor d(738) xor d(737) xor d(735) xor d(733) xor d(729) xor d(728) xor d(727) xor d(724) xor d(723) xor d(722) xor d(720) xor d(718) xor d(717) xor d(716) xor d(715) xor d(713) xor d(712) xor d(711) xor d(710) xor d(705) xor d(704) xor d(702) xor d(700) xor d(697) xor d(696) xor d(695) xor d(694) xor d(692) xor d(691) xor d(690) xor d(688) xor d(686) xor d(683) xor d(682) xor d(681) xor d(680) xor d(676) xor d(675) xor d(674) xor d(672) xor d(669) xor d(668) xor d(667) xor d(666) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(656) xor d(652) xor d(650) xor d(648) xor d(644) xor d(643) xor d(640) xor d(638) xor d(637) xor d(636) xor d(635) xor d(631) xor d(628) xor d(624) xor d(621) xor d(620) xor d(619) xor d(615) xor d(614) xor d(613) xor d(612) xor d(611) xor d(610) xor d(609) xor d(605) xor d(602) xor d(601) xor d(599) xor d(598) xor d(597) xor d(594) xor d(592) xor d(591) xor d(590) xor d(589) xor d(588) xor d(586) xor d(585) xor d(583) xor d(582) xor d(579) xor d(578) xor d(575) xor d(573) xor d(572) xor d(571) xor d(569) xor d(568) xor d(567) xor d(564) xor d(562) xor d(561) xor d(560) xor d(558) xor d(557) xor d(554) xor d(550) xor d(548) xor d(547) xor d(546) xor d(544) xor d(543) xor d(542) xor d(540) xor d(539) xor d(538) xor d(532) xor d(529) xor d(528) xor d(527) xor d(524) xor d(523) xor d(522) xor d(519) xor d(517) xor d(515) xor d(510) xor d(508) xor d(507) xor d(506) xor d(505) xor d(504) xor d(501) xor d(500) xor d(496) xor d(495) xor d(493) xor d(492) xor d(488) xor d(487) xor d(486) xor d(484) xor d(477) xor d(476) xor d(473) xor d(472) xor d(471) xor d(470) xor d(466) xor d(464) xor d(462) xor d(461) xor d(460) xor d(458) xor d(457) xor d(455) xor d(453) xor d(451) xor d(450) xor d(446) xor d(444) xor d(437) xor d(436) xor d(435) xor d(430) xor d(428) xor d(427) xor d(425) xor d(423) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(411) xor d(409) xor d(407) xor d(406) xor d(405) xor d(402) xor d(396) xor d(395) xor d(394) xor d(391) xor d(387) xor d(386) xor d(385) xor d(384) xor d(380) xor d(379) xor d(378) xor d(375) xor d(372) xor d(370) xor d(368) xor d(367) xor d(364) xor d(363) xor d(362) xor d(360) xor d(358) xor d(357) xor d(355) xor d(354) xor d(351) xor d(341) xor d(340) xor d(339) xor d(336) xor d(335) xor d(332) xor d(330) xor d(329) xor d(326) xor d(325) xor d(324) xor d(320) xor d(318) xor d(314) xor d(313) xor d(312) xor d(311) xor d(308) xor d(306) xor d(305) xor d(303) xor d(297) xor d(291) xor d(290) xor d(280) xor d(279) xor d(278) xor d(277) xor d(275) xor d(273) xor d(269) xor d(266) xor d(265) xor d(261) xor d(259) xor d(257) xor d(256) xor d(255) xor d(253) xor d(251) xor d(248) xor d(246) xor d(245) xor d(244) xor d(243) xor d(242) xor d(241) xor d(235) xor d(234) xor d(230) xor d(229) xor d(228) xor d(227) xor d(222) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(215) xor d(214) xor d(210) xor d(207) xor d(206) xor d(204) xor d(201) xor d(199) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(190) xor d(188) xor d(187) xor d(185) xor d(184) xor d(181) xor d(180) xor d(177) xor d(175) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(162) xor d(158) xor d(157) xor d(156) xor d(154) xor d(153) xor d(149) xor d(145) xor d(141) xor d(137) xor d(136) xor d(134) xor d(133) xor d(128) xor d(127) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(111) xor d(110) xor d(109) xor d(108) xor d(105) xor d(102) xor d(101) xor d(98) xor d(97) xor d(96) xor d(94) xor d(92) xor d(91) xor d(87) xor d(86) xor d(85) xor d(82) xor d(81) xor d(77) xor d(75) xor d(74) xor d(73) xor d(71) xor d(69) xor d(68) xor d(63) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(41) xor d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(9) xor c(10) xor c(13) xor c(14) xor c(15) xor c(18) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(13) := d(1023) xor d(1022) xor d(1021) xor d(1020) xor d(1019) xor d(1017) xor d(1016) xor d(1011) xor d(1008) xor d(1007) xor d(1006) xor d(1003) xor d(1002) xor d(997) xor d(996) xor d(994) xor d(993) xor d(991) xor d(990) xor d(988) xor d(986) xor d(985) xor d(984) xor d(980) xor d(979) xor d(978) xor d(977) xor d(974) xor d(973) xor d(971) xor d(970) xor d(969) xor d(966) xor d(963) xor d(962) xor d(961) xor d(960) xor d(959) xor d(958) xor d(954) xor d(950) xor d(943) xor d(942) xor d(940) xor d(937) xor d(929) xor d(928) xor d(923) xor d(922) xor d(919) xor d(918) xor d(917) xor d(916) xor d(911) xor d(910) xor d(909) xor d(907) xor d(906) xor d(903) xor d(902) xor d(901) xor d(898) xor d(896) xor d(889) xor d(888) xor d(887) xor d(886) xor d(881) xor d(880) xor d(876) xor d(875) xor d(873) xor d(872) xor d(871) xor d(868) xor d(867) xor d(864) xor d(862) xor d(859) xor d(858) xor d(857) xor d(856) xor d(853) xor d(851) xor d(850) xor d(847) xor d(839) xor d(838) xor d(837) xor d(836) xor d(832) xor d(831) xor d(830) xor d(828) xor d(827) xor d(824) xor d(822) xor d(821) xor d(820) xor d(819) xor d(817) xor d(816) xor d(809) xor d(808) xor d(806) xor d(805) xor d(804) xor d(802) xor d(800) xor d(799) xor d(798) xor d(797) xor d(796) xor d(791) xor d(789) xor d(788) xor d(785) xor d(783) xor d(781) xor d(780) xor d(779) xor d(775) xor d(773) xor d(772) xor d(771) xor d(770) xor d(767) xor d(766) xor d(762) xor d(758) xor d(755) xor d(753) xor d(752) xor d(750) xor d(746) xor d(745) xor d(744) xor d(743) xor d(742) xor d(739) xor d(738) xor d(736) xor d(734) xor d(730) xor d(729) xor d(728) xor d(725) xor d(724) xor d(723) xor d(721) xor d(719) xor d(718) xor d(717) xor d(716) xor d(714) xor d(713) xor d(712) xor d(711) xor d(706) xor d(705) xor d(703) xor d(701) xor d(698) xor d(697) xor d(696) xor d(695) xor d(693) xor d(692) xor d(691) xor d(689) xor d(687) xor d(684) xor d(683) xor d(682) xor d(681) xor d(677) xor d(676) xor d(675) xor d(673) xor d(670) xor d(669) xor d(668) xor d(667) xor d(665) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(657) xor d(653) xor d(651) xor d(649) xor d(645) xor d(644) xor d(641) xor d(639) xor d(638) xor d(637) xor d(636) xor d(632) xor d(629) xor d(625) xor d(622) xor d(621) xor d(620) xor d(616) xor d(615) xor d(614) xor d(613) xor d(612) xor d(611) xor d(610) xor d(606) xor d(603) xor d(602) xor d(600) xor d(599) xor d(598) xor d(595) xor d(593) xor d(592) xor d(591) xor d(590) xor d(589) xor d(587) xor d(586) xor d(584) xor d(583) xor d(580) xor d(579) xor d(576) xor d(574) xor d(573) xor d(572) xor d(570) xor d(569) xor d(568) xor d(565) xor d(563) xor d(562) xor d(561) xor d(559) xor d(558) xor d(555) xor d(551) xor d(549) xor d(548) xor d(547) xor d(545) xor d(544) xor d(543) xor d(541) xor d(540) xor d(539) xor d(533) xor d(530) xor d(529) xor d(528) xor d(525) xor d(524) xor d(523) xor d(520) xor d(518) xor d(516) xor d(511) xor d(509) xor d(508) xor d(507) xor d(506) xor d(505) xor d(502) xor d(501) xor d(497) xor d(496) xor d(494) xor d(493) xor d(489) xor d(488) xor d(487) xor d(485) xor d(478) xor d(477) xor d(474) xor d(473) xor d(472) xor d(471) xor d(467) xor d(465) xor d(463) xor d(462) xor d(461) xor d(459) xor d(458) xor d(456) xor d(454) xor d(452) xor d(451) xor d(447) xor d(445) xor d(438) xor d(437) xor d(436) xor d(431) xor d(429) xor d(428) xor d(426) xor d(424) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(412) xor d(410) xor d(408) xor d(407) xor d(406) xor d(403) xor d(397) xor d(396) xor d(395) xor d(392) xor d(388) xor d(387) xor d(386) xor d(385) xor d(381) xor d(380) xor d(379) xor d(376) xor d(373) xor d(371) xor d(369) xor d(368) xor d(365) xor d(364) xor d(363) xor d(361) xor d(359) xor d(358) xor d(356) xor d(355) xor d(352) xor d(342) xor d(341) xor d(340) xor d(337) xor d(336) xor d(333) xor d(331) xor d(330) xor d(327) xor d(326) xor d(325) xor d(321) xor d(319) xor d(315) xor d(314) xor d(313) xor d(312) xor d(309) xor d(307) xor d(306) xor d(304) xor d(298) xor d(292) xor d(291) xor d(281) xor d(280) xor d(279) xor d(278) xor d(276) xor d(274) xor d(270) xor d(267) xor d(266) xor d(262) xor d(260) xor d(258) xor d(257) xor d(256) xor d(254) xor d(252) xor d(249) xor d(247) xor d(246) xor d(245) xor d(244) xor d(243) xor d(242) xor d(236) xor d(235) xor d(231) xor d(230) xor d(229) xor d(228) xor d(223) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(215) xor d(211) xor d(208) xor d(207) xor d(205) xor d(202) xor d(200) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(191) xor d(189) xor d(188) xor d(186) xor d(185) xor d(182) xor d(181) xor d(178) xor d(176) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(163) xor d(159) xor d(158) xor d(157) xor d(155) xor d(154) xor d(150) xor d(146) xor d(142) xor d(138) xor d(137) xor d(135) xor d(134) xor d(129) xor d(128) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(112) xor d(111) xor d(110) xor d(109) xor d(106) xor d(103) xor d(102) xor d(99) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(88) xor d(87) xor d(86) xor d(83) xor d(82) xor d(78) xor d(76) xor d(75) xor d(74) xor d(72) xor d(70) xor d(69) xor d(64) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(42) xor d(32) xor d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(4) xor c(5) xor c(10) xor c(11) xor c(14) xor c(15) xor c(16) xor c(19) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(14) := d(1023) xor d(1022) xor d(1021) xor d(1020) xor d(1018) xor d(1017) xor d(1012) xor d(1009) xor d(1008) xor d(1007) xor d(1004) xor d(1003) xor d(998) xor d(997) xor d(995) xor d(994) xor d(992) xor d(991) xor d(989) xor d(987) xor d(986) xor d(985) xor d(981) xor d(980) xor d(979) xor d(978) xor d(975) xor d(974) xor d(972) xor d(971) xor d(970) xor d(967) xor d(964) xor d(963) xor d(962) xor d(961) xor d(960) xor d(959) xor d(955) xor d(951) xor d(944) xor d(943) xor d(941) xor d(938) xor d(930) xor d(929) xor d(924) xor d(923) xor d(920) xor d(919) xor d(918) xor d(917) xor d(912) xor d(911) xor d(910) xor d(908) xor d(907) xor d(904) xor d(903) xor d(902) xor d(899) xor d(897) xor d(890) xor d(889) xor d(888) xor d(887) xor d(882) xor d(881) xor d(877) xor d(876) xor d(874) xor d(873) xor d(872) xor d(869) xor d(868) xor d(865) xor d(863) xor d(860) xor d(859) xor d(858) xor d(857) xor d(854) xor d(852) xor d(851) xor d(848) xor d(840) xor d(839) xor d(838) xor d(837) xor d(833) xor d(832) xor d(831) xor d(829) xor d(828) xor d(825) xor d(823) xor d(822) xor d(821) xor d(820) xor d(818) xor d(817) xor d(810) xor d(809) xor d(807) xor d(806) xor d(805) xor d(803) xor d(801) xor d(800) xor d(799) xor d(798) xor d(797) xor d(792) xor d(790) xor d(789) xor d(786) xor d(784) xor d(782) xor d(781) xor d(780) xor d(776) xor d(774) xor d(773) xor d(772) xor d(771) xor d(768) xor d(767) xor d(763) xor d(759) xor d(756) xor d(754) xor d(753) xor d(751) xor d(747) xor d(746) xor d(745) xor d(744) xor d(743) xor d(740) xor d(739) xor d(737) xor d(735) xor d(731) xor d(730) xor d(729) xor d(726) xor d(725) xor d(724) xor d(722) xor d(720) xor d(719) xor d(718) xor d(717) xor d(715) xor d(714) xor d(713) xor d(712) xor d(707) xor d(706) xor d(704) xor d(702) xor d(699) xor d(698) xor d(697) xor d(696) xor d(694) xor d(693) xor d(692) xor d(690) xor d(688) xor d(685) xor d(684) xor d(683) xor d(682) xor d(678) xor d(677) xor d(676) xor d(674) xor d(671) xor d(670) xor d(669) xor d(668) xor d(666) xor d(665) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(658) xor d(654) xor d(652) xor d(650) xor d(646) xor d(645) xor d(642) xor d(640) xor d(639) xor d(638) xor d(637) xor d(633) xor d(630) xor d(626) xor d(623) xor d(622) xor d(621) xor d(617) xor d(616) xor d(615) xor d(614) xor d(613) xor d(612) xor d(611) xor d(607) xor d(604) xor d(603) xor d(601) xor d(600) xor d(599) xor d(596) xor d(594) xor d(593) xor d(592) xor d(591) xor d(590) xor d(588) xor d(587) xor d(585) xor d(584) xor d(581) xor d(580) xor d(577) xor d(575) xor d(574) xor d(573) xor d(571) xor d(570) xor d(569) xor d(566) xor d(564) xor d(563) xor d(562) xor d(560) xor d(559) xor d(556) xor d(552) xor d(550) xor d(549) xor d(548) xor d(546) xor d(545) xor d(544) xor d(542) xor d(541) xor d(540) xor d(534) xor d(531) xor d(530) xor d(529) xor d(526) xor d(525) xor d(524) xor d(521) xor d(519) xor d(517) xor d(512) xor d(510) xor d(509) xor d(508) xor d(507) xor d(506) xor d(503) xor d(502) xor d(498) xor d(497) xor d(495) xor d(494) xor d(490) xor d(489) xor d(488) xor d(486) xor d(479) xor d(478) xor d(475) xor d(474) xor d(473) xor d(472) xor d(468) xor d(466) xor d(464) xor d(463) xor d(462) xor d(460) xor d(459) xor d(457) xor d(455) xor d(453) xor d(452) xor d(448) xor d(446) xor d(439) xor d(438) xor d(437) xor d(432) xor d(430) xor d(429) xor d(427) xor d(425) xor d(421) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(413) xor d(411) xor d(409) xor d(408) xor d(407) xor d(404) xor d(398) xor d(397) xor d(396) xor d(393) xor d(389) xor d(388) xor d(387) xor d(386) xor d(382) xor d(381) xor d(380) xor d(377) xor d(374) xor d(372) xor d(370) xor d(369) xor d(366) xor d(365) xor d(364) xor d(362) xor d(360) xor d(359) xor d(357) xor d(356) xor d(353) xor d(343) xor d(342) xor d(341) xor d(338) xor d(337) xor d(334) xor d(332) xor d(331) xor d(328) xor d(327) xor d(326) xor d(322) xor d(320) xor d(316) xor d(315) xor d(314) xor d(313) xor d(310) xor d(308) xor d(307) xor d(305) xor d(299) xor d(293) xor d(292) xor d(282) xor d(281) xor d(280) xor d(279) xor d(277) xor d(275) xor d(271) xor d(268) xor d(267) xor d(263) xor d(261) xor d(259) xor d(258) xor d(257) xor d(255) xor d(253) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(244) xor d(243) xor d(237) xor d(236) xor d(232) xor d(231) xor d(230) xor d(229) xor d(224) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(212) xor d(209) xor d(208) xor d(206) xor d(203) xor d(201) xor d(199) xor d(198) xor d(196) xor d(195) xor d(194) xor d(192) xor d(190) xor d(189) xor d(187) xor d(186) xor d(183) xor d(182) xor d(179) xor d(177) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(164) xor d(160) xor d(159) xor d(158) xor d(156) xor d(155) xor d(151) xor d(147) xor d(143) xor d(139) xor d(138) xor d(136) xor d(135) xor d(130) xor d(129) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(113) xor d(112) xor d(111) xor d(110) xor d(107) xor d(104) xor d(103) xor d(100) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(89) xor d(88) xor d(87) xor d(84) xor d(83) xor d(79) xor d(77) xor d(76) xor d(75) xor d(73) xor d(71) xor d(70) xor d(65) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(43) xor d(33) xor d(32) xor d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(0) xor c(2) xor c(3) xor c(5) xor c(6) xor c(11) xor c(12) xor c(15) xor c(16) xor c(17) xor c(20) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(15) := d(1023) xor d(1022) xor d(1021) xor d(1019) xor d(1018) xor d(1013) xor d(1010) xor d(1009) xor d(1008) xor d(1005) xor d(1004) xor d(999) xor d(998) xor d(996) xor d(995) xor d(993) xor d(992) xor d(990) xor d(988) xor d(987) xor d(986) xor d(982) xor d(981) xor d(980) xor d(979) xor d(976) xor d(975) xor d(973) xor d(972) xor d(971) xor d(968) xor d(965) xor d(964) xor d(963) xor d(962) xor d(961) xor d(960) xor d(956) xor d(952) xor d(945) xor d(944) xor d(942) xor d(939) xor d(931) xor d(930) xor d(925) xor d(924) xor d(921) xor d(920) xor d(919) xor d(918) xor d(913) xor d(912) xor d(911) xor d(909) xor d(908) xor d(905) xor d(904) xor d(903) xor d(900) xor d(898) xor d(891) xor d(890) xor d(889) xor d(888) xor d(883) xor d(882) xor d(878) xor d(877) xor d(875) xor d(874) xor d(873) xor d(870) xor d(869) xor d(866) xor d(864) xor d(861) xor d(860) xor d(859) xor d(858) xor d(855) xor d(853) xor d(852) xor d(849) xor d(841) xor d(840) xor d(839) xor d(838) xor d(834) xor d(833) xor d(832) xor d(830) xor d(829) xor d(826) xor d(824) xor d(823) xor d(822) xor d(821) xor d(819) xor d(818) xor d(811) xor d(810) xor d(808) xor d(807) xor d(806) xor d(804) xor d(802) xor d(801) xor d(800) xor d(799) xor d(798) xor d(793) xor d(791) xor d(790) xor d(787) xor d(785) xor d(783) xor d(782) xor d(781) xor d(777) xor d(775) xor d(774) xor d(773) xor d(772) xor d(769) xor d(768) xor d(764) xor d(760) xor d(757) xor d(755) xor d(754) xor d(752) xor d(748) xor d(747) xor d(746) xor d(745) xor d(744) xor d(741) xor d(740) xor d(738) xor d(736) xor d(732) xor d(731) xor d(730) xor d(727) xor d(726) xor d(725) xor d(723) xor d(721) xor d(720) xor d(719) xor d(718) xor d(716) xor d(715) xor d(714) xor d(713) xor d(708) xor d(707) xor d(705) xor d(703) xor d(700) xor d(699) xor d(698) xor d(697) xor d(695) xor d(694) xor d(693) xor d(691) xor d(689) xor d(686) xor d(685) xor d(684) xor d(683) xor d(679) xor d(678) xor d(677) xor d(675) xor d(672) xor d(671) xor d(670) xor d(669) xor d(667) xor d(666) xor d(665) xor d(664) xor d(663) xor d(662) xor d(661) xor d(659) xor d(655) xor d(653) xor d(651) xor d(647) xor d(646) xor d(643) xor d(641) xor d(640) xor d(639) xor d(638) xor d(634) xor d(631) xor d(627) xor d(624) xor d(623) xor d(622) xor d(618) xor d(617) xor d(616) xor d(615) xor d(614) xor d(613) xor d(612) xor d(608) xor d(605) xor d(604) xor d(602) xor d(601) xor d(600) xor d(597) xor d(595) xor d(594) xor d(593) xor d(592) xor d(591) xor d(589) xor d(588) xor d(586) xor d(585) xor d(582) xor d(581) xor d(578) xor d(576) xor d(575) xor d(574) xor d(572) xor d(571) xor d(570) xor d(567) xor d(565) xor d(564) xor d(563) xor d(561) xor d(560) xor d(557) xor d(553) xor d(551) xor d(550) xor d(549) xor d(547) xor d(546) xor d(545) xor d(543) xor d(542) xor d(541) xor d(535) xor d(532) xor d(531) xor d(530) xor d(527) xor d(526) xor d(525) xor d(522) xor d(520) xor d(518) xor d(513) xor d(511) xor d(510) xor d(509) xor d(508) xor d(507) xor d(504) xor d(503) xor d(499) xor d(498) xor d(496) xor d(495) xor d(491) xor d(490) xor d(489) xor d(487) xor d(480) xor d(479) xor d(476) xor d(475) xor d(474) xor d(473) xor d(469) xor d(467) xor d(465) xor d(464) xor d(463) xor d(461) xor d(460) xor d(458) xor d(456) xor d(454) xor d(453) xor d(449) xor d(447) xor d(440) xor d(439) xor d(438) xor d(433) xor d(431) xor d(430) xor d(428) xor d(426) xor d(422) xor d(421) xor d(420) xor d(419) xor d(418) xor d(417) xor d(414) xor d(412) xor d(410) xor d(409) xor d(408) xor d(405) xor d(399) xor d(398) xor d(397) xor d(394) xor d(390) xor d(389) xor d(388) xor d(387) xor d(383) xor d(382) xor d(381) xor d(378) xor d(375) xor d(373) xor d(371) xor d(370) xor d(367) xor d(366) xor d(365) xor d(363) xor d(361) xor d(360) xor d(358) xor d(357) xor d(354) xor d(344) xor d(343) xor d(342) xor d(339) xor d(338) xor d(335) xor d(333) xor d(332) xor d(329) xor d(328) xor d(327) xor d(323) xor d(321) xor d(317) xor d(316) xor d(315) xor d(314) xor d(311) xor d(309) xor d(308) xor d(306) xor d(300) xor d(294) xor d(293) xor d(283) xor d(282) xor d(281) xor d(280) xor d(278) xor d(276) xor d(272) xor d(269) xor d(268) xor d(264) xor d(262) xor d(260) xor d(259) xor d(258) xor d(256) xor d(254) xor d(251) xor d(249) xor d(248) xor d(247) xor d(246) xor d(245) xor d(244) xor d(238) xor d(237) xor d(233) xor d(232) xor d(231) xor d(230) xor d(225) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(213) xor d(210) xor d(209) xor d(207) xor d(204) xor d(202) xor d(200) xor d(199) xor d(197) xor d(196) xor d(195) xor d(193) xor d(191) xor d(190) xor d(188) xor d(187) xor d(184) xor d(183) xor d(180) xor d(178) xor d(173) xor d(172) xor d(171) xor d(170) xor d(168) xor d(165) xor d(161) xor d(160) xor d(159) xor d(157) xor d(156) xor d(152) xor d(148) xor d(144) xor d(140) xor d(139) xor d(137) xor d(136) xor d(131) xor d(130) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(90) xor d(89) xor d(88) xor d(85) xor d(84) xor d(80) xor d(78) xor d(77) xor d(76) xor d(74) xor d(72) xor d(71) xor d(66) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(50) xor d(49) xor d(45) xor d(44) xor d(34) xor d(33) xor d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(0) xor c(1) xor c(3) xor c(4) xor c(6) xor c(7) xor c(12) xor c(13) xor c(16) xor c(17) xor c(18) xor c(21) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(16) := d(1023) xor d(1022) xor d(1021) xor d(1020) xor d(1018) xor d(1016) xor d(1015) xor d(1014) xor d(1012) xor d(1010) xor d(1008) xor d(1004) xor d(998) xor d(997) xor d(993) xor d(992) xor d(991) xor d(990) xor d(989) xor d(988) xor d(987) xor d(985) xor d(984) xor d(979) xor d(978) xor d(976) xor d(975) xor d(973) xor d(972) xor d(971) xor d(969) xor d(967) xor d(966) xor d(965) xor d(964) xor d(963) xor d(962) xor d(961) xor d(960) xor d(959) xor d(958) xor d(957) xor d(955) xor d(954) xor d(950) xor d(948) xor d(946) xor d(945) xor d(944) xor d(943) xor d(941) xor d(940) xor d(939) xor d(938) xor d(935) xor d(934) xor d(933) xor d(932) xor d(926) xor d(925) xor d(922) xor d(921) xor d(919) xor d(918) xor d(917) xor d(915) xor d(914) xor d(913) xor d(912) xor d(909) xor d(907) xor d(905) xor d(903) xor d(902) xor d(900) xor d(898) xor d(897) xor d(896) xor d(893) xor d(892) xor d(887) xor d(886) xor d(884) xor d(881) xor d(877) xor d(873) xor d(870) xor d(869) xor d(868) xor d(865) xor d(863) xor d(862) xor d(857) xor d(856) xor d(851) xor d(849) xor d(848) xor d(846) xor d(841) xor d(837) xor d(833) xor d(832) xor d(831) xor d(830) xor d(823) xor d(822) xor d(820) xor d(818) xor d(816) xor d(815) xor d(814) xor d(813) xor d(810) xor d(806) xor d(805) xor d(804) xor d(801) xor d(799) xor d(798) xor d(794) xor d(793) xor d(792) xor d(785) xor d(783) xor d(780) xor d(778) xor d(775) xor d(773) xor d(770) xor d(767) xor d(763) xor d(762) xor d(761) xor d(750) xor d(749) xor d(746) xor d(745) xor d(744) xor d(740) xor d(739) xor d(737) xor d(736) xor d(733) xor d(729) xor d(728) xor d(726) xor d(725) xor d(723) xor d(717) xor d(716) xor d(714) xor d(710) xor d(709) xor d(707) xor d(706) xor d(702) xor d(699) xor d(696) xor d(693) xor d(692) xor d(691) xor d(690) xor d(689) xor d(685) xor d(684) xor d(679) xor d(678) xor d(676) xor d(675) xor d(674) xor d(671) xor d(669) xor d(664) xor d(663) xor d(662) xor d(660) xor d(658) xor d(655) xor d(654) xor d(653) xor d(649) xor d(647) xor d(646) xor d(641) xor d(639) xor d(636) xor d(635) xor d(630) xor d(629) xor d(628) xor d(626) xor d(625) xor d(620) xor d(618) xor d(616) xor d(614) xor d(612) xor d(611) xor d(610) xor d(607) xor d(605) xor d(604) xor d(601) xor d(600) xor d(599) xor d(598) xor d(594) xor d(591) xor d(590) xor d(589) xor d(585) xor d(582) xor d(580) xor d(579) xor d(578) xor d(577) xor d(576) xor d(574) xor d(572) xor d(568) xor d(567) xor d(566) xor d(564) xor d(563) xor d(562) xor d(560) xor d(557) xor d(556) xor d(555) xor d(552) xor d(550) xor d(549) xor d(548) xor d(547) xor d(546) xor d(545) xor d(544) xor d(543) xor d(540) xor d(539) xor d(536) xor d(535) xor d(534) xor d(533) xor d(530) xor d(529) xor d(527) xor d(525) xor d(523) xor d(522) xor d(518) xor d(516) xor d(509) xor d(507) xor d(506) xor d(505) xor d(504) xor d(502) xor d(501) xor d(499) xor d(497) xor d(496) xor d(495) xor d(494) xor d(493) xor d(489) xor d(486) xor d(483) xor d(482) xor d(479) xor d(475) xor d(474) xor d(472) xor d(466) xor d(459) xor d(458) xor d(457) xor d(455) xor d(454) xor d(452) xor d(449) xor d(444) xor d(441) xor d(440) xor d(439) xor d(437) xor d(436) xor d(433) xor d(432) xor d(431) xor d(429) xor d(427) xor d(424) xor d(423) xor d(421) xor d(420) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(411) xor d(410) xor d(408) xor d(407) xor d(406) xor d(405) xor d(404) xor d(396) xor d(395) xor d(393) xor d(392) xor d(389) xor d(387) xor d(386) xor d(384) xor d(383) xor d(382) xor d(381) xor d(379) xor d(378) xor d(371) xor d(369) xor d(367) xor d(364) xor d(363) xor d(361) xor d(357) xor d(355) xor d(353) xor d(349) xor d(348) xor d(347) xor d(343) xor d(342) xor d(341) xor d(340) xor d(338) xor d(337) xor d(336) xor d(335) xor d(330) xor d(329) xor d(327) xor d(324) xor d(321) xor d(320) xor d(319) xor d(316) xor d(307) xor d(305) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(298) xor d(297) xor d(296) xor d(292) xor d(290) xor d(288) xor d(287) xor d(286) xor d(284) xor d(282) xor d(281) xor d(276) xor d(274) xor d(270) xor d(268) xor d(264) xor d(263) xor d(260) xor d(250) xor d(249) xor d(247) xor d(246) xor d(245) xor d(243) xor d(239) xor d(238) xor d(237) xor d(233) xor d(232) xor d(231) xor d(230) xor d(228) xor d(227) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(216) xor d(212) xor d(211) xor d(209) xor d(207) xor d(205) xor d(202) xor d(200) xor d(199) xor d(196) xor d(193) xor d(190) xor d(189) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(181) xor d(179) xor d(174) xor d(173) xor d(170) xor d(167) xor d(160) xor d(157) xor d(156) xor d(155) xor d(153) xor d(151) xor d(145) xor d(144) xor d(143) xor d(141) xor d(140) xor d(138) xor d(136) xor d(135) xor d(134) xor d(131) xor d(128) xor d(127) xor d(124) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(115) xor d(112) xor d(111) xor d(110) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(99) xor d(97) xor d(94) xor d(91) xor d(90) xor d(89) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(78) xor d(77) xor d(75) xor d(68) xor d(66) xor d(57) xor d(56) xor d(51) xor d(48) xor d(47) xor d(46) xor d(44) xor d(37) xor d(35) xor d(32) xor d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(0) xor c(1) xor c(5) xor c(6) xor c(12) xor c(16) xor c(18) xor c(20) xor c(22) xor c(23) xor c(24) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(17) := d(1023) xor d(1022) xor d(1021) xor d(1019) xor d(1017) xor d(1016) xor d(1015) xor d(1013) xor d(1011) xor d(1009) xor d(1005) xor d(999) xor d(998) xor d(994) xor d(993) xor d(992) xor d(991) xor d(990) xor d(989) xor d(988) xor d(986) xor d(985) xor d(980) xor d(979) xor d(977) xor d(976) xor d(974) xor d(973) xor d(972) xor d(970) xor d(968) xor d(967) xor d(966) xor d(965) xor d(964) xor d(963) xor d(962) xor d(961) xor d(960) xor d(959) xor d(958) xor d(956) xor d(955) xor d(951) xor d(949) xor d(947) xor d(946) xor d(945) xor d(944) xor d(942) xor d(941) xor d(940) xor d(939) xor d(936) xor d(935) xor d(934) xor d(933) xor d(927) xor d(926) xor d(923) xor d(922) xor d(920) xor d(919) xor d(918) xor d(916) xor d(915) xor d(914) xor d(913) xor d(910) xor d(908) xor d(906) xor d(904) xor d(903) xor d(901) xor d(899) xor d(898) xor d(897) xor d(894) xor d(893) xor d(888) xor d(887) xor d(885) xor d(882) xor d(878) xor d(874) xor d(871) xor d(870) xor d(869) xor d(866) xor d(864) xor d(863) xor d(858) xor d(857) xor d(852) xor d(850) xor d(849) xor d(847) xor d(842) xor d(838) xor d(834) xor d(833) xor d(832) xor d(831) xor d(824) xor d(823) xor d(821) xor d(819) xor d(817) xor d(816) xor d(815) xor d(814) xor d(811) xor d(807) xor d(806) xor d(805) xor d(802) xor d(800) xor d(799) xor d(795) xor d(794) xor d(793) xor d(786) xor d(784) xor d(781) xor d(779) xor d(776) xor d(774) xor d(771) xor d(768) xor d(764) xor d(763) xor d(762) xor d(751) xor d(750) xor d(747) xor d(746) xor d(745) xor d(741) xor d(740) xor d(738) xor d(737) xor d(734) xor d(730) xor d(729) xor d(727) xor d(726) xor d(724) xor d(718) xor d(717) xor d(715) xor d(711) xor d(710) xor d(708) xor d(707) xor d(703) xor d(700) xor d(697) xor d(694) xor d(693) xor d(692) xor d(691) xor d(690) xor d(686) xor d(685) xor d(680) xor d(679) xor d(677) xor d(676) xor d(675) xor d(672) xor d(670) xor d(665) xor d(664) xor d(663) xor d(661) xor d(659) xor d(656) xor d(655) xor d(654) xor d(650) xor d(648) xor d(647) xor d(642) xor d(640) xor d(637) xor d(636) xor d(631) xor d(630) xor d(629) xor d(627) xor d(626) xor d(621) xor d(619) xor d(617) xor d(615) xor d(613) xor d(612) xor d(611) xor d(608) xor d(606) xor d(605) xor d(602) xor d(601) xor d(600) xor d(599) xor d(595) xor d(592) xor d(591) xor d(590) xor d(586) xor d(583) xor d(581) xor d(580) xor d(579) xor d(578) xor d(577) xor d(575) xor d(573) xor d(569) xor d(568) xor d(567) xor d(565) xor d(564) xor d(563) xor d(561) xor d(558) xor d(557) xor d(556) xor d(553) xor d(551) xor d(550) xor d(549) xor d(548) xor d(547) xor d(546) xor d(545) xor d(544) xor d(541) xor d(540) xor d(537) xor d(536) xor d(535) xor d(534) xor d(531) xor d(530) xor d(528) xor d(526) xor d(524) xor d(523) xor d(519) xor d(517) xor d(510) xor d(508) xor d(507) xor d(506) xor d(505) xor d(503) xor d(502) xor d(500) xor d(498) xor d(497) xor d(496) xor d(495) xor d(494) xor d(490) xor d(487) xor d(484) xor d(483) xor d(480) xor d(476) xor d(475) xor d(473) xor d(467) xor d(460) xor d(459) xor d(458) xor d(456) xor d(455) xor d(453) xor d(450) xor d(445) xor d(442) xor d(441) xor d(440) xor d(438) xor d(437) xor d(434) xor d(433) xor d(432) xor d(430) xor d(428) xor d(425) xor d(424) xor d(422) xor d(421) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(411) xor d(409) xor d(408) xor d(407) xor d(406) xor d(405) xor d(397) xor d(396) xor d(394) xor d(393) xor d(390) xor d(388) xor d(387) xor d(385) xor d(384) xor d(383) xor d(382) xor d(380) xor d(379) xor d(372) xor d(370) xor d(368) xor d(365) xor d(364) xor d(362) xor d(358) xor d(356) xor d(354) xor d(350) xor d(349) xor d(348) xor d(344) xor d(343) xor d(342) xor d(341) xor d(339) xor d(338) xor d(337) xor d(336) xor d(331) xor d(330) xor d(328) xor d(325) xor d(322) xor d(321) xor d(320) xor d(317) xor d(308) xor d(306) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(298) xor d(297) xor d(293) xor d(291) xor d(289) xor d(288) xor d(287) xor d(285) xor d(283) xor d(282) xor d(277) xor d(275) xor d(271) xor d(269) xor d(265) xor d(264) xor d(261) xor d(251) xor d(250) xor d(248) xor d(247) xor d(246) xor d(244) xor d(240) xor d(239) xor d(238) xor d(234) xor d(233) xor d(232) xor d(231) xor d(229) xor d(228) xor d(224) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(217) xor d(213) xor d(212) xor d(210) xor d(208) xor d(206) xor d(203) xor d(201) xor d(200) xor d(197) xor d(194) xor d(191) xor d(190) xor d(187) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(180) xor d(175) xor d(174) xor d(171) xor d(168) xor d(161) xor d(158) xor d(157) xor d(156) xor d(154) xor d(152) xor d(146) xor d(145) xor d(144) xor d(142) xor d(141) xor d(139) xor d(137) xor d(136) xor d(135) xor d(132) xor d(129) xor d(128) xor d(125) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(112) xor d(111) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(100) xor d(98) xor d(95) xor d(92) xor d(91) xor d(90) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(79) xor d(78) xor d(76) xor d(69) xor d(67) xor d(58) xor d(57) xor d(52) xor d(49) xor d(48) xor d(47) xor d(45) xor d(38) xor d(36) xor d(33) xor d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(0) xor c(1) xor c(2) xor c(6) xor c(7) xor c(13) xor c(17) xor c(19) xor c(21) xor c(23) xor c(24) xor c(25) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(18) := d(1023) xor d(1022) xor d(1020) xor d(1018) xor d(1017) xor d(1016) xor d(1014) xor d(1012) xor d(1010) xor d(1006) xor d(1000) xor d(999) xor d(995) xor d(994) xor d(993) xor d(992) xor d(991) xor d(990) xor d(989) xor d(987) xor d(986) xor d(981) xor d(980) xor d(978) xor d(977) xor d(975) xor d(974) xor d(973) xor d(971) xor d(969) xor d(968) xor d(967) xor d(966) xor d(965) xor d(964) xor d(963) xor d(962) xor d(961) xor d(960) xor d(959) xor d(957) xor d(956) xor d(952) xor d(950) xor d(948) xor d(947) xor d(946) xor d(945) xor d(943) xor d(942) xor d(941) xor d(940) xor d(937) xor d(936) xor d(935) xor d(934) xor d(928) xor d(927) xor d(924) xor d(923) xor d(921) xor d(920) xor d(919) xor d(917) xor d(916) xor d(915) xor d(914) xor d(911) xor d(909) xor d(907) xor d(905) xor d(904) xor d(902) xor d(900) xor d(899) xor d(898) xor d(895) xor d(894) xor d(889) xor d(888) xor d(886) xor d(883) xor d(879) xor d(875) xor d(872) xor d(871) xor d(870) xor d(867) xor d(865) xor d(864) xor d(859) xor d(858) xor d(853) xor d(851) xor d(850) xor d(848) xor d(843) xor d(839) xor d(835) xor d(834) xor d(833) xor d(832) xor d(825) xor d(824) xor d(822) xor d(820) xor d(818) xor d(817) xor d(816) xor d(815) xor d(812) xor d(808) xor d(807) xor d(806) xor d(803) xor d(801) xor d(800) xor d(796) xor d(795) xor d(794) xor d(787) xor d(785) xor d(782) xor d(780) xor d(777) xor d(775) xor d(772) xor d(769) xor d(765) xor d(764) xor d(763) xor d(752) xor d(751) xor d(748) xor d(747) xor d(746) xor d(742) xor d(741) xor d(739) xor d(738) xor d(735) xor d(731) xor d(730) xor d(728) xor d(727) xor d(725) xor d(719) xor d(718) xor d(716) xor d(712) xor d(711) xor d(709) xor d(708) xor d(704) xor d(701) xor d(698) xor d(695) xor d(694) xor d(693) xor d(692) xor d(691) xor d(687) xor d(686) xor d(681) xor d(680) xor d(678) xor d(677) xor d(676) xor d(673) xor d(671) xor d(666) xor d(665) xor d(664) xor d(662) xor d(660) xor d(657) xor d(656) xor d(655) xor d(651) xor d(649) xor d(648) xor d(643) xor d(641) xor d(638) xor d(637) xor d(632) xor d(631) xor d(630) xor d(628) xor d(627) xor d(622) xor d(620) xor d(618) xor d(616) xor d(614) xor d(613) xor d(612) xor d(609) xor d(607) xor d(606) xor d(603) xor d(602) xor d(601) xor d(600) xor d(596) xor d(593) xor d(592) xor d(591) xor d(587) xor d(584) xor d(582) xor d(581) xor d(580) xor d(579) xor d(578) xor d(576) xor d(574) xor d(570) xor d(569) xor d(568) xor d(566) xor d(565) xor d(564) xor d(562) xor d(559) xor d(558) xor d(557) xor d(554) xor d(552) xor d(551) xor d(550) xor d(549) xor d(548) xor d(547) xor d(546) xor d(545) xor d(542) xor d(541) xor d(538) xor d(537) xor d(536) xor d(535) xor d(532) xor d(531) xor d(529) xor d(527) xor d(525) xor d(524) xor d(520) xor d(518) xor d(511) xor d(509) xor d(508) xor d(507) xor d(506) xor d(504) xor d(503) xor d(501) xor d(499) xor d(498) xor d(497) xor d(496) xor d(495) xor d(491) xor d(488) xor d(485) xor d(484) xor d(481) xor d(477) xor d(476) xor d(474) xor d(468) xor d(461) xor d(460) xor d(459) xor d(457) xor d(456) xor d(454) xor d(451) xor d(446) xor d(443) xor d(442) xor d(441) xor d(439) xor d(438) xor d(435) xor d(434) xor d(433) xor d(431) xor d(429) xor d(426) xor d(425) xor d(423) xor d(422) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(410) xor d(409) xor d(408) xor d(407) xor d(406) xor d(398) xor d(397) xor d(395) xor d(394) xor d(391) xor d(389) xor d(388) xor d(386) xor d(385) xor d(384) xor d(383) xor d(381) xor d(380) xor d(373) xor d(371) xor d(369) xor d(366) xor d(365) xor d(363) xor d(359) xor d(357) xor d(355) xor d(351) xor d(350) xor d(349) xor d(345) xor d(344) xor d(343) xor d(342) xor d(340) xor d(339) xor d(338) xor d(337) xor d(332) xor d(331) xor d(329) xor d(326) xor d(323) xor d(322) xor d(321) xor d(318) xor d(309) xor d(307) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(298) xor d(294) xor d(292) xor d(290) xor d(289) xor d(288) xor d(286) xor d(284) xor d(283) xor d(278) xor d(276) xor d(272) xor d(270) xor d(266) xor d(265) xor d(262) xor d(252) xor d(251) xor d(249) xor d(248) xor d(247) xor d(245) xor d(241) xor d(240) xor d(239) xor d(235) xor d(234) xor d(233) xor d(232) xor d(230) xor d(229) xor d(225) xor d(224) xor d(223) xor d(222) xor d(221) xor d(220) xor d(218) xor d(214) xor d(213) xor d(211) xor d(209) xor d(207) xor d(204) xor d(202) xor d(201) xor d(198) xor d(195) xor d(192) xor d(191) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(183) xor d(181) xor d(176) xor d(175) xor d(172) xor d(169) xor d(162) xor d(159) xor d(158) xor d(157) xor d(155) xor d(153) xor d(147) xor d(146) xor d(145) xor d(143) xor d(142) xor d(140) xor d(138) xor d(137) xor d(136) xor d(133) xor d(130) xor d(129) xor d(126) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(113) xor d(112) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(101) xor d(99) xor d(96) xor d(93) xor d(92) xor d(91) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(80) xor d(79) xor d(77) xor d(70) xor d(68) xor d(59) xor d(58) xor d(53) xor d(50) xor d(49) xor d(48) xor d(46) xor d(39) xor d(37) xor d(34) xor d(32) xor d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(0) xor c(1) xor c(2) xor c(3) xor c(7) xor c(8) xor c(14) xor c(18) xor c(20) xor c(22) xor c(24) xor c(25) xor c(26) xor c(28) xor c(30) xor c(31); + newcrc(19) := d(1023) xor d(1021) xor d(1019) xor d(1018) xor d(1017) xor d(1015) xor d(1013) xor d(1011) xor d(1007) xor d(1001) xor d(1000) xor d(996) xor d(995) xor d(994) xor d(993) xor d(992) xor d(991) xor d(990) xor d(988) xor d(987) xor d(982) xor d(981) xor d(979) xor d(978) xor d(976) xor d(975) xor d(974) xor d(972) xor d(970) xor d(969) xor d(968) xor d(967) xor d(966) xor d(965) xor d(964) xor d(963) xor d(962) xor d(961) xor d(960) xor d(958) xor d(957) xor d(953) xor d(951) xor d(949) xor d(948) xor d(947) xor d(946) xor d(944) xor d(943) xor d(942) xor d(941) xor d(938) xor d(937) xor d(936) xor d(935) xor d(929) xor d(928) xor d(925) xor d(924) xor d(922) xor d(921) xor d(920) xor d(918) xor d(917) xor d(916) xor d(915) xor d(912) xor d(910) xor d(908) xor d(906) xor d(905) xor d(903) xor d(901) xor d(900) xor d(899) xor d(896) xor d(895) xor d(890) xor d(889) xor d(887) xor d(884) xor d(880) xor d(876) xor d(873) xor d(872) xor d(871) xor d(868) xor d(866) xor d(865) xor d(860) xor d(859) xor d(854) xor d(852) xor d(851) xor d(849) xor d(844) xor d(840) xor d(836) xor d(835) xor d(834) xor d(833) xor d(826) xor d(825) xor d(823) xor d(821) xor d(819) xor d(818) xor d(817) xor d(816) xor d(813) xor d(809) xor d(808) xor d(807) xor d(804) xor d(802) xor d(801) xor d(797) xor d(796) xor d(795) xor d(788) xor d(786) xor d(783) xor d(781) xor d(778) xor d(776) xor d(773) xor d(770) xor d(766) xor d(765) xor d(764) xor d(753) xor d(752) xor d(749) xor d(748) xor d(747) xor d(743) xor d(742) xor d(740) xor d(739) xor d(736) xor d(732) xor d(731) xor d(729) xor d(728) xor d(726) xor d(720) xor d(719) xor d(717) xor d(713) xor d(712) xor d(710) xor d(709) xor d(705) xor d(702) xor d(699) xor d(696) xor d(695) xor d(694) xor d(693) xor d(692) xor d(688) xor d(687) xor d(682) xor d(681) xor d(679) xor d(678) xor d(677) xor d(674) xor d(672) xor d(667) xor d(666) xor d(665) xor d(663) xor d(661) xor d(658) xor d(657) xor d(656) xor d(652) xor d(650) xor d(649) xor d(644) xor d(642) xor d(639) xor d(638) xor d(633) xor d(632) xor d(631) xor d(629) xor d(628) xor d(623) xor d(621) xor d(619) xor d(617) xor d(615) xor d(614) xor d(613) xor d(610) xor d(608) xor d(607) xor d(604) xor d(603) xor d(602) xor d(601) xor d(597) xor d(594) xor d(593) xor d(592) xor d(588) xor d(585) xor d(583) xor d(582) xor d(581) xor d(580) xor d(579) xor d(577) xor d(575) xor d(571) xor d(570) xor d(569) xor d(567) xor d(566) xor d(565) xor d(563) xor d(560) xor d(559) xor d(558) xor d(555) xor d(553) xor d(552) xor d(551) xor d(550) xor d(549) xor d(548) xor d(547) xor d(546) xor d(543) xor d(542) xor d(539) xor d(538) xor d(537) xor d(536) xor d(533) xor d(532) xor d(530) xor d(528) xor d(526) xor d(525) xor d(521) xor d(519) xor d(512) xor d(510) xor d(509) xor d(508) xor d(507) xor d(505) xor d(504) xor d(502) xor d(500) xor d(499) xor d(498) xor d(497) xor d(496) xor d(492) xor d(489) xor d(486) xor d(485) xor d(482) xor d(478) xor d(477) xor d(475) xor d(469) xor d(462) xor d(461) xor d(460) xor d(458) xor d(457) xor d(455) xor d(452) xor d(447) xor d(444) xor d(443) xor d(442) xor d(440) xor d(439) xor d(436) xor d(435) xor d(434) xor d(432) xor d(430) xor d(427) xor d(426) xor d(424) xor d(423) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(411) xor d(410) xor d(409) xor d(408) xor d(407) xor d(399) xor d(398) xor d(396) xor d(395) xor d(392) xor d(390) xor d(389) xor d(387) xor d(386) xor d(385) xor d(384) xor d(382) xor d(381) xor d(374) xor d(372) xor d(370) xor d(367) xor d(366) xor d(364) xor d(360) xor d(358) xor d(356) xor d(352) xor d(351) xor d(350) xor d(346) xor d(345) xor d(344) xor d(343) xor d(341) xor d(340) xor d(339) xor d(338) xor d(333) xor d(332) xor d(330) xor d(327) xor d(324) xor d(323) xor d(322) xor d(319) xor d(310) xor d(308) xor d(306) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(295) xor d(293) xor d(291) xor d(290) xor d(289) xor d(287) xor d(285) xor d(284) xor d(279) xor d(277) xor d(273) xor d(271) xor d(267) xor d(266) xor d(263) xor d(253) xor d(252) xor d(250) xor d(249) xor d(248) xor d(246) xor d(242) xor d(241) xor d(240) xor d(236) xor d(235) xor d(234) xor d(233) xor d(231) xor d(230) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(221) xor d(219) xor d(215) xor d(214) xor d(212) xor d(210) xor d(208) xor d(205) xor d(203) xor d(202) xor d(199) xor d(196) xor d(193) xor d(192) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(177) xor d(176) xor d(173) xor d(170) xor d(163) xor d(160) xor d(159) xor d(158) xor d(156) xor d(154) xor d(148) xor d(147) xor d(146) xor d(144) xor d(143) xor d(141) xor d(139) xor d(138) xor d(137) xor d(134) xor d(131) xor d(130) xor d(127) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(114) xor d(113) xor d(112) xor d(108) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(100) xor d(97) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(87) xor d(86) xor d(85) xor d(81) xor d(80) xor d(78) xor d(71) xor d(69) xor d(60) xor d(59) xor d(54) xor d(51) xor d(50) xor d(49) xor d(47) xor d(40) xor d(38) xor d(35) xor d(33) xor d(32) xor d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(8) xor c(9) xor c(15) xor c(19) xor c(21) xor c(23) xor c(25) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(20) := d(1022) xor d(1020) xor d(1019) xor d(1018) xor d(1016) xor d(1014) xor d(1012) xor d(1008) xor d(1002) xor d(1001) xor d(997) xor d(996) xor d(995) xor d(994) xor d(993) xor d(992) xor d(991) xor d(989) xor d(988) xor d(983) xor d(982) xor d(980) xor d(979) xor d(977) xor d(976) xor d(975) xor d(973) xor d(971) xor d(970) xor d(969) xor d(968) xor d(967) xor d(966) xor d(965) xor d(964) xor d(963) xor d(962) xor d(961) xor d(959) xor d(958) xor d(954) xor d(952) xor d(950) xor d(949) xor d(948) xor d(947) xor d(945) xor d(944) xor d(943) xor d(942) xor d(939) xor d(938) xor d(937) xor d(936) xor d(930) xor d(929) xor d(926) xor d(925) xor d(923) xor d(922) xor d(921) xor d(919) xor d(918) xor d(917) xor d(916) xor d(913) xor d(911) xor d(909) xor d(907) xor d(906) xor d(904) xor d(902) xor d(901) xor d(900) xor d(897) xor d(896) xor d(891) xor d(890) xor d(888) xor d(885) xor d(881) xor d(877) xor d(874) xor d(873) xor d(872) xor d(869) xor d(867) xor d(866) xor d(861) xor d(860) xor d(855) xor d(853) xor d(852) xor d(850) xor d(845) xor d(841) xor d(837) xor d(836) xor d(835) xor d(834) xor d(827) xor d(826) xor d(824) xor d(822) xor d(820) xor d(819) xor d(818) xor d(817) xor d(814) xor d(810) xor d(809) xor d(808) xor d(805) xor d(803) xor d(802) xor d(798) xor d(797) xor d(796) xor d(789) xor d(787) xor d(784) xor d(782) xor d(779) xor d(777) xor d(774) xor d(771) xor d(767) xor d(766) xor d(765) xor d(754) xor d(753) xor d(750) xor d(749) xor d(748) xor d(744) xor d(743) xor d(741) xor d(740) xor d(737) xor d(733) xor d(732) xor d(730) xor d(729) xor d(727) xor d(721) xor d(720) xor d(718) xor d(714) xor d(713) xor d(711) xor d(710) xor d(706) xor d(703) xor d(700) xor d(697) xor d(696) xor d(695) xor d(694) xor d(693) xor d(689) xor d(688) xor d(683) xor d(682) xor d(680) xor d(679) xor d(678) xor d(675) xor d(673) xor d(668) xor d(667) xor d(666) xor d(664) xor d(662) xor d(659) xor d(658) xor d(657) xor d(653) xor d(651) xor d(650) xor d(645) xor d(643) xor d(640) xor d(639) xor d(634) xor d(633) xor d(632) xor d(630) xor d(629) xor d(624) xor d(622) xor d(620) xor d(618) xor d(616) xor d(615) xor d(614) xor d(611) xor d(609) xor d(608) xor d(605) xor d(604) xor d(603) xor d(602) xor d(598) xor d(595) xor d(594) xor d(593) xor d(589) xor d(586) xor d(584) xor d(583) xor d(582) xor d(581) xor d(580) xor d(578) xor d(576) xor d(572) xor d(571) xor d(570) xor d(568) xor d(567) xor d(566) xor d(564) xor d(561) xor d(560) xor d(559) xor d(556) xor d(554) xor d(553) xor d(552) xor d(551) xor d(550) xor d(549) xor d(548) xor d(547) xor d(544) xor d(543) xor d(540) xor d(539) xor d(538) xor d(537) xor d(534) xor d(533) xor d(531) xor d(529) xor d(527) xor d(526) xor d(522) xor d(520) xor d(513) xor d(511) xor d(510) xor d(509) xor d(508) xor d(506) xor d(505) xor d(503) xor d(501) xor d(500) xor d(499) xor d(498) xor d(497) xor d(493) xor d(490) xor d(487) xor d(486) xor d(483) xor d(479) xor d(478) xor d(476) xor d(470) xor d(463) xor d(462) xor d(461) xor d(459) xor d(458) xor d(456) xor d(453) xor d(448) xor d(445) xor d(444) xor d(443) xor d(441) xor d(440) xor d(437) xor d(436) xor d(435) xor d(433) xor d(431) xor d(428) xor d(427) xor d(425) xor d(424) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(412) xor d(411) xor d(410) xor d(409) xor d(408) xor d(400) xor d(399) xor d(397) xor d(396) xor d(393) xor d(391) xor d(390) xor d(388) xor d(387) xor d(386) xor d(385) xor d(383) xor d(382) xor d(375) xor d(373) xor d(371) xor d(368) xor d(367) xor d(365) xor d(361) xor d(359) xor d(357) xor d(353) xor d(352) xor d(351) xor d(347) xor d(346) xor d(345) xor d(344) xor d(342) xor d(341) xor d(340) xor d(339) xor d(334) xor d(333) xor d(331) xor d(328) xor d(325) xor d(324) xor d(323) xor d(320) xor d(311) xor d(309) xor d(307) xor d(306) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(296) xor d(294) xor d(292) xor d(291) xor d(290) xor d(288) xor d(286) xor d(285) xor d(280) xor d(278) xor d(274) xor d(272) xor d(268) xor d(267) xor d(264) xor d(254) xor d(253) xor d(251) xor d(250) xor d(249) xor d(247) xor d(243) xor d(242) xor d(241) xor d(237) xor d(236) xor d(235) xor d(234) xor d(232) xor d(231) xor d(227) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(220) xor d(216) xor d(215) xor d(213) xor d(211) xor d(209) xor d(206) xor d(204) xor d(203) xor d(200) xor d(197) xor d(194) xor d(193) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(178) xor d(177) xor d(174) xor d(171) xor d(164) xor d(161) xor d(160) xor d(159) xor d(157) xor d(155) xor d(149) xor d(148) xor d(147) xor d(145) xor d(144) xor d(142) xor d(140) xor d(139) xor d(138) xor d(135) xor d(132) xor d(131) xor d(128) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(107) xor d(106) xor d(104) xor d(103) xor d(101) xor d(98) xor d(95) xor d(94) xor d(93) xor d(91) xor d(90) xor d(88) xor d(87) xor d(86) xor d(82) xor d(81) xor d(79) xor d(72) xor d(70) xor d(61) xor d(60) xor d(55) xor d(52) xor d(51) xor d(50) xor d(48) xor d(41) xor d(39) xor d(36) xor d(34) xor d(33) xor d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(9) xor c(10) xor c(16) xor c(20) xor c(22) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30); + newcrc(21) := d(1023) xor d(1021) xor d(1020) xor d(1019) xor d(1017) xor d(1015) xor d(1013) xor d(1009) xor d(1003) xor d(1002) xor d(998) xor d(997) xor d(996) xor d(995) xor d(994) xor d(993) xor d(992) xor d(990) xor d(989) xor d(984) xor d(983) xor d(981) xor d(980) xor d(978) xor d(977) xor d(976) xor d(974) xor d(972) xor d(971) xor d(970) xor d(969) xor d(968) xor d(967) xor d(966) xor d(965) xor d(964) xor d(963) xor d(962) xor d(960) xor d(959) xor d(955) xor d(953) xor d(951) xor d(950) xor d(949) xor d(948) xor d(946) xor d(945) xor d(944) xor d(943) xor d(940) xor d(939) xor d(938) xor d(937) xor d(931) xor d(930) xor d(927) xor d(926) xor d(924) xor d(923) xor d(922) xor d(920) xor d(919) xor d(918) xor d(917) xor d(914) xor d(912) xor d(910) xor d(908) xor d(907) xor d(905) xor d(903) xor d(902) xor d(901) xor d(898) xor d(897) xor d(892) xor d(891) xor d(889) xor d(886) xor d(882) xor d(878) xor d(875) xor d(874) xor d(873) xor d(870) xor d(868) xor d(867) xor d(862) xor d(861) xor d(856) xor d(854) xor d(853) xor d(851) xor d(846) xor d(842) xor d(838) xor d(837) xor d(836) xor d(835) xor d(828) xor d(827) xor d(825) xor d(823) xor d(821) xor d(820) xor d(819) xor d(818) xor d(815) xor d(811) xor d(810) xor d(809) xor d(806) xor d(804) xor d(803) xor d(799) xor d(798) xor d(797) xor d(790) xor d(788) xor d(785) xor d(783) xor d(780) xor d(778) xor d(775) xor d(772) xor d(768) xor d(767) xor d(766) xor d(755) xor d(754) xor d(751) xor d(750) xor d(749) xor d(745) xor d(744) xor d(742) xor d(741) xor d(738) xor d(734) xor d(733) xor d(731) xor d(730) xor d(728) xor d(722) xor d(721) xor d(719) xor d(715) xor d(714) xor d(712) xor d(711) xor d(707) xor d(704) xor d(701) xor d(698) xor d(697) xor d(696) xor d(695) xor d(694) xor d(690) xor d(689) xor d(684) xor d(683) xor d(681) xor d(680) xor d(679) xor d(676) xor d(674) xor d(669) xor d(668) xor d(667) xor d(665) xor d(663) xor d(660) xor d(659) xor d(658) xor d(654) xor d(652) xor d(651) xor d(646) xor d(644) xor d(641) xor d(640) xor d(635) xor d(634) xor d(633) xor d(631) xor d(630) xor d(625) xor d(623) xor d(621) xor d(619) xor d(617) xor d(616) xor d(615) xor d(612) xor d(610) xor d(609) xor d(606) xor d(605) xor d(604) xor d(603) xor d(599) xor d(596) xor d(595) xor d(594) xor d(590) xor d(587) xor d(585) xor d(584) xor d(583) xor d(582) xor d(581) xor d(579) xor d(577) xor d(573) xor d(572) xor d(571) xor d(569) xor d(568) xor d(567) xor d(565) xor d(562) xor d(561) xor d(560) xor d(557) xor d(555) xor d(554) xor d(553) xor d(552) xor d(551) xor d(550) xor d(549) xor d(548) xor d(545) xor d(544) xor d(541) xor d(540) xor d(539) xor d(538) xor d(535) xor d(534) xor d(532) xor d(530) xor d(528) xor d(527) xor d(523) xor d(521) xor d(514) xor d(512) xor d(511) xor d(510) xor d(509) xor d(507) xor d(506) xor d(504) xor d(502) xor d(501) xor d(500) xor d(499) xor d(498) xor d(494) xor d(491) xor d(488) xor d(487) xor d(484) xor d(480) xor d(479) xor d(477) xor d(471) xor d(464) xor d(463) xor d(462) xor d(460) xor d(459) xor d(457) xor d(454) xor d(449) xor d(446) xor d(445) xor d(444) xor d(442) xor d(441) xor d(438) xor d(437) xor d(436) xor d(434) xor d(432) xor d(429) xor d(428) xor d(426) xor d(425) xor d(421) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(413) xor d(412) xor d(411) xor d(410) xor d(409) xor d(401) xor d(400) xor d(398) xor d(397) xor d(394) xor d(392) xor d(391) xor d(389) xor d(388) xor d(387) xor d(386) xor d(384) xor d(383) xor d(376) xor d(374) xor d(372) xor d(369) xor d(368) xor d(366) xor d(362) xor d(360) xor d(358) xor d(354) xor d(353) xor d(352) xor d(348) xor d(347) xor d(346) xor d(345) xor d(343) xor d(342) xor d(341) xor d(340) xor d(335) xor d(334) xor d(332) xor d(329) xor d(326) xor d(325) xor d(324) xor d(321) xor d(312) xor d(310) xor d(308) xor d(307) xor d(306) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(297) xor d(295) xor d(293) xor d(292) xor d(291) xor d(289) xor d(287) xor d(286) xor d(281) xor d(279) xor d(275) xor d(273) xor d(269) xor d(268) xor d(265) xor d(255) xor d(254) xor d(252) xor d(251) xor d(250) xor d(248) xor d(244) xor d(243) xor d(242) xor d(238) xor d(237) xor d(236) xor d(235) xor d(233) xor d(232) xor d(228) xor d(227) xor d(226) xor d(225) xor d(224) xor d(223) xor d(221) xor d(217) xor d(216) xor d(214) xor d(212) xor d(210) xor d(207) xor d(205) xor d(204) xor d(201) xor d(198) xor d(195) xor d(194) xor d(191) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(179) xor d(178) xor d(175) xor d(172) xor d(165) xor d(162) xor d(161) xor d(160) xor d(158) xor d(156) xor d(150) xor d(149) xor d(148) xor d(146) xor d(145) xor d(143) xor d(141) xor d(140) xor d(139) xor d(136) xor d(133) xor d(132) xor d(129) xor d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(120) xor d(117) xor d(116) xor d(115) xor d(114) xor d(110) xor d(109) xor d(108) xor d(107) xor d(105) xor d(104) xor d(102) xor d(99) xor d(96) xor d(95) xor d(94) xor d(92) xor d(91) xor d(89) xor d(88) xor d(87) xor d(83) xor d(82) xor d(80) xor d(73) xor d(71) xor d(62) xor d(61) xor d(56) xor d(53) xor d(52) xor d(51) xor d(49) xor d(42) xor d(40) xor d(37) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(10) xor c(11) xor c(17) xor c(21) xor c(23) xor c(25) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(22) := d(1022) xor d(1020) xor d(1019) xor d(1015) xor d(1014) xor d(1012) xor d(1011) xor d(1010) xor d(1009) xor d(1008) xor d(1006) xor d(1005) xor d(1003) xor d(1000) xor d(997) xor d(995) xor d(993) xor d(992) xor d(991) xor d(983) xor d(980) xor d(974) xor d(973) xor d(972) xor d(970) xor d(969) xor d(968) xor d(966) xor d(965) xor d(964) xor d(963) xor d(961) xor d(959) xor d(958) xor d(956) xor d(955) xor d(953) xor d(952) xor d(951) xor d(949) xor d(948) xor d(947) xor d(946) xor d(945) xor d(940) xor d(935) xor d(934) xor d(933) xor d(932) xor d(928) xor d(927) xor d(925) xor d(924) xor d(923) xor d(921) xor d(919) xor d(917) xor d(913) xor d(911) xor d(910) xor d(909) xor d(908) xor d(907) xor d(901) xor d(900) xor d(897) xor d(896) xor d(892) xor d(891) xor d(889) xor d(886) xor d(881) xor d(878) xor d(877) xor d(873) xor d(867) xor d(862) xor d(861) xor d(860) xor d(859) xor d(855) xor d(853) xor d(852) xor d(851) xor d(850) xor d(849) xor d(848) xor d(847) xor d(846) xor d(843) xor d(842) xor d(840) xor d(838) xor d(836) xor d(835) xor d(834) xor d(832) xor d(829) xor d(828) xor d(827) xor d(826) xor d(825) xor d(822) xor d(821) xor d(820) xor d(818) xor d(815) xor d(814) xor d(813) xor d(809) xor d(808) xor d(806) xor d(805) xor d(803) xor d(802) xor d(799) xor d(793) xor d(789) xor d(788) xor d(785) xor d(782) xor d(781) xor d(780) xor d(779) xor d(774) xor d(773) xor d(768) xor d(765) xor d(763) xor d(762) xor d(758) xor d(753) xor d(752) xor d(751) xor d(748) xor d(747) xor d(746) xor d(745) xor d(744) xor d(743) xor d(741) xor d(740) xor d(739) xor d(736) xor d(735) xor d(734) xor d(727) xor d(725) xor d(724) xor d(721) xor d(719) xor d(716) xor d(713) xor d(712) xor d(710) xor d(707) xor d(705) xor d(704) xor d(701) xor d(700) xor d(699) xor d(697) xor d(696) xor d(694) xor d(693) xor d(690) xor d(689) xor d(687) xor d(686) xor d(685) xor d(684) xor d(682) xor d(681) xor d(677) xor d(674) xor d(673) xor d(672) xor d(667) xor d(665) xor d(664) xor d(661) xor d(660) xor d(659) xor d(658) xor d(656) xor d(649) xor d(648) xor d(647) xor d(646) xor d(645) xor d(644) xor d(641) xor d(640) xor d(635) xor d(634) xor d(631) xor d(630) xor d(629) xor d(623) xor d(622) xor d(619) xor d(618) xor d(616) xor d(615) xor d(612) xor d(609) xor d(605) xor d(603) xor d(602) xor d(599) xor d(597) xor d(593) xor d(592) xor d(588) xor d(587) xor d(584) xor d(582) xor d(575) xor d(572) xor d(571) xor d(570) xor d(569) xor d(568) xor d(567) xor d(566) xor d(565) xor d(562) xor d(560) xor d(557) xor d(553) xor d(552) xor d(550) xor d(546) xor d(541) xor d(536) xor d(534) xor d(533) xor d(532) xor d(530) xor d(526) xor d(525) xor d(524) xor d(521) xor d(519) xor d(518) xor d(516) xor d(515) xor d(514) xor d(513) xor d(506) xor d(505) xor d(503) xor d(499) xor d(494) xor d(493) xor d(491) xor d(490) xor d(486) xor d(485) xor d(483) xor d(482) xor d(479) xor d(478) xor d(477) xor d(476) xor d(470) xor d(468) xor d(463) xor d(462) xor d(460) xor d(455) xor d(452) xor d(449) xor d(448) xor d(447) xor d(446) xor d(445) xor d(444) xor d(443) xor d(442) xor d(439) xor d(438) xor d(436) xor d(435) xor d(434) xor d(430) xor d(429) xor d(427) xor d(426) xor d(424) xor d(421) xor d(420) xor d(417) xor d(413) xor d(411) xor d(410) xor d(409) xor d(408) xor d(407) xor d(405) xor d(404) xor d(402) xor d(401) xor d(400) xor d(396) xor d(395) xor d(391) xor d(389) xor d(386) xor d(385) xor d(384) xor d(381) xor d(378) xor d(377) xor d(376) xor d(375) xor d(374) xor d(373) xor d(372) xor d(370) xor d(368) xor d(367) xor d(366) xor d(362) xor d(361) xor d(358) xor d(357) xor d(355) xor d(354) xor d(346) xor d(345) xor d(343) xor d(339) xor d(338) xor d(337) xor d(336) xor d(334) xor d(330) xor d(328) xor d(326) xor d(325) xor d(321) xor d(320) xor d(319) xor d(318) xor d(317) xor d(315) xor d(313) xor d(312) xor d(311) xor d(310) xor d(308) xor d(307) xor d(306) xor d(304) xor d(300) xor d(299) xor d(297) xor d(295) xor d(293) xor d(286) xor d(283) xor d(282) xor d(280) xor d(279) xor d(277) xor d(273) xor d(270) xor d(268) xor d(266) xor d(265) xor d(264) xor d(261) xor d(259) xor d(257) xor d(256) xor d(253) xor d(251) xor d(249) xor d(248) xor d(245) xor d(244) xor d(239) xor d(238) xor d(236) xor d(233) xor d(230) xor d(229) xor d(225) xor d(222) xor d(218) xor d(217) xor d(216) xor d(215) xor d(214) xor d(213) xor d(212) xor d(211) xor d(210) xor d(209) xor d(207) xor d(206) xor d(205) xor d(203) xor d(201) xor d(198) xor d(197) xor d(196) xor d(195) xor d(194) xor d(193) xor d(189) xor d(187) xor d(186) xor d(185) xor d(183) xor d(182) xor d(180) xor d(179) xor d(176) xor d(173) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(163) xor d(159) xor d(158) xor d(157) xor d(156) xor d(155) xor d(150) xor d(147) xor d(146) xor d(143) xor d(142) xor d(141) xor d(140) xor d(136) xor d(135) xor d(133) xor d(132) xor d(130) xor d(128) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(98) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(88) xor d(87) xor d(85) xor d(82) xor d(79) xor d(74) xor d(73) xor d(68) xor d(67) xor d(66) xor d(65) xor d(62) xor d(61) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(0) xor c(1) xor c(3) xor c(5) xor c(8) xor c(11) xor c(13) xor c(14) xor c(16) xor c(17) xor c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(27) xor c(28) xor c(30); + newcrc(23) := d(1023) xor d(1020) xor d(1019) xor d(1018) xor d(1013) xor d(1010) xor d(1008) xor d(1007) xor d(1005) xor d(1001) xor d(1000) xor d(999) xor d(993) xor d(990) xor d(985) xor d(983) xor d(982) xor d(980) xor d(979) xor d(978) xor d(977) xor d(973) xor d(970) xor d(969) xor d(966) xor d(965) xor d(964) xor d(962) xor d(958) xor d(957) xor d(956) xor d(955) xor d(952) xor d(949) xor d(947) xor d(946) xor d(944) xor d(939) xor d(938) xor d(936) xor d(931) xor d(929) xor d(928) xor d(926) xor d(925) xor d(924) xor d(922) xor d(917) xor d(915) xor d(914) xor d(912) xor d(911) xor d(909) xor d(908) xor d(907) xor d(906) xor d(904) xor d(903) xor d(900) xor d(899) xor d(896) xor d(892) xor d(891) xor d(889) xor d(886) xor d(883) xor d(882) xor d(881) xor d(877) xor d(876) xor d(875) xor d(873) xor d(871) xor d(869) xor d(867) xor d(862) xor d(859) xor d(857) xor d(856) xor d(852) xor d(847) xor d(846) xor d(844) xor d(843) xor d(842) xor d(841) xor d(840) xor d(836) xor d(834) xor d(833) xor d(832) xor d(830) xor d(829) xor d(828) xor d(826) xor d(825) xor d(824) xor d(823) xor d(822) xor d(821) xor d(818) xor d(813) xor d(812) xor d(811) xor d(808) xor d(802) xor d(798) xor d(794) xor d(793) xor d(791) xor d(790) xor d(789) xor d(788) xor d(785) xor d(784) xor d(783) xor d(781) xor d(776) xor d(775) xor d(767) xor d(766) xor d(765) xor d(764) xor d(762) xor d(759) xor d(758) xor d(756) xor d(755) xor d(754) xor d(752) xor d(750) xor d(749) xor d(746) xor d(745) xor d(737) xor d(735) xor d(732) xor d(731) xor d(729) xor d(728) xor d(727) xor d(726) xor d(724) xor d(723) xor d(721) xor d(719) xor d(717) xor d(715) xor d(714) xor d(713) xor d(711) xor d(710) xor d(707) xor d(706) xor d(705) xor d(704) xor d(697) xor d(693) xor d(690) xor d(689) xor d(688) xor d(685) xor d(683) xor d(682) xor d(680) xor d(678) xor d(672) xor d(670) xor d(669) xor d(667) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(657) xor d(656) xor d(655) xor d(653) xor d(652) xor d(650) xor d(647) xor d(645) xor d(644) xor d(641) xor d(640) xor d(635) xor d(631) xor d(629) xor d(626) xor d(616) xor d(615) xor d(612) xor d(611) xor d(609) xor d(607) xor d(602) xor d(599) xor d(598) xor d(596) xor d(595) xor d(594) xor d(592) xor d(591) xor d(589) xor d(588) xor d(587) xor d(586) xor d(580) xor d(578) xor d(576) xor d(575) xor d(574) xor d(572) xor d(570) xor d(569) xor d(568) xor d(566) xor d(565) xor d(560) xor d(557) xor d(556) xor d(555) xor d(553) xor d(549) xor d(547) xor d(545) xor d(540) xor d(539) xor d(537) xor d(533) xor d(532) xor d(530) xor d(529) xor d(528) xor d(527) xor d(521) xor d(520) xor d(518) xor d(517) xor d(515) xor d(512) xor d(511) xor d(510) xor d(508) xor d(504) xor d(502) xor d(501) xor d(493) xor d(490) xor d(489) xor d(488) xor d(487) xor d(484) xor d(482) xor d(481) xor d(478) xor d(476) xor d(472) xor d(471) xor d(470) xor d(469) xor d(468) xor d(465) xor d(463) xor d(462) xor d(458) xor d(456) xor d(453) xor d(452) xor d(447) xor d(446) xor d(445) xor d(443) xor d(440) xor d(439) xor d(435) xor d(434) xor d(433) xor d(431) xor d(430) xor d(428) xor d(427) xor d(425) xor d(424) xor d(421) xor d(419) xor d(416) xor d(411) xor d(410) xor d(407) xor d(406) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(399) xor d(398) xor d(397) xor d(393) xor d(391) xor d(388) xor d(385) xor d(382) xor d(381) xor d(379) xor d(377) xor d(375) xor d(373) xor d(372) xor d(371) xor d(367) xor d(366) xor d(357) xor d(356) xor d(355) xor d(353) xor d(349) xor d(348) xor d(346) xor d(345) xor d(342) xor d(341) xor d(340) xor d(334) xor d(333) xor d(331) xor d(329) xor d(328) xor d(326) xor d(317) xor d(316) xor d(315) xor d(314) xor d(313) xor d(311) xor d(310) xor d(308) xor d(307) xor d(303) xor d(302) xor d(301) xor d(299) xor d(297) xor d(295) xor d(292) xor d(290) xor d(288) xor d(286) xor d(284) xor d(281) xor d(280) xor d(279) xor d(278) xor d(277) xor d(276) xor d(273) xor d(271) xor d(268) xor d(267) xor d(266) xor d(264) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(255) xor d(254) xor d(250) xor d(249) xor d(248) xor d(246) xor d(245) xor d(243) xor d(240) xor d(239) xor d(231) xor d(228) xor d(227) xor d(224) xor d(223) xor d(219) xor d(218) xor d(217) xor d(215) xor d(213) xor d(211) xor d(209) xor d(206) xor d(204) xor d(203) xor d(201) xor d(196) xor d(195) xor d(193) xor d(192) xor d(191) xor d(187) xor d(184) xor d(182) xor d(181) xor d(180) xor d(177) xor d(174) xor d(173) xor d(169) xor d(168) xor d(167) xor d(166) xor d(164) xor d(162) xor d(161) xor d(160) xor d(159) xor d(157) xor d(155) xor d(149) xor d(148) xor d(147) xor d(142) xor d(141) xor d(135) xor d(133) xor d(132) xor d(131) xor d(129) xor d(128) xor d(127) xor d(126) xor d(124) xor d(122) xor d(120) xor d(119) xor d(118) xor d(117) xor d(115) xor d(113) xor d(111) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(93) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(75) xor d(74) xor d(73) xor d(72) xor d(69) xor d(65) xor d(62) xor d(60) xor d(59) xor d(56) xor d(55) xor d(54) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(1) xor c(7) xor c(8) xor c(9) xor c(13) xor c(15) xor c(16) xor c(18) xor c(21) xor c(26) xor c(27) xor c(28) xor c(31); + newcrc(24) := d(1021) xor d(1020) xor d(1019) xor d(1014) xor d(1011) xor d(1009) xor d(1008) xor d(1006) xor d(1002) xor d(1001) xor d(1000) xor d(994) xor d(991) xor d(986) xor d(984) xor d(983) xor d(981) xor d(980) xor d(979) xor d(978) xor d(974) xor d(971) xor d(970) xor d(967) xor d(966) xor d(965) xor d(963) xor d(959) xor d(958) xor d(957) xor d(956) xor d(953) xor d(950) xor d(948) xor d(947) xor d(945) xor d(940) xor d(939) xor d(937) xor d(932) xor d(930) xor d(929) xor d(927) xor d(926) xor d(925) xor d(923) xor d(918) xor d(916) xor d(915) xor d(913) xor d(912) xor d(910) xor d(909) xor d(908) xor d(907) xor d(905) xor d(904) xor d(901) xor d(900) xor d(897) xor d(893) xor d(892) xor d(890) xor d(887) xor d(884) xor d(883) xor d(882) xor d(878) xor d(877) xor d(876) xor d(874) xor d(872) xor d(870) xor d(868) xor d(863) xor d(860) xor d(858) xor d(857) xor d(853) xor d(848) xor d(847) xor d(845) xor d(844) xor d(843) xor d(842) xor d(841) xor d(837) xor d(835) xor d(834) xor d(833) xor d(831) xor d(830) xor d(829) xor d(827) xor d(826) xor d(825) xor d(824) xor d(823) xor d(822) xor d(819) xor d(814) xor d(813) xor d(812) xor d(809) xor d(803) xor d(799) xor d(795) xor d(794) xor d(792) xor d(791) xor d(790) xor d(789) xor d(786) xor d(785) xor d(784) xor d(782) xor d(777) xor d(776) xor d(768) xor d(767) xor d(766) xor d(765) xor d(763) xor d(760) xor d(759) xor d(757) xor d(756) xor d(755) xor d(753) xor d(751) xor d(750) xor d(747) xor d(746) xor d(738) xor d(736) xor d(733) xor d(732) xor d(730) xor d(729) xor d(728) xor d(727) xor d(725) xor d(724) xor d(722) xor d(720) xor d(718) xor d(716) xor d(715) xor d(714) xor d(712) xor d(711) xor d(708) xor d(707) xor d(706) xor d(705) xor d(698) xor d(694) xor d(691) xor d(690) xor d(689) xor d(686) xor d(684) xor d(683) xor d(681) xor d(679) xor d(673) xor d(671) xor d(670) xor d(668) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(657) xor d(656) xor d(654) xor d(653) xor d(651) xor d(648) xor d(646) xor d(645) xor d(642) xor d(641) xor d(636) xor d(632) xor d(630) xor d(627) xor d(617) xor d(616) xor d(613) xor d(612) xor d(610) xor d(608) xor d(603) xor d(600) xor d(599) xor d(597) xor d(596) xor d(595) xor d(593) xor d(592) xor d(590) xor d(589) xor d(588) xor d(587) xor d(581) xor d(579) xor d(577) xor d(576) xor d(575) xor d(573) xor d(571) xor d(570) xor d(569) xor d(567) xor d(566) xor d(561) xor d(558) xor d(557) xor d(556) xor d(554) xor d(550) xor d(548) xor d(546) xor d(541) xor d(540) xor d(538) xor d(534) xor d(533) xor d(531) xor d(530) xor d(529) xor d(528) xor d(522) xor d(521) xor d(519) xor d(518) xor d(516) xor d(513) xor d(512) xor d(511) xor d(509) xor d(505) xor d(503) xor d(502) xor d(494) xor d(491) xor d(490) xor d(489) xor d(488) xor d(485) xor d(483) xor d(482) xor d(479) xor d(477) xor d(473) xor d(472) xor d(471) xor d(470) xor d(469) xor d(466) xor d(464) xor d(463) xor d(459) xor d(457) xor d(454) xor d(453) xor d(448) xor d(447) xor d(446) xor d(444) xor d(441) xor d(440) xor d(436) xor d(435) xor d(434) xor d(432) xor d(431) xor d(429) xor d(428) xor d(426) xor d(425) xor d(422) xor d(420) xor d(417) xor d(412) xor d(411) xor d(408) xor d(407) xor d(405) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(399) xor d(398) xor d(394) xor d(392) xor d(389) xor d(386) xor d(383) xor d(382) xor d(380) xor d(378) xor d(376) xor d(374) xor d(373) xor d(372) xor d(368) xor d(367) xor d(358) xor d(357) xor d(356) xor d(354) xor d(350) xor d(349) xor d(347) xor d(346) xor d(343) xor d(342) xor d(341) xor d(335) xor d(334) xor d(332) xor d(330) xor d(329) xor d(327) xor d(318) xor d(317) xor d(316) xor d(315) xor d(314) xor d(312) xor d(311) xor d(309) xor d(308) xor d(304) xor d(303) xor d(302) xor d(300) xor d(298) xor d(296) xor d(293) xor d(291) xor d(289) xor d(287) xor d(285) xor d(282) xor d(281) xor d(280) xor d(279) xor d(278) xor d(277) xor d(274) xor d(272) xor d(269) xor d(268) xor d(267) xor d(265) xor d(263) xor d(262) xor d(261) xor d(260) xor d(259) xor d(256) xor d(255) xor d(251) xor d(250) xor d(249) xor d(247) xor d(246) xor d(244) xor d(241) xor d(240) xor d(232) xor d(229) xor d(228) xor d(225) xor d(224) xor d(220) xor d(219) xor d(218) xor d(216) xor d(214) xor d(212) xor d(210) xor d(207) xor d(205) xor d(204) xor d(202) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(188) xor d(185) xor d(183) xor d(182) xor d(181) xor d(178) xor d(175) xor d(174) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(163) xor d(162) xor d(161) xor d(160) xor d(158) xor d(156) xor d(150) xor d(149) xor d(148) xor d(143) xor d(142) xor d(136) xor d(134) xor d(133) xor d(132) xor d(130) xor d(129) xor d(128) xor d(127) xor d(125) xor d(123) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(112) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(94) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(76) xor d(75) xor d(74) xor d(73) xor d(70) xor d(66) xor d(63) xor d(61) xor d(60) xor d(57) xor d(56) xor d(55) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(40) xor d(39) xor d(37) xor d(36) xor d(35) xor d(32) xor d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(2) xor c(8) xor c(9) xor c(10) xor c(14) xor c(16) xor c(17) xor c(19) xor c(22) xor c(27) xor c(28) xor c(29); + newcrc(25) := d(1022) xor d(1021) xor d(1020) xor d(1015) xor d(1012) xor d(1010) xor d(1009) xor d(1007) xor d(1003) xor d(1002) xor d(1001) xor d(995) xor d(992) xor d(987) xor d(985) xor d(984) xor d(982) xor d(981) xor d(980) xor d(979) xor d(975) xor d(972) xor d(971) xor d(968) xor d(967) xor d(966) xor d(964) xor d(960) xor d(959) xor d(958) xor d(957) xor d(954) xor d(951) xor d(949) xor d(948) xor d(946) xor d(941) xor d(940) xor d(938) xor d(933) xor d(931) xor d(930) xor d(928) xor d(927) xor d(926) xor d(924) xor d(919) xor d(917) xor d(916) xor d(914) xor d(913) xor d(911) xor d(910) xor d(909) xor d(908) xor d(906) xor d(905) xor d(902) xor d(901) xor d(898) xor d(894) xor d(893) xor d(891) xor d(888) xor d(885) xor d(884) xor d(883) xor d(879) xor d(878) xor d(877) xor d(875) xor d(873) xor d(871) xor d(869) xor d(864) xor d(861) xor d(859) xor d(858) xor d(854) xor d(849) xor d(848) xor d(846) xor d(845) xor d(844) xor d(843) xor d(842) xor d(838) xor d(836) xor d(835) xor d(834) xor d(832) xor d(831) xor d(830) xor d(828) xor d(827) xor d(826) xor d(825) xor d(824) xor d(823) xor d(820) xor d(815) xor d(814) xor d(813) xor d(810) xor d(804) xor d(800) xor d(796) xor d(795) xor d(793) xor d(792) xor d(791) xor d(790) xor d(787) xor d(786) xor d(785) xor d(783) xor d(778) xor d(777) xor d(769) xor d(768) xor d(767) xor d(766) xor d(764) xor d(761) xor d(760) xor d(758) xor d(757) xor d(756) xor d(754) xor d(752) xor d(751) xor d(748) xor d(747) xor d(739) xor d(737) xor d(734) xor d(733) xor d(731) xor d(730) xor d(729) xor d(728) xor d(726) xor d(725) xor d(723) xor d(721) xor d(719) xor d(717) xor d(716) xor d(715) xor d(713) xor d(712) xor d(709) xor d(708) xor d(707) xor d(706) xor d(699) xor d(695) xor d(692) xor d(691) xor d(690) xor d(687) xor d(685) xor d(684) xor d(682) xor d(680) xor d(674) xor d(672) xor d(671) xor d(669) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(658) xor d(657) xor d(655) xor d(654) xor d(652) xor d(649) xor d(647) xor d(646) xor d(643) xor d(642) xor d(637) xor d(633) xor d(631) xor d(628) xor d(618) xor d(617) xor d(614) xor d(613) xor d(611) xor d(609) xor d(604) xor d(601) xor d(600) xor d(598) xor d(597) xor d(596) xor d(594) xor d(593) xor d(591) xor d(590) xor d(589) xor d(588) xor d(582) xor d(580) xor d(578) xor d(577) xor d(576) xor d(574) xor d(572) xor d(571) xor d(570) xor d(568) xor d(567) xor d(562) xor d(559) xor d(558) xor d(557) xor d(555) xor d(551) xor d(549) xor d(547) xor d(542) xor d(541) xor d(539) xor d(535) xor d(534) xor d(532) xor d(531) xor d(530) xor d(529) xor d(523) xor d(522) xor d(520) xor d(519) xor d(517) xor d(514) xor d(513) xor d(512) xor d(510) xor d(506) xor d(504) xor d(503) xor d(495) xor d(492) xor d(491) xor d(490) xor d(489) xor d(486) xor d(484) xor d(483) xor d(480) xor d(478) xor d(474) xor d(473) xor d(472) xor d(471) xor d(470) xor d(467) xor d(465) xor d(464) xor d(460) xor d(458) xor d(455) xor d(454) xor d(449) xor d(448) xor d(447) xor d(445) xor d(442) xor d(441) xor d(437) xor d(436) xor d(435) xor d(433) xor d(432) xor d(430) xor d(429) xor d(427) xor d(426) xor d(423) xor d(421) xor d(418) xor d(413) xor d(412) xor d(409) xor d(408) xor d(406) xor d(405) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(399) xor d(395) xor d(393) xor d(390) xor d(387) xor d(384) xor d(383) xor d(381) xor d(379) xor d(377) xor d(375) xor d(374) xor d(373) xor d(369) xor d(368) xor d(359) xor d(358) xor d(357) xor d(355) xor d(351) xor d(350) xor d(348) xor d(347) xor d(344) xor d(343) xor d(342) xor d(336) xor d(335) xor d(333) xor d(331) xor d(330) xor d(328) xor d(319) xor d(318) xor d(317) xor d(316) xor d(315) xor d(313) xor d(312) xor d(310) xor d(309) xor d(305) xor d(304) xor d(303) xor d(301) xor d(299) xor d(297) xor d(294) xor d(292) xor d(290) xor d(288) xor d(286) xor d(283) xor d(282) xor d(281) xor d(280) xor d(279) xor d(278) xor d(275) xor d(273) xor d(270) xor d(269) xor d(268) xor d(266) xor d(264) xor d(263) xor d(262) xor d(261) xor d(260) xor d(257) xor d(256) xor d(252) xor d(251) xor d(250) xor d(248) xor d(247) xor d(245) xor d(242) xor d(241) xor d(233) xor d(230) xor d(229) xor d(226) xor d(225) xor d(221) xor d(220) xor d(219) xor d(217) xor d(215) xor d(213) xor d(211) xor d(208) xor d(206) xor d(205) xor d(203) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(189) xor d(186) xor d(184) xor d(183) xor d(182) xor d(179) xor d(176) xor d(175) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(164) xor d(163) xor d(162) xor d(161) xor d(159) xor d(157) xor d(151) xor d(150) xor d(149) xor d(144) xor d(143) xor d(137) xor d(135) xor d(134) xor d(133) xor d(131) xor d(130) xor d(129) xor d(128) xor d(126) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(100) xor d(99) xor d(98) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(67) xor d(64) xor d(62) xor d(61) xor d(58) xor d(57) xor d(56) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(41) xor d(40) xor d(38) xor d(37) xor d(36) xor d(33) xor d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(0) xor c(3) xor c(9) xor c(10) xor c(11) xor c(15) xor c(17) xor c(18) xor c(20) xor c(23) xor c(28) xor c(29) xor c(30); + newcrc(26) := d(1023) xor d(1022) xor d(1019) xor d(1018) xor d(1015) xor d(1013) xor d(1012) xor d(1010) xor d(1009) xor d(1006) xor d(1005) xor d(1003) xor d(1002) xor d(1000) xor d(999) xor d(998) xor d(994) xor d(993) xor d(992) xor d(990) xor d(988) xor d(986) xor d(984) xor d(979) xor d(978) xor d(977) xor d(976) xor d(975) xor d(974) xor d(973) xor d(972) xor d(971) xor d(969) xor d(968) xor d(965) xor d(961) xor d(954) xor d(953) xor d(952) xor d(949) xor d(948) xor d(947) xor d(944) xor d(942) xor d(938) xor d(935) xor d(933) xor d(932) xor d(929) xor d(928) xor d(927) xor d(925) xor d(914) xor d(912) xor d(911) xor d(909) xor d(904) xor d(901) xor d(900) xor d(898) xor d(897) xor d(896) xor d(895) xor d(894) xor d(893) xor d(892) xor d(891) xor d(890) xor d(887) xor d(885) xor d(884) xor d(883) xor d(881) xor d(880) xor d(877) xor d(875) xor d(873) xor d(872) xor d(871) xor d(870) xor d(869) xor d(868) xor d(867) xor d(865) xor d(863) xor d(862) xor d(861) xor d(857) xor d(855) xor d(854) xor d(853) xor d(851) xor d(848) xor d(847) xor d(845) xor d(844) xor d(843) xor d(842) xor d(840) xor d(836) xor d(834) xor d(833) xor d(831) xor d(829) xor d(828) xor d(826) xor d(821) xor d(819) xor d(818) xor d(813) xor d(812) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(805) xor d(804) xor d(803) xor d(802) xor d(801) xor d(800) xor d(798) xor d(797) xor d(796) xor d(794) xor d(792) xor d(787) xor d(785) xor d(782) xor d(780) xor d(779) xor d(778) xor d(776) xor d(774) xor d(770) xor d(768) xor d(763) xor d(761) xor d(759) xor d(757) xor d(756) xor d(752) xor d(750) xor d(749) xor d(747) xor d(744) xor d(742) xor d(741) xor d(738) xor d(736) xor d(735) xor d(734) xor d(730) xor d(726) xor d(725) xor d(723) xor d(721) xor d(719) xor d(718) xor d(717) xor d(716) xor d(715) xor d(714) xor d(713) xor d(709) xor d(704) xor d(702) xor d(701) xor d(698) xor d(696) xor d(695) xor d(694) xor d(692) xor d(689) xor d(688) xor d(687) xor d(685) xor d(683) xor d(681) xor d(680) xor d(674) xor d(669) xor d(668) xor d(667) xor d(666) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(659) xor d(652) xor d(650) xor d(649) xor d(647) xor d(646) xor d(643) xor d(642) xor d(640) xor d(638) xor d(636) xor d(634) xor d(630) xor d(626) xor d(624) xor d(623) xor d(620) xor d(618) xor d(617) xor d(614) xor d(613) xor d(611) xor d(609) xor d(607) xor d(606) xor d(605) xor d(604) xor d(603) xor d(601) xor d(600) xor d(598) xor d(597) xor d(596) xor d(594) xor d(593) xor d(590) xor d(589) xor d(587) xor d(586) xor d(585) xor d(581) xor d(580) xor d(579) xor d(577) xor d(574) xor d(572) xor d(569) xor d(568) xor d(567) xor d(565) xor d(561) xor d(559) xor d(557) xor d(555) xor d(554) xor d(552) xor d(551) xor d(550) xor d(549) xor d(548) xor d(545) xor d(543) xor d(539) xor d(536) xor d(534) xor d(533) xor d(529) xor d(528) xor d(526) xor d(525) xor d(524) xor d(523) xor d(522) xor d(520) xor d(519) xor d(516) xor d(515) xor d(513) xor d(512) xor d(510) xor d(508) xor d(506) xor d(505) xor d(504) xor d(502) xor d(501) xor d(500) xor d(496) xor d(495) xor d(494) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(484) xor d(483) xor d(482) xor d(480) xor d(477) xor d(476) xor d(475) xor d(474) xor d(473) xor d(471) xor d(470) xor d(466) xor d(464) xor d(462) xor d(459) xor d(458) xor d(456) xor d(455) xor d(452) xor d(446) xor d(444) xor d(443) xor d(442) xor d(438) xor d(431) xor d(430) xor d(428) xor d(427) xor d(418) xor d(416) xor d(413) xor d(412) xor d(410) xor d(408) xor d(406) xor d(403) xor d(402) xor d(401) xor d(399) xor d(398) xor d(394) xor d(393) xor d(392) xor d(390) xor d(387) xor d(386) xor d(385) xor d(384) xor d(382) xor d(381) xor d(380) xor d(375) xor d(372) xor d(370) xor d(368) xor d(366) xor d(363) xor d(362) xor d(360) xor d(357) xor d(356) xor d(353) xor d(352) xor d(351) xor d(347) xor d(343) xor d(342) xor d(341) xor d(339) xor d(338) xor d(336) xor d(335) xor d(333) xor d(332) xor d(331) xor d(329) xor d(328) xor d(327) xor d(322) xor d(321) xor d(316) xor d(315) xor d(314) xor d(313) xor d(312) xor d(311) xor d(309) xor d(306) xor d(304) xor d(303) xor d(299) xor d(297) xor d(296) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(289) xor d(288) xor d(286) xor d(284) xor d(282) xor d(281) xor d(280) xor d(277) xor d(273) xor d(271) xor d(270) xor d(268) xor d(267) xor d(263) xor d(262) xor d(259) xor d(258) xor d(255) xor d(253) xor d(251) xor d(249) xor d(246) xor d(242) xor d(237) xor d(231) xor d(228) xor d(224) xor d(222) xor d(221) xor d(220) xor d(218) xor d(210) xor d(208) xor d(206) xor d(204) xor d(203) xor d(202) xor d(201) xor d(197) xor d(196) xor d(195) xor d(193) xor d(192) xor d(191) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(180) xor d(177) xor d(176) xor d(166) xor d(165) xor d(164) xor d(163) xor d(161) xor d(160) xor d(156) xor d(155) xor d(152) xor d(150) xor d(149) xor d(145) xor d(143) xor d(138) xor d(137) xor d(131) xor d(130) xor d(129) xor d(128) xor d(126) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(112) xor d(111) xor d(110) xor d(108) xor d(107) xor d(105) xor d(104) xor d(100) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(81) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(67) xor d(66) xor d(62) xor d(61) xor d(60) xor d(59) xor d(57) xor d(55) xor d(54) xor d(52) xor d(49) xor d(48) xor d(47) xor d(44) xor d(42) xor d(41) xor d(39) xor d(38) xor d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(0) xor c(1) xor c(2) xor c(6) xor c(7) xor c(8) xor c(10) xor c(11) xor c(13) xor c(14) xor c(17) xor c(18) xor c(20) xor c(21) xor c(23) xor c(26) xor c(27) xor c(30) xor c(31); + newcrc(27) := d(1023) xor d(1020) xor d(1019) xor d(1016) xor d(1014) xor d(1013) xor d(1011) xor d(1010) xor d(1007) xor d(1006) xor d(1004) xor d(1003) xor d(1001) xor d(1000) xor d(999) xor d(995) xor d(994) xor d(993) xor d(991) xor d(989) xor d(987) xor d(985) xor d(980) xor d(979) xor d(978) xor d(977) xor d(976) xor d(975) xor d(974) xor d(973) xor d(972) xor d(970) xor d(969) xor d(966) xor d(962) xor d(955) xor d(954) xor d(953) xor d(950) xor d(949) xor d(948) xor d(945) xor d(943) xor d(939) xor d(936) xor d(934) xor d(933) xor d(930) xor d(929) xor d(928) xor d(926) xor d(915) xor d(913) xor d(912) xor d(910) xor d(905) xor d(902) xor d(901) xor d(899) xor d(898) xor d(897) xor d(896) xor d(895) xor d(894) xor d(893) xor d(892) xor d(891) xor d(888) xor d(886) xor d(885) xor d(884) xor d(882) xor d(881) xor d(878) xor d(876) xor d(874) xor d(873) xor d(872) xor d(871) xor d(870) xor d(869) xor d(868) xor d(866) xor d(864) xor d(863) xor d(862) xor d(858) xor d(856) xor d(855) xor d(854) xor d(852) xor d(849) xor d(848) xor d(846) xor d(845) xor d(844) xor d(843) xor d(841) xor d(837) xor d(835) xor d(834) xor d(832) xor d(830) xor d(829) xor d(827) xor d(822) xor d(820) xor d(819) xor d(814) xor d(813) xor d(811) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(805) xor d(804) xor d(803) xor d(802) xor d(801) xor d(799) xor d(798) xor d(797) xor d(795) xor d(793) xor d(788) xor d(786) xor d(783) xor d(781) xor d(780) xor d(779) xor d(777) xor d(775) xor d(771) xor d(769) xor d(764) xor d(762) xor d(760) xor d(758) xor d(757) xor d(753) xor d(751) xor d(750) xor d(748) xor d(745) xor d(743) xor d(742) xor d(739) xor d(737) xor d(736) xor d(735) xor d(731) xor d(727) xor d(726) xor d(724) xor d(722) xor d(720) xor d(719) xor d(718) xor d(717) xor d(716) xor d(715) xor d(714) xor d(710) xor d(705) xor d(703) xor d(702) xor d(699) xor d(697) xor d(696) xor d(695) xor d(693) xor d(690) xor d(689) xor d(688) xor d(686) xor d(684) xor d(682) xor d(681) xor d(675) xor d(670) xor d(669) xor d(668) xor d(667) xor d(665) xor d(664) xor d(663) xor d(662) xor d(661) xor d(660) xor d(653) xor d(651) xor d(650) xor d(648) xor d(647) xor d(644) xor d(643) xor d(641) xor d(639) xor d(637) xor d(635) xor d(631) xor d(627) xor d(625) xor d(624) xor d(621) xor d(619) xor d(618) xor d(615) xor d(614) xor d(612) xor d(610) xor d(608) xor d(607) xor d(606) xor d(605) xor d(604) xor d(602) xor d(601) xor d(599) xor d(598) xor d(597) xor d(595) xor d(594) xor d(591) xor d(590) xor d(588) xor d(587) xor d(586) xor d(582) xor d(581) xor d(580) xor d(578) xor d(575) xor d(573) xor d(570) xor d(569) xor d(568) xor d(566) xor d(562) xor d(560) xor d(558) xor d(556) xor d(555) xor d(553) xor d(552) xor d(551) xor d(550) xor d(549) xor d(546) xor d(544) xor d(540) xor d(537) xor d(535) xor d(534) xor d(530) xor d(529) xor d(527) xor d(526) xor d(525) xor d(524) xor d(523) xor d(521) xor d(520) xor d(517) xor d(516) xor d(514) xor d(513) xor d(511) xor d(509) xor d(507) xor d(506) xor d(505) xor d(503) xor d(502) xor d(501) xor d(497) xor d(496) xor d(495) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(484) xor d(483) xor d(481) xor d(478) xor d(477) xor d(476) xor d(475) xor d(474) xor d(472) xor d(471) xor d(467) xor d(465) xor d(463) xor d(460) xor d(459) xor d(457) xor d(456) xor d(453) xor d(447) xor d(445) xor d(444) xor d(443) xor d(439) xor d(432) xor d(431) xor d(429) xor d(428) xor d(419) xor d(417) xor d(414) xor d(413) xor d(411) xor d(409) xor d(407) xor d(404) xor d(403) xor d(402) xor d(400) xor d(399) xor d(395) xor d(394) xor d(393) xor d(391) xor d(388) xor d(387) xor d(386) xor d(385) xor d(383) xor d(382) xor d(381) xor d(376) xor d(373) xor d(371) xor d(369) xor d(367) xor d(364) xor d(363) xor d(361) xor d(358) xor d(357) xor d(354) xor d(353) xor d(352) xor d(348) xor d(344) xor d(343) xor d(342) xor d(340) xor d(339) xor d(337) xor d(336) xor d(334) xor d(333) xor d(332) xor d(330) xor d(329) xor d(328) xor d(323) xor d(322) xor d(317) xor d(316) xor d(315) xor d(314) xor d(313) xor d(312) xor d(310) xor d(307) xor d(305) xor d(304) xor d(300) xor d(298) xor d(297) xor d(295) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(289) xor d(287) xor d(285) xor d(283) xor d(282) xor d(281) xor d(278) xor d(274) xor d(272) xor d(271) xor d(269) xor d(268) xor d(264) xor d(263) xor d(260) xor d(259) xor d(256) xor d(254) xor d(252) xor d(250) xor d(247) xor d(243) xor d(238) xor d(232) xor d(229) xor d(225) xor d(223) xor d(222) xor d(221) xor d(219) xor d(211) xor d(209) xor d(207) xor d(205) xor d(204) xor d(203) xor d(202) xor d(198) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(181) xor d(178) xor d(177) xor d(167) xor d(166) xor d(165) xor d(164) xor d(162) xor d(161) xor d(157) xor d(156) xor d(153) xor d(151) xor d(150) xor d(146) xor d(144) xor d(139) xor d(138) xor d(132) xor d(131) xor d(130) xor d(129) xor d(127) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(108) xor d(106) xor d(105) xor d(101) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(68) xor d(67) xor d(63) xor d(62) xor d(61) xor d(60) xor d(58) xor d(56) xor d(55) xor d(53) xor d(50) xor d(49) xor d(48) xor d(45) xor d(43) xor d(42) xor d(40) xor d(39) xor d(32) xor d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(1) xor c(2) xor c(3) xor c(7) xor c(8) xor c(9) xor c(11) xor c(12) xor c(14) xor c(15) xor c(18) xor c(19) xor c(21) xor c(22) xor c(24) xor c(27) xor c(28) xor c(31); + newcrc(28) := d(1021) xor d(1020) xor d(1017) xor d(1015) xor d(1014) xor d(1012) xor d(1011) xor d(1008) xor d(1007) xor d(1005) xor d(1004) xor d(1002) xor d(1001) xor d(1000) xor d(996) xor d(995) xor d(994) xor d(992) xor d(990) xor d(988) xor d(986) xor d(981) xor d(980) xor d(979) xor d(978) xor d(977) xor d(976) xor d(975) xor d(974) xor d(973) xor d(971) xor d(970) xor d(967) xor d(963) xor d(956) xor d(955) xor d(954) xor d(951) xor d(950) xor d(949) xor d(946) xor d(944) xor d(940) xor d(937) xor d(935) xor d(934) xor d(931) xor d(930) xor d(929) xor d(927) xor d(916) xor d(914) xor d(913) xor d(911) xor d(906) xor d(903) xor d(902) xor d(900) xor d(899) xor d(898) xor d(897) xor d(896) xor d(895) xor d(894) xor d(893) xor d(892) xor d(889) xor d(887) xor d(886) xor d(885) xor d(883) xor d(882) xor d(879) xor d(877) xor d(875) xor d(874) xor d(873) xor d(872) xor d(871) xor d(870) xor d(869) xor d(867) xor d(865) xor d(864) xor d(863) xor d(859) xor d(857) xor d(856) xor d(855) xor d(853) xor d(850) xor d(849) xor d(847) xor d(846) xor d(845) xor d(844) xor d(842) xor d(838) xor d(836) xor d(835) xor d(833) xor d(831) xor d(830) xor d(828) xor d(823) xor d(821) xor d(820) xor d(815) xor d(814) xor d(812) xor d(811) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(805) xor d(804) xor d(803) xor d(802) xor d(800) xor d(799) xor d(798) xor d(796) xor d(794) xor d(789) xor d(787) xor d(784) xor d(782) xor d(781) xor d(780) xor d(778) xor d(776) xor d(772) xor d(770) xor d(765) xor d(763) xor d(761) xor d(759) xor d(758) xor d(754) xor d(752) xor d(751) xor d(749) xor d(746) xor d(744) xor d(743) xor d(740) xor d(738) xor d(737) xor d(736) xor d(732) xor d(728) xor d(727) xor d(725) xor d(723) xor d(721) xor d(720) xor d(719) xor d(718) xor d(717) xor d(716) xor d(715) xor d(711) xor d(706) xor d(704) xor d(703) xor d(700) xor d(698) xor d(697) xor d(696) xor d(694) xor d(691) xor d(690) xor d(689) xor d(687) xor d(685) xor d(683) xor d(682) xor d(676) xor d(671) xor d(670) xor d(669) xor d(668) xor d(666) xor d(665) xor d(664) xor d(663) xor d(662) xor d(661) xor d(654) xor d(652) xor d(651) xor d(649) xor d(648) xor d(645) xor d(644) xor d(642) xor d(640) xor d(638) xor d(636) xor d(632) xor d(628) xor d(626) xor d(625) xor d(622) xor d(620) xor d(619) xor d(616) xor d(615) xor d(613) xor d(611) xor d(609) xor d(608) xor d(607) xor d(606) xor d(605) xor d(603) xor d(602) xor d(600) xor d(599) xor d(598) xor d(596) xor d(595) xor d(592) xor d(591) xor d(589) xor d(588) xor d(587) xor d(583) xor d(582) xor d(581) xor d(579) xor d(576) xor d(574) xor d(571) xor d(570) xor d(569) xor d(567) xor d(563) xor d(561) xor d(559) xor d(557) xor d(556) xor d(554) xor d(553) xor d(552) xor d(551) xor d(550) xor d(547) xor d(545) xor d(541) xor d(538) xor d(536) xor d(535) xor d(531) xor d(530) xor d(528) xor d(527) xor d(526) xor d(525) xor d(524) xor d(522) xor d(521) xor d(518) xor d(517) xor d(515) xor d(514) xor d(512) xor d(510) xor d(508) xor d(507) xor d(506) xor d(504) xor d(503) xor d(502) xor d(498) xor d(497) xor d(496) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(484) xor d(482) xor d(479) xor d(478) xor d(477) xor d(476) xor d(475) xor d(473) xor d(472) xor d(468) xor d(466) xor d(464) xor d(461) xor d(460) xor d(458) xor d(457) xor d(454) xor d(448) xor d(446) xor d(445) xor d(444) xor d(440) xor d(433) xor d(432) xor d(430) xor d(429) xor d(420) xor d(418) xor d(415) xor d(414) xor d(412) xor d(410) xor d(408) xor d(405) xor d(404) xor d(403) xor d(401) xor d(400) xor d(396) xor d(395) xor d(394) xor d(392) xor d(389) xor d(388) xor d(387) xor d(386) xor d(384) xor d(383) xor d(382) xor d(377) xor d(374) xor d(372) xor d(370) xor d(368) xor d(365) xor d(364) xor d(362) xor d(359) xor d(358) xor d(355) xor d(354) xor d(353) xor d(349) xor d(345) xor d(344) xor d(343) xor d(341) xor d(340) xor d(338) xor d(337) xor d(335) xor d(334) xor d(333) xor d(331) xor d(330) xor d(329) xor d(324) xor d(323) xor d(318) xor d(317) xor d(316) xor d(315) xor d(314) xor d(313) xor d(311) xor d(308) xor d(306) xor d(305) xor d(301) xor d(299) xor d(298) xor d(296) xor d(295) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(288) xor d(286) xor d(284) xor d(283) xor d(282) xor d(279) xor d(275) xor d(273) xor d(272) xor d(270) xor d(269) xor d(265) xor d(264) xor d(261) xor d(260) xor d(257) xor d(255) xor d(253) xor d(251) xor d(248) xor d(244) xor d(239) xor d(233) xor d(230) xor d(226) xor d(224) xor d(223) xor d(222) xor d(220) xor d(212) xor d(210) xor d(208) xor d(206) xor d(205) xor d(204) xor d(203) xor d(199) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(182) xor d(179) xor d(178) xor d(168) xor d(167) xor d(166) xor d(165) xor d(163) xor d(162) xor d(158) xor d(157) xor d(154) xor d(152) xor d(151) xor d(147) xor d(145) xor d(140) xor d(139) xor d(133) xor d(132) xor d(131) xor d(130) xor d(128) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(112) xor d(110) xor d(109) xor d(107) xor d(106) xor d(102) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(75) xor d(69) xor d(68) xor d(64) xor d(63) xor d(62) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(43) xor d(41) xor d(40) xor d(33) xor d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(0) xor c(2) xor c(3) xor c(4) xor c(8) xor c(9) xor c(10) xor c(12) xor c(13) xor c(15) xor c(16) xor c(19) xor c(20) xor c(22) xor c(23) xor c(25) xor c(28) xor c(29); + newcrc(29) := d(1022) xor d(1021) xor d(1018) xor d(1016) xor d(1015) xor d(1013) xor d(1012) xor d(1009) xor d(1008) xor d(1006) xor d(1005) xor d(1003) xor d(1002) xor d(1001) xor d(997) xor d(996) xor d(995) xor d(993) xor d(991) xor d(989) xor d(987) xor d(982) xor d(981) xor d(980) xor d(979) xor d(978) xor d(977) xor d(976) xor d(975) xor d(974) xor d(972) xor d(971) xor d(968) xor d(964) xor d(957) xor d(956) xor d(955) xor d(952) xor d(951) xor d(950) xor d(947) xor d(945) xor d(941) xor d(938) xor d(936) xor d(935) xor d(932) xor d(931) xor d(930) xor d(928) xor d(917) xor d(915) xor d(914) xor d(912) xor d(907) xor d(904) xor d(903) xor d(901) xor d(900) xor d(899) xor d(898) xor d(897) xor d(896) xor d(895) xor d(894) xor d(893) xor d(890) xor d(888) xor d(887) xor d(886) xor d(884) xor d(883) xor d(880) xor d(878) xor d(876) xor d(875) xor d(874) xor d(873) xor d(872) xor d(871) xor d(870) xor d(868) xor d(866) xor d(865) xor d(864) xor d(860) xor d(858) xor d(857) xor d(856) xor d(854) xor d(851) xor d(850) xor d(848) xor d(847) xor d(846) xor d(845) xor d(843) xor d(839) xor d(837) xor d(836) xor d(834) xor d(832) xor d(831) xor d(829) xor d(824) xor d(822) xor d(821) xor d(816) xor d(815) xor d(813) xor d(812) xor d(811) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(805) xor d(804) xor d(803) xor d(801) xor d(800) xor d(799) xor d(797) xor d(795) xor d(790) xor d(788) xor d(785) xor d(783) xor d(782) xor d(781) xor d(779) xor d(777) xor d(773) xor d(771) xor d(766) xor d(764) xor d(762) xor d(760) xor d(759) xor d(755) xor d(753) xor d(752) xor d(750) xor d(747) xor d(745) xor d(744) xor d(741) xor d(739) xor d(738) xor d(737) xor d(733) xor d(729) xor d(728) xor d(726) xor d(724) xor d(722) xor d(721) xor d(720) xor d(719) xor d(718) xor d(717) xor d(716) xor d(712) xor d(707) xor d(705) xor d(704) xor d(701) xor d(699) xor d(698) xor d(697) xor d(695) xor d(692) xor d(691) xor d(690) xor d(688) xor d(686) xor d(684) xor d(683) xor d(677) xor d(672) xor d(671) xor d(670) xor d(669) xor d(667) xor d(666) xor d(665) xor d(664) xor d(663) xor d(662) xor d(655) xor d(653) xor d(652) xor d(650) xor d(649) xor d(646) xor d(645) xor d(643) xor d(641) xor d(639) xor d(637) xor d(633) xor d(629) xor d(627) xor d(626) xor d(623) xor d(621) xor d(620) xor d(617) xor d(616) xor d(614) xor d(612) xor d(610) xor d(609) xor d(608) xor d(607) xor d(606) xor d(604) xor d(603) xor d(601) xor d(600) xor d(599) xor d(597) xor d(596) xor d(593) xor d(592) xor d(590) xor d(589) xor d(588) xor d(584) xor d(583) xor d(582) xor d(580) xor d(577) xor d(575) xor d(572) xor d(571) xor d(570) xor d(568) xor d(564) xor d(562) xor d(560) xor d(558) xor d(557) xor d(555) xor d(554) xor d(553) xor d(552) xor d(551) xor d(548) xor d(546) xor d(542) xor d(539) xor d(537) xor d(536) xor d(532) xor d(531) xor d(529) xor d(528) xor d(527) xor d(526) xor d(525) xor d(523) xor d(522) xor d(519) xor d(518) xor d(516) xor d(515) xor d(513) xor d(511) xor d(509) xor d(508) xor d(507) xor d(505) xor d(504) xor d(503) xor d(499) xor d(498) xor d(497) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(483) xor d(480) xor d(479) xor d(478) xor d(477) xor d(476) xor d(474) xor d(473) xor d(469) xor d(467) xor d(465) xor d(462) xor d(461) xor d(459) xor d(458) xor d(455) xor d(449) xor d(447) xor d(446) xor d(445) xor d(441) xor d(434) xor d(433) xor d(431) xor d(430) xor d(421) xor d(419) xor d(416) xor d(415) xor d(413) xor d(411) xor d(409) xor d(406) xor d(405) xor d(404) xor d(402) xor d(401) xor d(397) xor d(396) xor d(395) xor d(393) xor d(390) xor d(389) xor d(388) xor d(387) xor d(385) xor d(384) xor d(383) xor d(378) xor d(375) xor d(373) xor d(371) xor d(369) xor d(366) xor d(365) xor d(363) xor d(360) xor d(359) xor d(356) xor d(355) xor d(354) xor d(350) xor d(346) xor d(345) xor d(344) xor d(342) xor d(341) xor d(339) xor d(338) xor d(336) xor d(335) xor d(334) xor d(332) xor d(331) xor d(330) xor d(325) xor d(324) xor d(319) xor d(318) xor d(317) xor d(316) xor d(315) xor d(314) xor d(312) xor d(309) xor d(307) xor d(306) xor d(302) xor d(300) xor d(299) xor d(297) xor d(296) xor d(295) xor d(294) xor d(293) xor d(292) xor d(291) xor d(289) xor d(287) xor d(285) xor d(284) xor d(283) xor d(280) xor d(276) xor d(274) xor d(273) xor d(271) xor d(270) xor d(266) xor d(265) xor d(262) xor d(261) xor d(258) xor d(256) xor d(254) xor d(252) xor d(249) xor d(245) xor d(240) xor d(234) xor d(231) xor d(227) xor d(225) xor d(224) xor d(223) xor d(221) xor d(213) xor d(211) xor d(209) xor d(207) xor d(206) xor d(205) xor d(204) xor d(200) xor d(199) xor d(198) xor d(196) xor d(195) xor d(194) xor d(191) xor d(190) xor d(189) xor d(188) xor d(187) xor d(185) xor d(183) xor d(180) xor d(179) xor d(169) xor d(168) xor d(167) xor d(166) xor d(164) xor d(163) xor d(159) xor d(158) xor d(155) xor d(153) xor d(152) xor d(148) xor d(146) xor d(141) xor d(140) xor d(134) xor d(133) xor d(132) xor d(131) xor d(129) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(116) xor d(115) xor d(114) xor d(113) xor d(111) xor d(110) xor d(108) xor d(107) xor d(103) xor d(101) xor d(100) xor d(98) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(76) xor d(70) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(44) xor d(42) xor d(41) xor d(34) xor d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(1) xor c(3) xor c(4) xor c(5) xor c(9) xor c(10) xor c(11) xor c(13) xor c(14) xor c(16) xor c(17) xor c(20) xor c(21) xor c(23) xor c(24) xor c(26) xor c(29) xor c(30); + newcrc(30) := d(1023) xor d(1022) xor d(1019) xor d(1017) xor d(1016) xor d(1014) xor d(1013) xor d(1010) xor d(1009) xor d(1007) xor d(1006) xor d(1004) xor d(1003) xor d(1002) xor d(998) xor d(997) xor d(996) xor d(994) xor d(992) xor d(990) xor d(988) xor d(983) xor d(982) xor d(981) xor d(980) xor d(979) xor d(978) xor d(977) xor d(976) xor d(975) xor d(973) xor d(972) xor d(969) xor d(965) xor d(958) xor d(957) xor d(956) xor d(953) xor d(952) xor d(951) xor d(948) xor d(946) xor d(942) xor d(939) xor d(937) xor d(936) xor d(933) xor d(932) xor d(931) xor d(929) xor d(918) xor d(916) xor d(915) xor d(913) xor d(908) xor d(905) xor d(904) xor d(902) xor d(901) xor d(900) xor d(899) xor d(898) xor d(897) xor d(896) xor d(895) xor d(894) xor d(891) xor d(889) xor d(888) xor d(887) xor d(885) xor d(884) xor d(881) xor d(879) xor d(877) xor d(876) xor d(875) xor d(874) xor d(873) xor d(872) xor d(871) xor d(869) xor d(867) xor d(866) xor d(865) xor d(861) xor d(859) xor d(858) xor d(857) xor d(855) xor d(852) xor d(851) xor d(849) xor d(848) xor d(847) xor d(846) xor d(844) xor d(840) xor d(838) xor d(837) xor d(835) xor d(833) xor d(832) xor d(830) xor d(825) xor d(823) xor d(822) xor d(817) xor d(816) xor d(814) xor d(813) xor d(812) xor d(811) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(805) xor d(804) xor d(802) xor d(801) xor d(800) xor d(798) xor d(796) xor d(791) xor d(789) xor d(786) xor d(784) xor d(783) xor d(782) xor d(780) xor d(778) xor d(774) xor d(772) xor d(767) xor d(765) xor d(763) xor d(761) xor d(760) xor d(756) xor d(754) xor d(753) xor d(751) xor d(748) xor d(746) xor d(745) xor d(742) xor d(740) xor d(739) xor d(738) xor d(734) xor d(730) xor d(729) xor d(727) xor d(725) xor d(723) xor d(722) xor d(721) xor d(720) xor d(719) xor d(718) xor d(717) xor d(713) xor d(708) xor d(706) xor d(705) xor d(702) xor d(700) xor d(699) xor d(698) xor d(696) xor d(693) xor d(692) xor d(691) xor d(689) xor d(687) xor d(685) xor d(684) xor d(678) xor d(673) xor d(672) xor d(671) xor d(670) xor d(668) xor d(667) xor d(666) xor d(665) xor d(664) xor d(663) xor d(656) xor d(654) xor d(653) xor d(651) xor d(650) xor d(647) xor d(646) xor d(644) xor d(642) xor d(640) xor d(638) xor d(634) xor d(630) xor d(628) xor d(627) xor d(624) xor d(622) xor d(621) xor d(618) xor d(617) xor d(615) xor d(613) xor d(611) xor d(610) xor d(609) xor d(608) xor d(607) xor d(605) xor d(604) xor d(602) xor d(601) xor d(600) xor d(598) xor d(597) xor d(594) xor d(593) xor d(591) xor d(590) xor d(589) xor d(585) xor d(584) xor d(583) xor d(581) xor d(578) xor d(576) xor d(573) xor d(572) xor d(571) xor d(569) xor d(565) xor d(563) xor d(561) xor d(559) xor d(558) xor d(556) xor d(555) xor d(554) xor d(553) xor d(552) xor d(549) xor d(547) xor d(543) xor d(540) xor d(538) xor d(537) xor d(533) xor d(532) xor d(530) xor d(529) xor d(528) xor d(527) xor d(526) xor d(524) xor d(523) xor d(520) xor d(519) xor d(517) xor d(516) xor d(514) xor d(512) xor d(510) xor d(509) xor d(508) xor d(506) xor d(505) xor d(504) xor d(500) xor d(499) xor d(498) xor d(493) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(484) xor d(481) xor d(480) xor d(479) xor d(478) xor d(477) xor d(475) xor d(474) xor d(470) xor d(468) xor d(466) xor d(463) xor d(462) xor d(460) xor d(459) xor d(456) xor d(450) xor d(448) xor d(447) xor d(446) xor d(442) xor d(435) xor d(434) xor d(432) xor d(431) xor d(422) xor d(420) xor d(417) xor d(416) xor d(414) xor d(412) xor d(410) xor d(407) xor d(406) xor d(405) xor d(403) xor d(402) xor d(398) xor d(397) xor d(396) xor d(394) xor d(391) xor d(390) xor d(389) xor d(388) xor d(386) xor d(385) xor d(384) xor d(379) xor d(376) xor d(374) xor d(372) xor d(370) xor d(367) xor d(366) xor d(364) xor d(361) xor d(360) xor d(357) xor d(356) xor d(355) xor d(351) xor d(347) xor d(346) xor d(345) xor d(343) xor d(342) xor d(340) xor d(339) xor d(337) xor d(336) xor d(335) xor d(333) xor d(332) xor d(331) xor d(326) xor d(325) xor d(320) xor d(319) xor d(318) xor d(317) xor d(316) xor d(315) xor d(313) xor d(310) xor d(308) xor d(307) xor d(303) xor d(301) xor d(300) xor d(298) xor d(297) xor d(296) xor d(295) xor d(294) xor d(293) xor d(292) xor d(290) xor d(288) xor d(286) xor d(285) xor d(284) xor d(281) xor d(277) xor d(275) xor d(274) xor d(272) xor d(271) xor d(267) xor d(266) xor d(263) xor d(262) xor d(259) xor d(257) xor d(255) xor d(253) xor d(250) xor d(246) xor d(241) xor d(235) xor d(232) xor d(228) xor d(226) xor d(225) xor d(224) xor d(222) xor d(214) xor d(212) xor d(210) xor d(208) xor d(207) xor d(206) xor d(205) xor d(201) xor d(200) xor d(199) xor d(197) xor d(196) xor d(195) xor d(192) xor d(191) xor d(190) xor d(189) xor d(188) xor d(186) xor d(184) xor d(181) xor d(180) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(164) xor d(160) xor d(159) xor d(156) xor d(154) xor d(153) xor d(149) xor d(147) xor d(142) xor d(141) xor d(135) xor d(134) xor d(133) xor d(132) xor d(130) xor d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(117) xor d(116) xor d(115) xor d(114) xor d(112) xor d(111) xor d(109) xor d(108) xor d(104) xor d(102) xor d(101) xor d(99) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(77) xor d(71) xor d(70) xor d(66) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(53) xor d(52) xor d(51) xor d(48) xor d(46) xor d(45) xor d(43) xor d(42) xor d(35) xor d(32) xor d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(0) xor c(2) xor c(4) xor c(5) xor c(6) xor c(10) xor c(11) xor c(12) xor c(14) xor c(15) xor c(17) xor c(18) xor c(21) xor c(22) xor c(24) xor c(25) xor c(27) xor c(30) xor c(31); + newcrc(31) := d(1023) xor d(1020) xor d(1018) xor d(1017) xor d(1015) xor d(1014) xor d(1011) xor d(1010) xor d(1008) xor d(1007) xor d(1005) xor d(1004) xor d(1003) xor d(999) xor d(998) xor d(997) xor d(995) xor d(993) xor d(991) xor d(989) xor d(984) xor d(983) xor d(982) xor d(981) xor d(980) xor d(979) xor d(978) xor d(977) xor d(976) xor d(974) xor d(973) xor d(970) xor d(966) xor d(959) xor d(958) xor d(957) xor d(954) xor d(953) xor d(952) xor d(949) xor d(947) xor d(943) xor d(940) xor d(938) xor d(937) xor d(934) xor d(933) xor d(932) xor d(930) xor d(919) xor d(917) xor d(916) xor d(914) xor d(909) xor d(906) xor d(905) xor d(903) xor d(902) xor d(901) xor d(900) xor d(899) xor d(898) xor d(897) xor d(896) xor d(895) xor d(892) xor d(890) xor d(889) xor d(888) xor d(886) xor d(885) xor d(882) xor d(880) xor d(878) xor d(877) xor d(876) xor d(875) xor d(874) xor d(873) xor d(872) xor d(870) xor d(868) xor d(867) xor d(866) xor d(862) xor d(860) xor d(859) xor d(858) xor d(856) xor d(853) xor d(852) xor d(850) xor d(849) xor d(848) xor d(847) xor d(845) xor d(841) xor d(839) xor d(838) xor d(836) xor d(834) xor d(833) xor d(831) xor d(826) xor d(824) xor d(823) xor d(818) xor d(817) xor d(815) xor d(814) xor d(813) xor d(812) xor d(811) xor d(810) xor d(809) xor d(808) xor d(807) xor d(806) xor d(805) xor d(803) xor d(802) xor d(801) xor d(799) xor d(797) xor d(792) xor d(790) xor d(787) xor d(785) xor d(784) xor d(783) xor d(781) xor d(779) xor d(775) xor d(773) xor d(768) xor d(766) xor d(764) xor d(762) xor d(761) xor d(757) xor d(755) xor d(754) xor d(752) xor d(749) xor d(747) xor d(746) xor d(743) xor d(741) xor d(740) xor d(739) xor d(735) xor d(731) xor d(730) xor d(728) xor d(726) xor d(724) xor d(723) xor d(722) xor d(721) xor d(720) xor d(719) xor d(718) xor d(714) xor d(709) xor d(707) xor d(706) xor d(703) xor d(701) xor d(700) xor d(699) xor d(697) xor d(694) xor d(693) xor d(692) xor d(690) xor d(688) xor d(686) xor d(685) xor d(679) xor d(674) xor d(673) xor d(672) xor d(671) xor d(669) xor d(668) xor d(667) xor d(666) xor d(665) xor d(664) xor d(657) xor d(655) xor d(654) xor d(652) xor d(651) xor d(648) xor d(647) xor d(645) xor d(643) xor d(641) xor d(639) xor d(635) xor d(631) xor d(629) xor d(628) xor d(625) xor d(623) xor d(622) xor d(619) xor d(618) xor d(616) xor d(614) xor d(612) xor d(611) xor d(610) xor d(609) xor d(608) xor d(606) xor d(605) xor d(603) xor d(602) xor d(601) xor d(599) xor d(598) xor d(595) xor d(594) xor d(592) xor d(591) xor d(590) xor d(586) xor d(585) xor d(584) xor d(582) xor d(579) xor d(577) xor d(574) xor d(573) xor d(572) xor d(570) xor d(566) xor d(564) xor d(562) xor d(560) xor d(559) xor d(557) xor d(556) xor d(555) xor d(554) xor d(553) xor d(550) xor d(548) xor d(544) xor d(541) xor d(539) xor d(538) xor d(534) xor d(533) xor d(531) xor d(530) xor d(529) xor d(528) xor d(527) xor d(525) xor d(524) xor d(521) xor d(520) xor d(518) xor d(517) xor d(515) xor d(513) xor d(511) xor d(510) xor d(509) xor d(507) xor d(506) xor d(505) xor d(501) xor d(500) xor d(499) xor d(494) xor d(493) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(485) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(476) xor d(475) xor d(471) xor d(469) xor d(467) xor d(464) xor d(463) xor d(461) xor d(460) xor d(457) xor d(451) xor d(449) xor d(448) xor d(447) xor d(443) xor d(436) xor d(435) xor d(433) xor d(432) xor d(423) xor d(421) xor d(418) xor d(417) xor d(415) xor d(413) xor d(411) xor d(408) xor d(407) xor d(406) xor d(404) xor d(403) xor d(399) xor d(398) xor d(397) xor d(395) xor d(392) xor d(391) xor d(390) xor d(389) xor d(387) xor d(386) xor d(385) xor d(380) xor d(377) xor d(375) xor d(373) xor d(371) xor d(368) xor d(367) xor d(365) xor d(362) xor d(361) xor d(358) xor d(357) xor d(356) xor d(352) xor d(348) xor d(347) xor d(346) xor d(344) xor d(343) xor d(341) xor d(340) xor d(338) xor d(337) xor d(336) xor d(334) xor d(333) xor d(332) xor d(327) xor d(326) xor d(321) xor d(320) xor d(319) xor d(318) xor d(317) xor d(316) xor d(314) xor d(311) xor d(309) xor d(308) xor d(304) xor d(302) xor d(301) xor d(299) xor d(298) xor d(297) xor d(296) xor d(295) xor d(294) xor d(293) xor d(291) xor d(289) xor d(287) xor d(286) xor d(285) xor d(282) xor d(278) xor d(276) xor d(275) xor d(273) xor d(272) xor d(268) xor d(267) xor d(264) xor d(263) xor d(260) xor d(258) xor d(256) xor d(254) xor d(251) xor d(247) xor d(242) xor d(236) xor d(233) xor d(229) xor d(227) xor d(226) xor d(225) xor d(223) xor d(215) xor d(213) xor d(211) xor d(209) xor d(208) xor d(207) xor d(206) xor d(202) xor d(201) xor d(200) xor d(198) xor d(197) xor d(196) xor d(193) xor d(192) xor d(191) xor d(190) xor d(189) xor d(187) xor d(185) xor d(182) xor d(181) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(165) xor d(161) xor d(160) xor d(157) xor d(155) xor d(154) xor d(150) xor d(148) xor d(143) xor d(142) xor d(136) xor d(135) xor d(134) xor d(133) xor d(131) xor d(127) xor d(126) xor d(125) xor d(124) xor d(122) xor d(118) xor d(117) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(109) xor d(105) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(78) xor d(72) xor d(71) xor d(67) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(54) xor d(53) xor d(52) xor d(49) xor d(47) xor d(46) xor d(44) xor d(43) xor d(36) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(1) xor c(3) xor c(5) xor c(6) xor c(7) xor c(11) xor c(12) xor c(13) xor c(15) xor c(16) xor c(18) xor c(19) xor c(22) xor c(23) xor c(25) xor c(26) xor c(28) xor c(31); + return newcrc; + end nextCRC32_D1024; + +end PCK_CRC32_D1024; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D128.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D128.vhd new file mode 100755 index 0000000000000000000000000000000000000000..56e2add6cfc4b7570ba4a13baa3e0959c8e8bf71 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D128.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) +-- * data width: 128 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D128 is + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 128 + -- convention: the first serial bit is D[127] + function nextCRC32_D128 + (Data: std_logic_vector(127 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D128; + + +package body PCK_CRC32_D128 is + + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 128 + -- convention: the first serial bit is D[127] + function nextCRC32_D128 + (Data: std_logic_vector(127 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(127 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(127) xor d(126) xor d(125) xor d(123) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(111) xor d(110) xor d(106) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(81) xor d(79) xor d(73) xor d(72) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(61) xor d(60) xor d(58) xor d(55) xor d(54) xor d(53) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(37) xor d(34) xor d(32) xor d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(5) xor c(7) xor c(8) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(23) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(1) := d(125) xor d(124) xor d(123) xor d(120) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(101) xor d(100) xor d(94) xor d(88) xor d(87) xor d(86) xor d(81) xor d(80) xor d(79) xor d(74) xor d(72) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(53) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(44) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(4) xor c(5) xor c(6) xor c(7) xor c(9) xor c(10) xor c(11) xor c(14) xor c(16) xor c(17) xor c(19) xor c(20) xor c(24) xor c(27) xor c(28) xor c(29); + newcrc(2) := d(127) xor d(124) xor d(123) xor d(121) xor d(119) xor d(118) xor d(110) xor d(108) xor d(107) xor d(102) xor d(99) xor d(98) xor d(97) xor d(96) xor d(94) xor d(89) xor d(88) xor d(85) xor d(84) xor d(83) xor d(80) xor d(79) xor d(75) xor d(72) xor d(70) xor d(68) xor d(67) xor d(64) xor d(59) xor d(58) xor d(57) xor d(55) xor d(53) xor d(52) xor d(51) xor d(44) xor d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(32) xor d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(6) xor c(11) xor c(12) xor c(14) xor c(22) xor c(23) xor c(25) xor c(27) xor c(28) xor c(31); + newcrc(3) := d(125) xor d(124) xor d(122) xor d(120) xor d(119) xor d(111) xor d(109) xor d(108) xor d(103) xor d(100) xor d(99) xor d(98) xor d(97) xor d(95) xor d(90) xor d(89) xor d(86) xor d(85) xor d(84) xor d(81) xor d(80) xor d(76) xor d(73) xor d(71) xor d(69) xor d(68) xor d(65) xor d(60) xor d(59) xor d(58) xor d(56) xor d(54) xor d(53) xor d(52) xor d(45) xor d(40) xor d(39) xor d(38) xor d(37) xor d(36) xor d(33) xor d(32) xor d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(4) xor c(7) xor c(12) xor c(13) xor c(15) xor c(23) xor c(24) xor c(26) xor c(28) xor c(29); + newcrc(4) := d(127) xor d(121) xor d(120) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(106) xor d(103) xor d(100) xor d(97) xor d(95) xor d(94) xor d(91) xor d(90) xor d(86) xor d(84) xor d(83) xor d(79) xor d(77) xor d(74) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(65) xor d(63) xor d(59) xor d(58) xor d(57) xor d(50) xor d(48) xor d(47) xor d(46) xor d(45) xor d(44) xor d(41) xor d(40) xor d(39) xor d(38) xor d(33) xor d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(1) xor c(4) xor c(7) xor c(10) xor c(13) xor c(15) xor c(16) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(25) xor c(31); + newcrc(5) := d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(116) xor d(115) xor d(112) xor d(111) xor d(107) xor d(106) xor d(103) xor d(99) xor d(97) xor d(94) xor d(92) xor d(91) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(69) xor d(67) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(55) xor d(54) xor d(53) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(42) xor d(41) xor d(40) xor d(39) xor d(37) xor d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(1) xor c(3) xor c(7) xor c(10) xor c(11) xor c(15) xor c(16) xor c(19) xor c(20) xor c(24) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(6) := d(127) xor d(126) xor d(124) xor d(123) xor d(122) xor d(121) xor d(117) xor d(116) xor d(113) xor d(112) xor d(108) xor d(107) xor d(104) xor d(100) xor d(98) xor d(95) xor d(93) xor d(92) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(76) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(56) xor d(55) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(43) xor d(42) xor d(41) xor d(40) xor d(38) xor d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(2) xor c(4) xor c(8) xor c(11) xor c(12) xor c(16) xor c(17) xor c(20) xor c(21) xor c(25) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(7) := d(126) xor d(124) xor d(122) xor d(119) xor d(116) xor d(111) xor d(110) xor d(109) xor d(108) xor d(106) xor d(105) xor d(104) xor d(103) xor d(98) xor d(97) xor d(95) xor d(93) xor d(87) xor d(80) xor d(79) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(69) xor d(68) xor d(60) xor d(58) xor d(57) xor d(56) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(46) xor d(45) xor d(43) xor d(42) xor d(41) xor d(39) xor d(37) xor d(34) xor d(32) xor d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(1) xor c(2) xor c(7) xor c(8) xor c(9) xor c(10) xor c(12) xor c(13) xor c(14) xor c(15) xor c(20) xor c(23) xor c(26) xor c(28) xor c(30); + newcrc(8) := d(126) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(113) xor d(112) xor d(109) xor d(107) xor d(105) xor d(103) xor d(101) xor d(97) xor d(95) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(60) xor d(59) xor d(57) xor d(54) xor d(52) xor d(51) xor d(50) xor d(46) xor d(45) xor d(43) xor d(42) xor d(40) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(32) xor d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(1) xor c(5) xor c(7) xor c(9) xor c(11) xor c(13) xor c(16) xor c(17) xor c(18) xor c(20) xor c(22) xor c(23) xor c(24) xor c(30); + newcrc(9) := d(127) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(114) xor d(113) xor d(110) xor d(108) xor d(106) xor d(104) xor d(102) xor d(98) xor d(96) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(71) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(64) xor d(61) xor d(60) xor d(58) xor d(55) xor d(53) xor d(52) xor d(51) xor d(47) xor d(46) xor d(44) xor d(43) xor d(41) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(33) xor d(32) xor d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(0) xor c(2) xor c(6) xor c(8) xor c(10) xor c(12) xor c(14) xor c(17) xor c(18) xor c(19) xor c(21) xor c(23) xor c(24) xor c(25) xor c(31); + newcrc(10) := d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(110) xor d(109) xor d(107) xor d(106) xor d(105) xor d(104) xor d(101) xor d(98) xor d(96) xor d(95) xor d(94) xor d(90) xor d(89) xor d(86) xor d(83) xor d(80) xor d(78) xor d(77) xor d(75) xor d(73) xor d(71) xor d(70) xor d(69) xor d(66) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(55) xor d(52) xor d(50) xor d(42) xor d(40) xor d(39) xor d(36) xor d(35) xor d(33) xor d(32) xor d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(5) xor c(8) xor c(9) xor c(10) xor c(11) xor c(13) xor c(14) xor c(17) xor c(19) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(11) := d(125) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(108) xor d(107) xor d(105) xor d(104) xor d(103) xor d(102) xor d(101) xor d(98) xor d(94) xor d(91) xor d(90) xor d(85) xor d(83) xor d(82) xor d(78) xor d(76) xor d(74) xor d(73) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(59) xor d(58) xor d(57) xor d(56) xor d(55) xor d(54) xor d(51) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(40) xor d(36) xor d(33) xor d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(2) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(11) xor c(12) xor c(17) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29); + newcrc(12) := d(127) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(111) xor d(110) xor d(109) xor d(108) xor d(105) xor d(102) xor d(101) xor d(98) xor d(97) xor d(96) xor d(94) xor d(92) xor d(91) xor d(87) xor d(86) xor d(85) xor d(82) xor d(81) xor d(77) xor d(75) xor d(74) xor d(73) xor d(71) xor d(69) xor d(68) xor d(63) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(41) xor d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(5) xor c(6) xor c(9) xor c(12) xor c(13) xor c(14) xor c(15) xor c(17) xor c(20) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(31); + newcrc(13) := d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(112) xor d(111) xor d(110) xor d(109) xor d(106) xor d(103) xor d(102) xor d(99) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(88) xor d(87) xor d(86) xor d(83) xor d(82) xor d(78) xor d(76) xor d(75) xor d(74) xor d(72) xor d(70) xor d(69) xor d(64) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(42) xor d(32) xor d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(6) xor c(7) xor c(10) xor c(13) xor c(14) xor c(15) xor c(16) xor c(18) xor c(21) xor c(22) xor c(24) xor c(25) xor c(26) xor c(27); + newcrc(14) := d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(113) xor d(112) xor d(111) xor d(110) xor d(107) xor d(104) xor d(103) xor d(100) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(89) xor d(88) xor d(87) xor d(84) xor d(83) xor d(79) xor d(77) xor d(76) xor d(75) xor d(73) xor d(71) xor d(70) xor d(65) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(43) xor d(33) xor d(32) xor d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(0) xor c(2) xor c(3) xor c(4) xor c(7) xor c(8) xor c(11) xor c(14) xor c(15) xor c(16) xor c(17) xor c(19) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(28); + newcrc(15) := d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(90) xor d(89) xor d(88) xor d(85) xor d(84) xor d(80) xor d(78) xor d(77) xor d(76) xor d(74) xor d(72) xor d(71) xor d(66) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(50) xor d(49) xor d(45) xor d(44) xor d(34) xor d(33) xor d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(1) xor c(3) xor c(4) xor c(5) xor c(8) xor c(9) xor c(12) xor c(15) xor c(16) xor c(17) xor c(18) xor c(20) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(29); + newcrc(16) := d(127) xor d(124) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(115) xor d(112) xor d(111) xor d(110) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(99) xor d(97) xor d(94) xor d(91) xor d(90) xor d(89) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(78) xor d(77) xor d(75) xor d(68) xor d(66) xor d(57) xor d(56) xor d(51) xor d(48) xor d(47) xor d(46) xor d(44) xor d(37) xor d(35) xor d(32) xor d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(1) xor c(3) xor c(4) xor c(6) xor c(7) xor c(8) xor c(9) xor c(13) xor c(14) xor c(15) xor c(16) xor c(19) xor c(20) xor c(22) xor c(23) xor c(24) xor c(25) xor c(28) xor c(31); + newcrc(17) := d(125) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(112) xor d(111) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(100) xor d(98) xor d(95) xor d(92) xor d(91) xor d(90) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(79) xor d(78) xor d(76) xor d(69) xor d(67) xor d(58) xor d(57) xor d(52) xor d(49) xor d(48) xor d(47) xor d(45) xor d(38) xor d(36) xor d(33) xor d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(2) xor c(4) xor c(5) xor c(7) xor c(8) xor c(9) xor c(10) xor c(14) xor c(15) xor c(16) xor c(17) xor c(20) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(29); + newcrc(18) := d(126) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(113) xor d(112) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(101) xor d(99) xor d(96) xor d(93) xor d(92) xor d(91) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(80) xor d(79) xor d(77) xor d(70) xor d(68) xor d(59) xor d(58) xor d(53) xor d(50) xor d(49) xor d(48) xor d(46) xor d(39) xor d(37) xor d(34) xor d(32) xor d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(0) xor c(3) xor c(5) xor c(6) xor c(8) xor c(9) xor c(10) xor c(11) xor c(15) xor c(16) xor c(17) xor c(18) xor c(21) xor c(22) xor c(24) xor c(25) xor c(26) xor c(27) xor c(30); + newcrc(19) := d(127) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(114) xor d(113) xor d(112) xor d(108) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(100) xor d(97) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(87) xor d(86) xor d(85) xor d(81) xor d(80) xor d(78) xor d(71) xor d(69) xor d(60) xor d(59) xor d(54) xor d(51) xor d(50) xor d(49) xor d(47) xor d(40) xor d(38) xor d(35) xor d(33) xor d(32) xor d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(1) xor c(4) xor c(6) xor c(7) xor c(9) xor c(10) xor c(11) xor c(12) xor c(16) xor c(17) xor c(18) xor c(19) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(28) xor c(31); + newcrc(20) := d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(107) xor d(106) xor d(104) xor d(103) xor d(101) xor d(98) xor d(95) xor d(94) xor d(93) xor d(91) xor d(90) xor d(88) xor d(87) xor d(86) xor d(82) xor d(81) xor d(79) xor d(72) xor d(70) xor d(61) xor d(60) xor d(55) xor d(52) xor d(51) xor d(50) xor d(48) xor d(41) xor d(39) xor d(36) xor d(34) xor d(33) xor d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(2) xor c(5) xor c(7) xor c(8) xor c(10) xor c(11) xor c(12) xor c(13) xor c(17) xor c(18) xor c(19) xor c(20) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(29); + newcrc(21) := d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(120) xor d(117) xor d(116) xor d(115) xor d(114) xor d(110) xor d(109) xor d(108) xor d(107) xor d(105) xor d(104) xor d(102) xor d(99) xor d(96) xor d(95) xor d(94) xor d(92) xor d(91) xor d(89) xor d(88) xor d(87) xor d(83) xor d(82) xor d(80) xor d(73) xor d(71) xor d(62) xor d(61) xor d(56) xor d(53) xor d(52) xor d(51) xor d(49) xor d(42) xor d(40) xor d(37) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(0) xor c(3) xor c(6) xor c(8) xor c(9) xor c(11) xor c(12) xor c(13) xor c(14) xor c(18) xor c(19) xor c(20) xor c(21) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(22) := d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(98) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(88) xor d(87) xor d(85) xor d(82) xor d(79) xor d(74) xor d(73) xor d(68) xor d(67) xor d(66) xor d(65) xor d(62) xor d(61) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(2) xor c(3) xor c(4) xor c(5) xor c(8) xor c(9) xor c(12) xor c(13) xor c(17) xor c(18) xor c(19) xor c(23) xor c(25) xor c(26) xor c(27) xor c(28); + newcrc(23) := d(127) xor d(126) xor d(124) xor d(122) xor d(120) xor d(119) xor d(118) xor d(117) xor d(115) xor d(113) xor d(111) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(93) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(75) xor d(74) xor d(73) xor d(72) xor d(69) xor d(65) xor d(62) xor d(60) xor d(59) xor d(56) xor d(55) xor d(54) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(4) xor c(6) xor c(7) xor c(8) xor c(9) xor c(13) xor c(15) xor c(17) xor c(19) xor c(21) xor c(22) xor c(23) xor c(24) xor c(26) xor c(28) xor c(30) xor c(31); + newcrc(24) := d(127) xor d(125) xor d(123) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(112) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(94) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(76) xor d(75) xor d(74) xor d(73) xor d(70) xor d(66) xor d(63) xor d(61) xor d(60) xor d(57) xor d(56) xor d(55) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(40) xor d(39) xor d(37) xor d(36) xor d(35) xor d(32) xor d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(5) xor c(7) xor c(8) xor c(9) xor c(10) xor c(14) xor c(16) xor c(18) xor c(20) xor c(22) xor c(23) xor c(24) xor c(25) xor c(27) xor c(29) xor c(31); + newcrc(25) := d(126) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(100) xor d(99) xor d(98) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(67) xor d(64) xor d(62) xor d(61) xor d(58) xor d(57) xor d(56) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(41) xor d(40) xor d(38) xor d(37) xor d(36) xor d(33) xor d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(2) xor c(3) xor c(4) xor c(6) xor c(8) xor c(9) xor c(10) xor c(11) xor c(15) xor c(17) xor c(19) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(28) xor c(30); + newcrc(26) := d(126) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(112) xor d(111) xor d(110) xor d(108) xor d(107) xor d(105) xor d(104) xor d(100) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(81) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(67) xor d(66) xor d(62) xor d(61) xor d(60) xor d(59) xor d(57) xor d(55) xor d(54) xor d(52) xor d(49) xor d(48) xor d(47) xor d(44) xor d(42) xor d(41) xor d(39) xor d(38) xor d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(1) xor c(2) xor c(4) xor c(8) xor c(9) xor c(11) xor c(12) xor c(14) xor c(15) xor c(16) xor c(17) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(30); + newcrc(27) := d(127) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(108) xor d(106) xor d(105) xor d(101) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(68) xor d(67) xor d(63) xor d(62) xor d(61) xor d(60) xor d(58) xor d(56) xor d(55) xor d(53) xor d(50) xor d(49) xor d(48) xor d(45) xor d(43) xor d(42) xor d(40) xor d(39) xor d(32) xor d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(0) xor c(2) xor c(3) xor c(5) xor c(9) xor c(10) xor c(12) xor c(13) xor c(15) xor c(16) xor c(17) xor c(18) xor c(22) xor c(24) xor c(25) xor c(26) xor c(27) xor c(31); + newcrc(28) := d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(112) xor d(110) xor d(109) xor d(107) xor d(106) xor d(102) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(75) xor d(69) xor d(68) xor d(64) xor d(63) xor d(62) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(43) xor d(41) xor d(40) xor d(33) xor d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(1) xor c(3) xor c(4) xor c(6) xor c(10) xor c(11) xor c(13) xor c(14) xor c(16) xor c(17) xor c(18) xor c(19) xor c(23) xor c(25) xor c(26) xor c(27) xor c(28); + newcrc(29) := d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(116) xor d(115) xor d(114) xor d(113) xor d(111) xor d(110) xor d(108) xor d(107) xor d(103) xor d(101) xor d(100) xor d(98) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(76) xor d(70) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(44) xor d(42) xor d(41) xor d(34) xor d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(0) xor c(2) xor c(4) xor c(5) xor c(7) xor c(11) xor c(12) xor c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(20) xor c(24) xor c(26) xor c(27) xor c(28) xor c(29); + newcrc(30) := d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(117) xor d(116) xor d(115) xor d(114) xor d(112) xor d(111) xor d(109) xor d(108) xor d(104) xor d(102) xor d(101) xor d(99) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(77) xor d(71) xor d(70) xor d(66) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(53) xor d(52) xor d(51) xor d(48) xor d(46) xor d(45) xor d(43) xor d(42) xor d(35) xor d(32) xor d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(0) xor c(1) xor c(3) xor c(5) xor c(6) xor c(8) xor c(12) xor c(13) xor c(15) xor c(16) xor c(18) xor c(19) xor c(20) xor c(21) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(31) := d(127) xor d(126) xor d(125) xor d(124) xor d(122) xor d(118) xor d(117) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(109) xor d(105) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(78) xor d(72) xor d(71) xor d(67) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(54) xor d(53) xor d(52) xor d(49) xor d(47) xor d(46) xor d(44) xor d(43) xor d(36) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(0) xor c(1) xor c(2) xor c(4) xor c(6) xor c(7) xor c(9) xor c(13) xor c(14) xor c(16) xor c(17) xor c(19) xor c(20) xor c(21) xor c(22) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + return newcrc; + end nextCRC32_D128; + +end PCK_CRC32_D128; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D16.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D16.vhd new file mode 100755 index 0000000000000000000000000000000000000000..3358f8acec98611a7da6a43d59da8b30bb1c01ad --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D16.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 +-- * data width: 16 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D16 is + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 16 + -- convention: the first serial bit is D[15] + function nextCRC32_D16 + (Data: std_logic_vector(15 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D16; + + +package body PCK_CRC32_D16 is + + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 16 + -- convention: the first serial bit is D[15] + function nextCRC32_D16 + (Data: std_logic_vector(15 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(15 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(16) xor c(22) xor c(25) xor c(26) xor c(28); + newcrc(1) := d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(16) xor c(17) xor c(22) xor c(23) xor c(25) xor c(27) xor c(28) xor c(29); + newcrc(2) := d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(16) xor c(17) xor c(18) xor c(22) xor c(23) xor c(24) xor c(25) xor c(29) xor c(30); + newcrc(3) := d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(17) xor c(18) xor c(19) xor c(23) xor c(24) xor c(25) xor c(26) xor c(30) xor c(31); + newcrc(4) := d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(16) xor c(18) xor c(19) xor c(20) xor c(22) xor c(24) xor c(27) xor c(28) xor c(31); + newcrc(5) := d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(16) xor c(17) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(26) xor c(29); + newcrc(6) := d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(27) xor c(30); + newcrc(7) := d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(16) xor c(18) xor c(19) xor c(21) xor c(23) xor c(24) xor c(26) xor c(31); + newcrc(8) := d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(16) xor c(17) xor c(19) xor c(20) xor c(24) xor c(26) xor c(27) xor c(28); + newcrc(9) := d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(17) xor c(18) xor c(20) xor c(21) xor c(25) xor c(27) xor c(28) xor c(29); + newcrc(10) := d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(16) xor c(18) xor c(19) xor c(21) xor c(25) xor c(29) xor c(30); + newcrc(11) := d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(16) xor c(17) xor c(19) xor c(20) xor c(25) xor c(28) xor c(30) xor c(31); + newcrc(12) := d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(16) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(25) xor c(28) xor c(29) xor c(31); + newcrc(13) := d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(17) xor c(18) xor c(19) xor c(21) xor c(22) xor c(23) xor c(26) xor c(29) xor c(30); + newcrc(14) := d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(24) xor c(27) xor c(30) xor c(31); + newcrc(15) := d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(19) xor c(20) xor c(21) xor c(23) xor c(24) xor c(25) xor c(28) xor c(31); + newcrc(16) := d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(0) xor c(16) xor c(20) xor c(21) xor c(24) xor c(28) xor c(29); + newcrc(17) := d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(1) xor c(17) xor c(21) xor c(22) xor c(25) xor c(29) xor c(30); + newcrc(18) := d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(2) xor c(18) xor c(22) xor c(23) xor c(26) xor c(30) xor c(31); + newcrc(19) := d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(3) xor c(19) xor c(23) xor c(24) xor c(27) xor c(31); + newcrc(20) := d(12) xor d(9) xor d(8) xor d(4) xor c(4) xor c(20) xor c(24) xor c(25) xor c(28); + newcrc(21) := d(13) xor d(10) xor d(9) xor d(5) xor c(5) xor c(21) xor c(25) xor c(26) xor c(29); + newcrc(22) := d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(6) xor c(16) xor c(25) xor c(27) xor c(28) xor c(30); + newcrc(23) := d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(7) xor c(16) xor c(17) xor c(22) xor c(25) xor c(29) xor c(31); + newcrc(24) := d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(8) xor c(17) xor c(18) xor c(23) xor c(26) xor c(30); + newcrc(25) := d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(9) xor c(18) xor c(19) xor c(24) xor c(27) xor c(31); + newcrc(26) := d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(10) xor c(16) xor c(19) xor c(20) xor c(22) xor c(26); + newcrc(27) := d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(11) xor c(17) xor c(20) xor c(21) xor c(23) xor c(27); + newcrc(28) := d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(12) xor c(18) xor c(21) xor c(22) xor c(24) xor c(28); + newcrc(29) := d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(13) xor c(19) xor c(22) xor c(23) xor c(25) xor c(29); + newcrc(30) := d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(14) xor c(20) xor c(23) xor c(24) xor c(26) xor c(30); + newcrc(31) := d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(15) xor c(21) xor c(24) xor c(25) xor c(27) xor c(31); + return newcrc; + end nextCRC32_D16; + +end PCK_CRC32_D16; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D1_reversed.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D1_reversed.vhd new file mode 100755 index 0000000000000000000000000000000000000000..842d62dddb1f4f52826b2593bebb1c946e7d6664 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D1_reversed.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 +-- * data width: 1 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D1_reversed is + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 1 + -- convention: the first serial bit is D[0] + function prevCRC32_D1 + (Data : std_logic; + crc : std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D1_reversed; + + +package body PCK_CRC32_D1_reversed is + + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 1 + -- convention: the first serial bit is D[0] + function prevCRC32_D1 + (Data : std_logic; + crc : std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d : std_logic_vector(0 downto 0); + variable c : std_logic_vector(31 downto 0); + variable old_crc : std_logic_vector(31 downto 0); + + begin + d(0) := Data; + c := crc; + + old_crc(0) := c(0) xor c(1); + old_crc(1) := c(0) xor c(2); + old_crc(2) := c(3); + old_crc(3) := c(0) xor c(4); + old_crc(4) := c(0) xor c(5); + old_crc(5) := c(6); + old_crc(6) := c(0) xor c(7); + old_crc(7) := c(0) xor c(8); + old_crc(8) := c(9); + old_crc(9) := c(0) xor c(10); + old_crc(10) := c(0) xor c(11); + old_crc(11) := c(0) xor c(12); + old_crc(12) := c(13); + old_crc(13) := c(14); + old_crc(14) := c(15); + old_crc(15) := c(0) xor c(16); + old_crc(16) := c(17); + old_crc(17) := c(18); + old_crc(18) := c(19); + old_crc(19) := c(20); + old_crc(20) := c(21); + old_crc(21) := c(0) xor c(22); + old_crc(22) := c(0) xor c(23); + old_crc(23) := c(24); + old_crc(24) := c(25); + old_crc(25) := c(0) xor c(26); + old_crc(26) := c(27); + old_crc(27) := c(28); + old_crc(28) := c(29); + old_crc(29) := c(30); + old_crc(30) := c(31); + old_crc(31) := c(0) xor d(0); + return old_crc; + end prevCRC32_D1; + +end PCK_CRC32_D1_reversed; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D256.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D256.vhd new file mode 100755 index 0000000000000000000000000000000000000000..f85ee6fb9b24e349ad101eb728827b99442b4bb4 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D256.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 +-- * data width: 256 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D256 is + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 256 + -- convention: the first serial bit is D[255] + function nextCRC32_D256 + (Data: std_logic_vector(255 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D256; + + +package body PCK_CRC32_D256 is + + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 256 + -- convention: the first serial bit is D[255] + function nextCRC32_D256 + (Data: std_logic_vector(255 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(255 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(255) xor d(252) xor d(248) xor d(243) xor d(237) xor d(234) xor d(230) xor d(228) xor d(227) xor d(226) xor d(224) xor d(216) xor d(214) xor d(212) xor d(210) xor d(209) xor d(208) xor d(207) xor d(203) xor d(202) xor d(201) xor d(199) xor d(198) xor d(197) xor d(194) xor d(193) xor d(192) xor d(191) xor d(190) xor d(188) xor d(186) xor d(183) xor d(182) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(166) xor d(162) xor d(161) xor d(158) xor d(156) xor d(155) xor d(151) xor d(149) xor d(144) xor d(143) xor d(137) xor d(136) xor d(135) xor d(134) xor d(132) xor d(128) xor d(127) xor d(126) xor d(125) xor d(123) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(111) xor d(110) xor d(106) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(81) xor d(79) xor d(73) xor d(72) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(61) xor d(60) xor d(58) xor d(55) xor d(54) xor d(53) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(37) xor d(34) xor d(32) xor d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(2) xor c(3) xor c(4) xor c(6) xor c(10) xor c(13) xor c(19) xor c(24) xor c(28) xor c(31); + newcrc(1) := d(255) xor d(253) xor d(252) xor d(249) xor d(248) xor d(244) xor d(243) xor d(238) xor d(237) xor d(235) xor d(234) xor d(231) xor d(230) xor d(229) xor d(226) xor d(225) xor d(224) xor d(217) xor d(216) xor d(215) xor d(214) xor d(213) xor d(212) xor d(211) xor d(207) xor d(204) xor d(201) xor d(200) xor d(197) xor d(195) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(182) xor d(173) xor d(169) xor d(168) xor d(166) xor d(163) xor d(161) xor d(159) xor d(158) xor d(157) xor d(155) xor d(152) xor d(151) xor d(150) xor d(149) xor d(145) xor d(143) xor d(138) xor d(134) xor d(133) xor d(132) xor d(129) xor d(125) xor d(124) xor d(123) xor d(120) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(101) xor d(100) xor d(94) xor d(88) xor d(87) xor d(86) xor d(81) xor d(80) xor d(79) xor d(74) xor d(72) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(53) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(44) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(5) xor c(6) xor c(7) xor c(10) xor c(11) xor c(13) xor c(14) xor c(19) xor c(20) xor c(24) xor c(25) xor c(28) xor c(29) xor c(31); + newcrc(2) := d(255) xor d(254) xor d(253) xor d(252) xor d(250) xor d(249) xor d(248) xor d(245) xor d(244) xor d(243) xor d(239) xor d(238) xor d(237) xor d(236) xor d(235) xor d(234) xor d(232) xor d(231) xor d(228) xor d(225) xor d(224) xor d(218) xor d(217) xor d(215) xor d(213) xor d(210) xor d(209) xor d(207) xor d(205) xor d(203) xor d(199) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(189) xor d(187) xor d(186) xor d(185) xor d(182) xor d(174) xor d(172) xor d(171) xor d(166) xor d(164) xor d(161) xor d(160) xor d(159) xor d(155) xor d(153) xor d(152) xor d(150) xor d(149) xor d(146) xor d(143) xor d(139) xor d(137) xor d(136) xor d(133) xor d(132) xor d(130) xor d(128) xor d(127) xor d(124) xor d(123) xor d(121) xor d(119) xor d(118) xor d(110) xor d(108) xor d(107) xor d(102) xor d(99) xor d(98) xor d(97) xor d(96) xor d(94) xor d(89) xor d(88) xor d(85) xor d(84) xor d(83) xor d(80) xor d(79) xor d(75) xor d(72) xor d(70) xor d(68) xor d(67) xor d(64) xor d(59) xor d(58) xor d(57) xor d(55) xor d(53) xor d(52) xor d(51) xor d(44) xor d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(32) xor d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(4) xor c(7) xor c(8) xor c(10) xor c(11) xor c(12) xor c(13) xor c(14) xor c(15) xor c(19) xor c(20) xor c(21) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(3) := d(255) xor d(254) xor d(253) xor d(251) xor d(250) xor d(249) xor d(246) xor d(245) xor d(244) xor d(240) xor d(239) xor d(238) xor d(237) xor d(236) xor d(235) xor d(233) xor d(232) xor d(229) xor d(226) xor d(225) xor d(219) xor d(218) xor d(216) xor d(214) xor d(211) xor d(210) xor d(208) xor d(206) xor d(204) xor d(200) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(190) xor d(188) xor d(187) xor d(186) xor d(183) xor d(175) xor d(173) xor d(172) xor d(167) xor d(165) xor d(162) xor d(161) xor d(160) xor d(156) xor d(154) xor d(153) xor d(151) xor d(150) xor d(147) xor d(144) xor d(140) xor d(138) xor d(137) xor d(134) xor d(133) xor d(131) xor d(129) xor d(128) xor d(125) xor d(124) xor d(122) xor d(120) xor d(119) xor d(111) xor d(109) xor d(108) xor d(103) xor d(100) xor d(99) xor d(98) xor d(97) xor d(95) xor d(90) xor d(89) xor d(86) xor d(85) xor d(84) xor d(81) xor d(80) xor d(76) xor d(73) xor d(71) xor d(69) xor d(68) xor d(65) xor d(60) xor d(59) xor d(58) xor d(56) xor d(54) xor d(53) xor d(52) xor d(45) xor d(40) xor d(39) xor d(38) xor d(37) xor d(36) xor d(33) xor d(32) xor d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(5) xor c(8) xor c(9) xor c(11) xor c(12) xor c(13) xor c(14) xor c(15) xor c(16) xor c(20) xor c(21) xor c(22) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(4) := d(254) xor d(251) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(243) xor d(241) xor d(240) xor d(239) xor d(238) xor d(236) xor d(233) xor d(228) xor d(224) xor d(220) xor d(219) xor d(217) xor d(216) xor d(215) xor d(214) xor d(211) xor d(210) xor d(208) xor d(205) xor d(203) xor d(202) xor d(197) xor d(196) xor d(195) xor d(193) xor d(192) xor d(190) xor d(189) xor d(187) xor d(186) xor d(184) xor d(183) xor d(182) xor d(176) xor d(174) xor d(173) xor d(172) xor d(171) xor d(170) xor d(169) xor d(168) xor d(167) xor d(163) xor d(158) xor d(157) xor d(156) xor d(154) xor d(152) xor d(149) xor d(148) xor d(145) xor d(144) xor d(143) xor d(141) xor d(139) xor d(138) xor d(137) xor d(136) xor d(130) xor d(129) xor d(128) xor d(127) xor d(121) xor d(120) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(106) xor d(103) xor d(100) xor d(97) xor d(95) xor d(94) xor d(91) xor d(90) xor d(86) xor d(84) xor d(83) xor d(79) xor d(77) xor d(74) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(65) xor d(63) xor d(59) xor d(58) xor d(57) xor d(50) xor d(48) xor d(47) xor d(46) xor d(45) xor d(44) xor d(41) xor d(40) xor d(39) xor d(38) xor d(33) xor d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(0) xor c(4) xor c(9) xor c(12) xor c(14) xor c(15) xor c(16) xor c(17) xor c(19) xor c(21) xor c(22) xor c(23) xor c(24) xor c(26) xor c(27) xor c(30); + newcrc(5) := d(251) xor d(249) xor d(247) xor d(246) xor d(244) xor d(243) xor d(242) xor d(241) xor d(240) xor d(239) xor d(230) xor d(229) xor d(228) xor d(227) xor d(226) xor d(225) xor d(224) xor d(221) xor d(220) xor d(218) xor d(217) xor d(215) xor d(214) xor d(211) xor d(210) xor d(208) xor d(207) xor d(206) xor d(204) xor d(202) xor d(201) xor d(199) xor d(196) xor d(192) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(177) xor d(175) xor d(174) xor d(173) xor d(168) xor d(167) xor d(166) xor d(164) xor d(162) xor d(161) xor d(159) xor d(157) xor d(156) xor d(153) xor d(151) xor d(150) xor d(146) xor d(145) xor d(143) xor d(142) xor d(140) xor d(139) xor d(138) xor d(136) xor d(135) xor d(134) xor d(132) xor d(131) xor d(130) xor d(129) xor d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(116) xor d(115) xor d(112) xor d(111) xor d(107) xor d(106) xor d(103) xor d(99) xor d(97) xor d(94) xor d(92) xor d(91) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(69) xor d(67) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(55) xor d(54) xor d(53) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(42) xor d(41) xor d(40) xor d(39) xor d(37) xor d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(15) xor c(16) xor c(17) xor c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(25) xor c(27); + newcrc(6) := d(252) xor d(250) xor d(248) xor d(247) xor d(245) xor d(244) xor d(243) xor d(242) xor d(241) xor d(240) xor d(231) xor d(230) xor d(229) xor d(228) xor d(227) xor d(226) xor d(225) xor d(222) xor d(221) xor d(219) xor d(218) xor d(216) xor d(215) xor d(212) xor d(211) xor d(209) xor d(208) xor d(207) xor d(205) xor d(203) xor d(202) xor d(200) xor d(197) xor d(193) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(178) xor d(176) xor d(175) xor d(174) xor d(169) xor d(168) xor d(167) xor d(165) xor d(163) xor d(162) xor d(160) xor d(158) xor d(157) xor d(154) xor d(152) xor d(151) xor d(147) xor d(146) xor d(144) xor d(143) xor d(141) xor d(140) xor d(139) xor d(137) xor d(136) xor d(135) xor d(133) xor d(132) xor d(131) xor d(130) xor d(128) xor d(127) xor d(126) xor d(124) xor d(123) xor d(122) xor d(121) xor d(117) xor d(116) xor d(113) xor d(112) xor d(108) xor d(107) xor d(104) xor d(100) xor d(98) xor d(95) xor d(93) xor d(92) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(76) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(56) xor d(55) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(43) xor d(42) xor d(41) xor d(40) xor d(38) xor d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(16) xor c(17) xor c(18) xor c(19) xor c(20) xor c(21) xor c(23) xor c(24) xor c(26) xor c(28); + newcrc(7) := d(255) xor d(253) xor d(252) xor d(251) xor d(249) xor d(246) xor d(245) xor d(244) xor d(242) xor d(241) xor d(237) xor d(234) xor d(232) xor d(231) xor d(229) xor d(224) xor d(223) xor d(222) xor d(220) xor d(219) xor d(217) xor d(214) xor d(213) xor d(207) xor d(206) xor d(204) xor d(202) xor d(199) xor d(197) xor d(193) xor d(192) xor d(191) xor d(190) xor d(189) xor d(187) xor d(184) xor d(183) xor d(182) xor d(179) xor d(177) xor d(176) xor d(175) xor d(172) xor d(171) xor d(168) xor d(167) xor d(164) xor d(163) xor d(162) xor d(159) xor d(156) xor d(153) xor d(152) xor d(151) xor d(149) xor d(148) xor d(147) xor d(145) xor d(143) xor d(142) xor d(141) xor d(140) xor d(138) xor d(135) xor d(133) xor d(131) xor d(129) xor d(126) xor d(124) xor d(122) xor d(119) xor d(116) xor d(111) xor d(110) xor d(109) xor d(108) xor d(106) xor d(105) xor d(104) xor d(103) xor d(98) xor d(97) xor d(95) xor d(93) xor d(87) xor d(80) xor d(79) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(69) xor d(68) xor d(60) xor d(58) xor d(57) xor d(56) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(46) xor d(45) xor d(43) xor d(42) xor d(41) xor d(39) xor d(37) xor d(34) xor d(32) xor d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(5) xor c(7) xor c(8) xor c(10) xor c(13) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(25) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(8) := d(255) xor d(254) xor d(253) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(242) xor d(238) xor d(237) xor d(235) xor d(234) xor d(233) xor d(232) xor d(228) xor d(227) xor d(226) xor d(225) xor d(223) xor d(221) xor d(220) xor d(218) xor d(216) xor d(215) xor d(212) xor d(210) xor d(209) xor d(205) xor d(202) xor d(201) xor d(200) xor d(199) xor d(197) xor d(186) xor d(185) xor d(184) xor d(182) xor d(180) xor d(178) xor d(177) xor d(176) xor d(173) xor d(171) xor d(170) xor d(168) xor d(167) xor d(166) xor d(165) xor d(164) xor d(163) xor d(162) xor d(161) xor d(160) xor d(158) xor d(157) xor d(156) xor d(155) xor d(154) xor d(153) xor d(152) xor d(151) xor d(150) xor d(148) xor d(146) xor d(142) xor d(141) xor d(139) xor d(137) xor d(135) xor d(130) xor d(128) xor d(126) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(113) xor d(112) xor d(109) xor d(107) xor d(105) xor d(103) xor d(101) xor d(97) xor d(95) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(60) xor d(59) xor d(57) xor d(54) xor d(52) xor d(51) xor d(50) xor d(46) xor d(45) xor d(43) xor d(42) xor d(40) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(32) xor d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(8) xor c(9) xor c(10) xor c(11) xor c(13) xor c(14) xor c(18) xor c(21) xor c(22) xor c(23) xor c(24) xor c(26) xor c(29) xor c(30) xor c(31); + newcrc(9) := d(255) xor d(254) xor d(251) xor d(249) xor d(248) xor d(247) xor d(246) xor d(243) xor d(239) xor d(238) xor d(236) xor d(235) xor d(234) xor d(233) xor d(229) xor d(228) xor d(227) xor d(226) xor d(224) xor d(222) xor d(221) xor d(219) xor d(217) xor d(216) xor d(213) xor d(211) xor d(210) xor d(206) xor d(203) xor d(202) xor d(201) xor d(200) xor d(198) xor d(187) xor d(186) xor d(185) xor d(183) xor d(181) xor d(179) xor d(178) xor d(177) xor d(174) xor d(172) xor d(171) xor d(169) xor d(168) xor d(167) xor d(166) xor d(165) xor d(164) xor d(163) xor d(162) xor d(161) xor d(159) xor d(158) xor d(157) xor d(156) xor d(155) xor d(154) xor d(153) xor d(152) xor d(151) xor d(149) xor d(147) xor d(143) xor d(142) xor d(140) xor d(138) xor d(136) xor d(131) xor d(129) xor d(127) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(114) xor d(113) xor d(110) xor d(108) xor d(106) xor d(104) xor d(102) xor d(98) xor d(96) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(71) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(64) xor d(61) xor d(60) xor d(58) xor d(55) xor d(53) xor d(52) xor d(51) xor d(47) xor d(46) xor d(44) xor d(43) xor d(41) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(33) xor d(32) xor d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(0) xor c(2) xor c(3) xor c(4) xor c(5) xor c(9) xor c(10) xor c(11) xor c(12) xor c(14) xor c(15) xor c(19) xor c(22) xor c(23) xor c(24) xor c(25) xor c(27) xor c(30) xor c(31); + newcrc(10) := d(250) xor d(249) xor d(247) xor d(244) xor d(243) xor d(240) xor d(239) xor d(236) xor d(235) xor d(229) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(220) xor d(218) xor d(217) xor d(216) xor d(211) xor d(210) xor d(209) xor d(208) xor d(204) xor d(198) xor d(197) xor d(194) xor d(193) xor d(192) xor d(191) xor d(190) xor d(187) xor d(184) xor d(183) xor d(180) xor d(179) xor d(178) xor d(175) xor d(173) xor d(171) xor d(168) xor d(165) xor d(164) xor d(163) xor d(161) xor d(160) xor d(159) xor d(157) xor d(154) xor d(153) xor d(152) xor d(151) xor d(150) xor d(149) xor d(148) xor d(141) xor d(139) xor d(136) xor d(135) xor d(134) xor d(130) xor d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(110) xor d(109) xor d(107) xor d(106) xor d(105) xor d(104) xor d(101) xor d(98) xor d(96) xor d(95) xor d(94) xor d(90) xor d(89) xor d(86) xor d(83) xor d(80) xor d(78) xor d(77) xor d(75) xor d(73) xor d(71) xor d(70) xor d(69) xor d(66) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(55) xor d(52) xor d(50) xor d(42) xor d(40) xor d(39) xor d(36) xor d(35) xor d(33) xor d(32) xor d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(1) xor c(2) xor c(5) xor c(11) xor c(12) xor c(15) xor c(16) xor c(19) xor c(20) xor c(23) xor c(25) xor c(26); + newcrc(11) := d(255) xor d(252) xor d(251) xor d(250) xor d(245) xor d(244) xor d(243) xor d(241) xor d(240) xor d(236) xor d(234) xor d(228) xor d(225) xor d(223) xor d(221) xor d(219) xor d(218) xor d(217) xor d(216) xor d(214) xor d(211) xor d(208) xor d(207) xor d(205) xor d(203) xor d(202) xor d(201) xor d(197) xor d(195) xor d(190) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(181) xor d(180) xor d(179) xor d(176) xor d(174) xor d(171) xor d(170) xor d(167) xor d(165) xor d(164) xor d(160) xor d(156) xor d(154) xor d(153) xor d(152) xor d(150) xor d(144) xor d(143) xor d(142) xor d(140) xor d(134) xor d(132) xor d(131) xor d(125) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(108) xor d(107) xor d(105) xor d(104) xor d(103) xor d(102) xor d(101) xor d(98) xor d(94) xor d(91) xor d(90) xor d(85) xor d(83) xor d(82) xor d(78) xor d(76) xor d(74) xor d(73) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(59) xor d(58) xor d(57) xor d(56) xor d(55) xor d(54) xor d(51) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(40) xor d(36) xor d(33) xor d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(1) xor c(4) xor c(10) xor c(12) xor c(16) xor c(17) xor c(19) xor c(20) xor c(21) xor c(26) xor c(27) xor c(28) xor c(31); + newcrc(12) := d(255) xor d(253) xor d(251) xor d(248) xor d(246) xor d(245) xor d(244) xor d(243) xor d(242) xor d(241) xor d(235) xor d(234) xor d(230) xor d(229) xor d(228) xor d(227) xor d(222) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(215) xor d(214) xor d(210) xor d(207) xor d(206) xor d(204) xor d(201) xor d(199) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(190) xor d(188) xor d(187) xor d(185) xor d(184) xor d(181) xor d(180) xor d(177) xor d(175) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(162) xor d(158) xor d(157) xor d(156) xor d(154) xor d(153) xor d(149) xor d(145) xor d(141) xor d(137) xor d(136) xor d(134) xor d(133) xor d(128) xor d(127) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(111) xor d(110) xor d(109) xor d(108) xor d(105) xor d(102) xor d(101) xor d(98) xor d(97) xor d(96) xor d(94) xor d(92) xor d(91) xor d(87) xor d(86) xor d(85) xor d(82) xor d(81) xor d(77) xor d(75) xor d(74) xor d(73) xor d(71) xor d(69) xor d(68) xor d(63) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(41) xor d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(3) xor c(4) xor c(5) xor c(6) xor c(10) xor c(11) xor c(17) xor c(18) xor c(19) xor c(20) xor c(21) xor c(22) xor c(24) xor c(27) xor c(29) xor c(31); + newcrc(13) := d(254) xor d(252) xor d(249) xor d(247) xor d(246) xor d(245) xor d(244) xor d(243) xor d(242) xor d(236) xor d(235) xor d(231) xor d(230) xor d(229) xor d(228) xor d(223) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(215) xor d(211) xor d(208) xor d(207) xor d(205) xor d(202) xor d(200) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(191) xor d(189) xor d(188) xor d(186) xor d(185) xor d(182) xor d(181) xor d(178) xor d(176) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(163) xor d(159) xor d(158) xor d(157) xor d(155) xor d(154) xor d(150) xor d(146) xor d(142) xor d(138) xor d(137) xor d(135) xor d(134) xor d(129) xor d(128) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(112) xor d(111) xor d(110) xor d(109) xor d(106) xor d(103) xor d(102) xor d(99) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(88) xor d(87) xor d(86) xor d(83) xor d(82) xor d(78) xor d(76) xor d(75) xor d(74) xor d(72) xor d(70) xor d(69) xor d(64) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(42) xor d(32) xor d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(4) xor c(5) xor c(6) xor c(7) xor c(11) xor c(12) xor c(18) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(25) xor c(28) xor c(30); + newcrc(14) := d(255) xor d(253) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(244) xor d(243) xor d(237) xor d(236) xor d(232) xor d(231) xor d(230) xor d(229) xor d(224) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(212) xor d(209) xor d(208) xor d(206) xor d(203) xor d(201) xor d(199) xor d(198) xor d(196) xor d(195) xor d(194) xor d(192) xor d(190) xor d(189) xor d(187) xor d(186) xor d(183) xor d(182) xor d(179) xor d(177) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(164) xor d(160) xor d(159) xor d(158) xor d(156) xor d(155) xor d(151) xor d(147) xor d(143) xor d(139) xor d(138) xor d(136) xor d(135) xor d(130) xor d(129) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(113) xor d(112) xor d(111) xor d(110) xor d(107) xor d(104) xor d(103) xor d(100) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(89) xor d(88) xor d(87) xor d(84) xor d(83) xor d(79) xor d(77) xor d(76) xor d(75) xor d(73) xor d(71) xor d(70) xor d(65) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(43) xor d(33) xor d(32) xor d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(0) xor c(5) xor c(6) xor c(7) xor c(8) xor c(12) xor c(13) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(26) xor c(29) xor c(31); + newcrc(15) := d(254) xor d(251) xor d(249) xor d(248) xor d(247) xor d(246) xor d(245) xor d(244) xor d(238) xor d(237) xor d(233) xor d(232) xor d(231) xor d(230) xor d(225) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(213) xor d(210) xor d(209) xor d(207) xor d(204) xor d(202) xor d(200) xor d(199) xor d(197) xor d(196) xor d(195) xor d(193) xor d(191) xor d(190) xor d(188) xor d(187) xor d(184) xor d(183) xor d(180) xor d(178) xor d(173) xor d(172) xor d(171) xor d(170) xor d(168) xor d(165) xor d(161) xor d(160) xor d(159) xor d(157) xor d(156) xor d(152) xor d(148) xor d(144) xor d(140) xor d(139) xor d(137) xor d(136) xor d(131) xor d(130) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(90) xor d(89) xor d(88) xor d(85) xor d(84) xor d(80) xor d(78) xor d(77) xor d(76) xor d(74) xor d(72) xor d(71) xor d(66) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(50) xor d(49) xor d(45) xor d(44) xor d(34) xor d(33) xor d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(1) xor c(6) xor c(7) xor c(8) xor c(9) xor c(13) xor c(14) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(25) xor c(27) xor c(30); + newcrc(16) := d(250) xor d(249) xor d(247) xor d(246) xor d(245) xor d(243) xor d(239) xor d(238) xor d(237) xor d(233) xor d(232) xor d(231) xor d(230) xor d(228) xor d(227) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(216) xor d(212) xor d(211) xor d(209) xor d(207) xor d(205) xor d(202) xor d(200) xor d(199) xor d(196) xor d(193) xor d(190) xor d(189) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(181) xor d(179) xor d(174) xor d(173) xor d(170) xor d(167) xor d(160) xor d(157) xor d(156) xor d(155) xor d(153) xor d(151) xor d(145) xor d(144) xor d(143) xor d(141) xor d(140) xor d(138) xor d(136) xor d(135) xor d(134) xor d(131) xor d(128) xor d(127) xor d(124) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(115) xor d(112) xor d(111) xor d(110) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(99) xor d(97) xor d(94) xor d(91) xor d(90) xor d(89) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(78) xor d(77) xor d(75) xor d(68) xor d(66) xor d(57) xor d(56) xor d(51) xor d(48) xor d(47) xor d(46) xor d(44) xor d(37) xor d(35) xor d(32) xor d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(3) xor c(4) xor c(6) xor c(7) xor c(8) xor c(9) xor c(13) xor c(14) xor c(15) xor c(19) xor c(21) xor c(22) xor c(23) xor c(25) xor c(26); + newcrc(17) := d(251) xor d(250) xor d(248) xor d(247) xor d(246) xor d(244) xor d(240) xor d(239) xor d(238) xor d(234) xor d(233) xor d(232) xor d(231) xor d(229) xor d(228) xor d(224) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(217) xor d(213) xor d(212) xor d(210) xor d(208) xor d(206) xor d(203) xor d(201) xor d(200) xor d(197) xor d(194) xor d(191) xor d(190) xor d(187) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(180) xor d(175) xor d(174) xor d(171) xor d(168) xor d(161) xor d(158) xor d(157) xor d(156) xor d(154) xor d(152) xor d(146) xor d(145) xor d(144) xor d(142) xor d(141) xor d(139) xor d(137) xor d(136) xor d(135) xor d(132) xor d(129) xor d(128) xor d(125) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(112) xor d(111) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(100) xor d(98) xor d(95) xor d(92) xor d(91) xor d(90) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(79) xor d(78) xor d(76) xor d(69) xor d(67) xor d(58) xor d(57) xor d(52) xor d(49) xor d(48) xor d(47) xor d(45) xor d(38) xor d(36) xor d(33) xor d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(0) xor c(4) xor c(5) xor c(7) xor c(8) xor c(9) xor c(10) xor c(14) xor c(15) xor c(16) xor c(20) xor c(22) xor c(23) xor c(24) xor c(26) xor c(27); + newcrc(18) := d(252) xor d(251) xor d(249) xor d(248) xor d(247) xor d(245) xor d(241) xor d(240) xor d(239) xor d(235) xor d(234) xor d(233) xor d(232) xor d(230) xor d(229) xor d(225) xor d(224) xor d(223) xor d(222) xor d(221) xor d(220) xor d(218) xor d(214) xor d(213) xor d(211) xor d(209) xor d(207) xor d(204) xor d(202) xor d(201) xor d(198) xor d(195) xor d(192) xor d(191) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(183) xor d(181) xor d(176) xor d(175) xor d(172) xor d(169) xor d(162) xor d(159) xor d(158) xor d(157) xor d(155) xor d(153) xor d(147) xor d(146) xor d(145) xor d(143) xor d(142) xor d(140) xor d(138) xor d(137) xor d(136) xor d(133) xor d(130) xor d(129) xor d(126) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(113) xor d(112) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(101) xor d(99) xor d(96) xor d(93) xor d(92) xor d(91) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(80) xor d(79) xor d(77) xor d(70) xor d(68) xor d(59) xor d(58) xor d(53) xor d(50) xor d(49) xor d(48) xor d(46) xor d(39) xor d(37) xor d(34) xor d(32) xor d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(0) xor c(1) xor c(5) xor c(6) xor c(8) xor c(9) xor c(10) xor c(11) xor c(15) xor c(16) xor c(17) xor c(21) xor c(23) xor c(24) xor c(25) xor c(27) xor c(28); + newcrc(19) := d(253) xor d(252) xor d(250) xor d(249) xor d(248) xor d(246) xor d(242) xor d(241) xor d(240) xor d(236) xor d(235) xor d(234) xor d(233) xor d(231) xor d(230) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(221) xor d(219) xor d(215) xor d(214) xor d(212) xor d(210) xor d(208) xor d(205) xor d(203) xor d(202) xor d(199) xor d(196) xor d(193) xor d(192) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(177) xor d(176) xor d(173) xor d(170) xor d(163) xor d(160) xor d(159) xor d(158) xor d(156) xor d(154) xor d(148) xor d(147) xor d(146) xor d(144) xor d(143) xor d(141) xor d(139) xor d(138) xor d(137) xor d(134) xor d(131) xor d(130) xor d(127) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(114) xor d(113) xor d(112) xor d(108) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(100) xor d(97) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(87) xor d(86) xor d(85) xor d(81) xor d(80) xor d(78) xor d(71) xor d(69) xor d(60) xor d(59) xor d(54) xor d(51) xor d(50) xor d(49) xor d(47) xor d(40) xor d(38) xor d(35) xor d(33) xor d(32) xor d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(0) xor c(1) xor c(2) xor c(6) xor c(7) xor c(9) xor c(10) xor c(11) xor c(12) xor c(16) xor c(17) xor c(18) xor c(22) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29); + newcrc(20) := d(254) xor d(253) xor d(251) xor d(250) xor d(249) xor d(247) xor d(243) xor d(242) xor d(241) xor d(237) xor d(236) xor d(235) xor d(234) xor d(232) xor d(231) xor d(227) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(220) xor d(216) xor d(215) xor d(213) xor d(211) xor d(209) xor d(206) xor d(204) xor d(203) xor d(200) xor d(197) xor d(194) xor d(193) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(178) xor d(177) xor d(174) xor d(171) xor d(164) xor d(161) xor d(160) xor d(159) xor d(157) xor d(155) xor d(149) xor d(148) xor d(147) xor d(145) xor d(144) xor d(142) xor d(140) xor d(139) xor d(138) xor d(135) xor d(132) xor d(131) xor d(128) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(107) xor d(106) xor d(104) xor d(103) xor d(101) xor d(98) xor d(95) xor d(94) xor d(93) xor d(91) xor d(90) xor d(88) xor d(87) xor d(86) xor d(82) xor d(81) xor d(79) xor d(72) xor d(70) xor d(61) xor d(60) xor d(55) xor d(52) xor d(51) xor d(50) xor d(48) xor d(41) xor d(39) xor d(36) xor d(34) xor d(33) xor d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(0) xor c(1) xor c(2) xor c(3) xor c(7) xor c(8) xor c(10) xor c(11) xor c(12) xor c(13) xor c(17) xor c(18) xor c(19) xor c(23) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30); + newcrc(21) := d(255) xor d(254) xor d(252) xor d(251) xor d(250) xor d(248) xor d(244) xor d(243) xor d(242) xor d(238) xor d(237) xor d(236) xor d(235) xor d(233) xor d(232) xor d(228) xor d(227) xor d(226) xor d(225) xor d(224) xor d(223) xor d(221) xor d(217) xor d(216) xor d(214) xor d(212) xor d(210) xor d(207) xor d(205) xor d(204) xor d(201) xor d(198) xor d(195) xor d(194) xor d(191) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(179) xor d(178) xor d(175) xor d(172) xor d(165) xor d(162) xor d(161) xor d(160) xor d(158) xor d(156) xor d(150) xor d(149) xor d(148) xor d(146) xor d(145) xor d(143) xor d(141) xor d(140) xor d(139) xor d(136) xor d(133) xor d(132) xor d(129) xor d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(120) xor d(117) xor d(116) xor d(115) xor d(114) xor d(110) xor d(109) xor d(108) xor d(107) xor d(105) xor d(104) xor d(102) xor d(99) xor d(96) xor d(95) xor d(94) xor d(92) xor d(91) xor d(89) xor d(88) xor d(87) xor d(83) xor d(82) xor d(80) xor d(73) xor d(71) xor d(62) xor d(61) xor d(56) xor d(53) xor d(52) xor d(51) xor d(49) xor d(42) xor d(40) xor d(37) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(8) xor c(9) xor c(11) xor c(12) xor c(13) xor c(14) xor c(18) xor c(19) xor c(20) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(22) := d(253) xor d(251) xor d(249) xor d(248) xor d(245) xor d(244) xor d(239) xor d(238) xor d(236) xor d(233) xor d(230) xor d(229) xor d(225) xor d(222) xor d(218) xor d(217) xor d(216) xor d(215) xor d(214) xor d(213) xor d(212) xor d(211) xor d(210) xor d(209) xor d(207) xor d(206) xor d(205) xor d(203) xor d(201) xor d(198) xor d(197) xor d(196) xor d(195) xor d(194) xor d(193) xor d(189) xor d(187) xor d(186) xor d(185) xor d(183) xor d(182) xor d(180) xor d(179) xor d(176) xor d(173) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(163) xor d(159) xor d(158) xor d(157) xor d(156) xor d(155) xor d(150) xor d(147) xor d(146) xor d(143) xor d(142) xor d(141) xor d(140) xor d(136) xor d(135) xor d(133) xor d(132) xor d(130) xor d(128) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(98) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(88) xor d(87) xor d(85) xor d(82) xor d(79) xor d(74) xor d(73) xor d(68) xor d(67) xor d(66) xor d(65) xor d(62) xor d(61) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(1) xor c(5) xor c(6) xor c(9) xor c(12) xor c(14) xor c(15) xor c(20) xor c(21) xor c(24) xor c(25) xor c(27) xor c(29); + newcrc(23) := d(255) xor d(254) xor d(250) xor d(249) xor d(248) xor d(246) xor d(245) xor d(243) xor d(240) xor d(239) xor d(231) xor d(228) xor d(227) xor d(224) xor d(223) xor d(219) xor d(218) xor d(217) xor d(215) xor d(213) xor d(211) xor d(209) xor d(206) xor d(204) xor d(203) xor d(201) xor d(196) xor d(195) xor d(193) xor d(192) xor d(191) xor d(187) xor d(184) xor d(182) xor d(181) xor d(180) xor d(177) xor d(174) xor d(173) xor d(169) xor d(168) xor d(167) xor d(166) xor d(164) xor d(162) xor d(161) xor d(160) xor d(159) xor d(157) xor d(155) xor d(149) xor d(148) xor d(147) xor d(142) xor d(141) xor d(135) xor d(133) xor d(132) xor d(131) xor d(129) xor d(128) xor d(127) xor d(126) xor d(124) xor d(122) xor d(120) xor d(119) xor d(118) xor d(117) xor d(115) xor d(113) xor d(111) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(93) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(75) xor d(74) xor d(73) xor d(72) xor d(69) xor d(65) xor d(62) xor d(60) xor d(59) xor d(56) xor d(55) xor d(54) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(0) xor c(3) xor c(4) xor c(7) xor c(15) xor c(16) xor c(19) xor c(21) xor c(22) xor c(24) xor c(25) xor c(26) xor c(30) xor c(31); + newcrc(24) := d(255) xor d(251) xor d(250) xor d(249) xor d(247) xor d(246) xor d(244) xor d(241) xor d(240) xor d(232) xor d(229) xor d(228) xor d(225) xor d(224) xor d(220) xor d(219) xor d(218) xor d(216) xor d(214) xor d(212) xor d(210) xor d(207) xor d(205) xor d(204) xor d(202) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(188) xor d(185) xor d(183) xor d(182) xor d(181) xor d(178) xor d(175) xor d(174) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(163) xor d(162) xor d(161) xor d(160) xor d(158) xor d(156) xor d(150) xor d(149) xor d(148) xor d(143) xor d(142) xor d(136) xor d(134) xor d(133) xor d(132) xor d(130) xor d(129) xor d(128) xor d(127) xor d(125) xor d(123) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(112) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(94) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(76) xor d(75) xor d(74) xor d(73) xor d(70) xor d(66) xor d(63) xor d(61) xor d(60) xor d(57) xor d(56) xor d(55) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(40) xor d(39) xor d(37) xor d(36) xor d(35) xor d(32) xor d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(0) xor c(1) xor c(4) xor c(5) xor c(8) xor c(16) xor c(17) xor c(20) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(31); + newcrc(25) := d(252) xor d(251) xor d(250) xor d(248) xor d(247) xor d(245) xor d(242) xor d(241) xor d(233) xor d(230) xor d(229) xor d(226) xor d(225) xor d(221) xor d(220) xor d(219) xor d(217) xor d(215) xor d(213) xor d(211) xor d(208) xor d(206) xor d(205) xor d(203) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(189) xor d(186) xor d(184) xor d(183) xor d(182) xor d(179) xor d(176) xor d(175) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(164) xor d(163) xor d(162) xor d(161) xor d(159) xor d(157) xor d(151) xor d(150) xor d(149) xor d(144) xor d(143) xor d(137) xor d(135) xor d(134) xor d(133) xor d(131) xor d(130) xor d(129) xor d(128) xor d(126) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(100) xor d(99) xor d(98) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(67) xor d(64) xor d(62) xor d(61) xor d(58) xor d(57) xor d(56) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(41) xor d(40) xor d(38) xor d(37) xor d(36) xor d(33) xor d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(1) xor c(2) xor c(5) xor c(6) xor c(9) xor c(17) xor c(18) xor c(21) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28); + newcrc(26) := d(255) xor d(253) xor d(251) xor d(249) xor d(246) xor d(242) xor d(237) xor d(231) xor d(228) xor d(224) xor d(222) xor d(221) xor d(220) xor d(218) xor d(210) xor d(208) xor d(206) xor d(204) xor d(203) xor d(202) xor d(201) xor d(197) xor d(196) xor d(195) xor d(193) xor d(192) xor d(191) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(180) xor d(177) xor d(176) xor d(166) xor d(165) xor d(164) xor d(163) xor d(161) xor d(160) xor d(156) xor d(155) xor d(152) xor d(150) xor d(149) xor d(145) xor d(143) xor d(138) xor d(137) xor d(131) xor d(130) xor d(129) xor d(128) xor d(126) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(112) xor d(111) xor d(110) xor d(108) xor d(107) xor d(105) xor d(104) xor d(100) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(81) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(67) xor d(66) xor d(62) xor d(61) xor d(60) xor d(59) xor d(57) xor d(55) xor d(54) xor d(52) xor d(49) xor d(48) xor d(47) xor d(44) xor d(42) xor d(41) xor d(39) xor d(38) xor d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(0) xor c(4) xor c(7) xor c(13) xor c(18) xor c(22) xor c(25) xor c(27) xor c(29) xor c(31); + newcrc(27) := d(254) xor d(252) xor d(250) xor d(247) xor d(243) xor d(238) xor d(232) xor d(229) xor d(225) xor d(223) xor d(222) xor d(221) xor d(219) xor d(211) xor d(209) xor d(207) xor d(205) xor d(204) xor d(203) xor d(202) xor d(198) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(181) xor d(178) xor d(177) xor d(167) xor d(166) xor d(165) xor d(164) xor d(162) xor d(161) xor d(157) xor d(156) xor d(153) xor d(151) xor d(150) xor d(146) xor d(144) xor d(139) xor d(138) xor d(132) xor d(131) xor d(130) xor d(129) xor d(127) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(108) xor d(106) xor d(105) xor d(101) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(68) xor d(67) xor d(63) xor d(62) xor d(61) xor d(60) xor d(58) xor d(56) xor d(55) xor d(53) xor d(50) xor d(49) xor d(48) xor d(45) xor d(43) xor d(42) xor d(40) xor d(39) xor d(32) xor d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(1) xor c(5) xor c(8) xor c(14) xor c(19) xor c(23) xor c(26) xor c(28) xor c(30); + newcrc(28) := d(255) xor d(253) xor d(251) xor d(248) xor d(244) xor d(239) xor d(233) xor d(230) xor d(226) xor d(224) xor d(223) xor d(222) xor d(220) xor d(212) xor d(210) xor d(208) xor d(206) xor d(205) xor d(204) xor d(203) xor d(199) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(182) xor d(179) xor d(178) xor d(168) xor d(167) xor d(166) xor d(165) xor d(163) xor d(162) xor d(158) xor d(157) xor d(154) xor d(152) xor d(151) xor d(147) xor d(145) xor d(140) xor d(139) xor d(133) xor d(132) xor d(131) xor d(130) xor d(128) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(112) xor d(110) xor d(109) xor d(107) xor d(106) xor d(102) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(75) xor d(69) xor d(68) xor d(64) xor d(63) xor d(62) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(43) xor d(41) xor d(40) xor d(33) xor d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(0) xor c(2) xor c(6) xor c(9) xor c(15) xor c(20) xor c(24) xor c(27) xor c(29) xor c(31); + newcrc(29) := d(254) xor d(252) xor d(249) xor d(245) xor d(240) xor d(234) xor d(231) xor d(227) xor d(225) xor d(224) xor d(223) xor d(221) xor d(213) xor d(211) xor d(209) xor d(207) xor d(206) xor d(205) xor d(204) xor d(200) xor d(199) xor d(198) xor d(196) xor d(195) xor d(194) xor d(191) xor d(190) xor d(189) xor d(188) xor d(187) xor d(185) xor d(183) xor d(180) xor d(179) xor d(169) xor d(168) xor d(167) xor d(166) xor d(164) xor d(163) xor d(159) xor d(158) xor d(155) xor d(153) xor d(152) xor d(148) xor d(146) xor d(141) xor d(140) xor d(134) xor d(133) xor d(132) xor d(131) xor d(129) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(116) xor d(115) xor d(114) xor d(113) xor d(111) xor d(110) xor d(108) xor d(107) xor d(103) xor d(101) xor d(100) xor d(98) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(76) xor d(70) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(44) xor d(42) xor d(41) xor d(34) xor d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(0) xor c(1) xor c(3) xor c(7) xor c(10) xor c(16) xor c(21) xor c(25) xor c(28) xor c(30); + newcrc(30) := d(255) xor d(253) xor d(250) xor d(246) xor d(241) xor d(235) xor d(232) xor d(228) xor d(226) xor d(225) xor d(224) xor d(222) xor d(214) xor d(212) xor d(210) xor d(208) xor d(207) xor d(206) xor d(205) xor d(201) xor d(200) xor d(199) xor d(197) xor d(196) xor d(195) xor d(192) xor d(191) xor d(190) xor d(189) xor d(188) xor d(186) xor d(184) xor d(181) xor d(180) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(164) xor d(160) xor d(159) xor d(156) xor d(154) xor d(153) xor d(149) xor d(147) xor d(142) xor d(141) xor d(135) xor d(134) xor d(133) xor d(132) xor d(130) xor d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(117) xor d(116) xor d(115) xor d(114) xor d(112) xor d(111) xor d(109) xor d(108) xor d(104) xor d(102) xor d(101) xor d(99) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(77) xor d(71) xor d(70) xor d(66) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(53) xor d(52) xor d(51) xor d(48) xor d(46) xor d(45) xor d(43) xor d(42) xor d(35) xor d(32) xor d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(0) xor c(1) xor c(2) xor c(4) xor c(8) xor c(11) xor c(17) xor c(22) xor c(26) xor c(29) xor c(31); + newcrc(31) := d(254) xor d(251) xor d(247) xor d(242) xor d(236) xor d(233) xor d(229) xor d(227) xor d(226) xor d(225) xor d(223) xor d(215) xor d(213) xor d(211) xor d(209) xor d(208) xor d(207) xor d(206) xor d(202) xor d(201) xor d(200) xor d(198) xor d(197) xor d(196) xor d(193) xor d(192) xor d(191) xor d(190) xor d(189) xor d(187) xor d(185) xor d(182) xor d(181) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(165) xor d(161) xor d(160) xor d(157) xor d(155) xor d(154) xor d(150) xor d(148) xor d(143) xor d(142) xor d(136) xor d(135) xor d(134) xor d(133) xor d(131) xor d(127) xor d(126) xor d(125) xor d(124) xor d(122) xor d(118) xor d(117) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(109) xor d(105) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(78) xor d(72) xor d(71) xor d(67) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(54) xor d(53) xor d(52) xor d(49) xor d(47) xor d(46) xor d(44) xor d(43) xor d(36) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(1) xor c(2) xor c(3) xor c(5) xor c(9) xor c(12) xor c(18) xor c(23) xor c(27) xor c(30); + return newcrc; + end nextCRC32_D256; + +end PCK_CRC32_D256; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D32.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D32.vhd new file mode 100755 index 0000000000000000000000000000000000000000..1b30aa6c4f9976d3e2db4262d6fee75ed41ad196 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D32.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 +-- * data width: 32 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D32 is + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC32_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D32; + + +package body PCK_CRC32_D32 is + + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 32 + -- convention: the first serial bit is D[31] + function nextCRC32_D32 + (Data: std_logic_vector(31 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(31 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(6) xor c(9) xor c(10) xor c(12) xor c(16) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(1) := d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(0) xor c(1) xor c(6) xor c(7) xor c(9) xor c(11) xor c(12) xor c(13) xor c(16) xor c(17) xor c(24) xor c(27) xor c(28); + newcrc(2) := d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(6) xor c(7) xor c(8) xor c(9) xor c(13) xor c(14) xor c(16) xor c(17) xor c(18) xor c(24) xor c(26) xor c(30) xor c(31); + newcrc(3) := d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(7) xor c(8) xor c(9) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(25) xor c(27) xor c(31); + newcrc(4) := d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(3) xor c(4) xor c(6) xor c(8) xor c(11) xor c(12) xor c(15) xor c(18) xor c(19) xor c(20) xor c(24) xor c(25) xor c(29) xor c(30) xor c(31); + newcrc(5) := d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(10) xor c(13) xor c(19) xor c(20) xor c(21) xor c(24) xor c(28) xor c(29); + newcrc(6) := d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(2) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(11) xor c(14) xor c(20) xor c(21) xor c(22) xor c(25) xor c(29) xor c(30); + newcrc(7) := d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(3) xor c(5) xor c(7) xor c(8) xor c(10) xor c(15) xor c(16) xor c(21) xor c(22) xor c(23) xor c(24) xor c(25) xor c(28) xor c(29); + newcrc(8) := d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(8) xor c(10) xor c(11) xor c(12) xor c(17) xor c(22) xor c(23) xor c(28) xor c(31); + newcrc(9) := d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(2) xor c(4) xor c(5) xor c(9) xor c(11) xor c(12) xor c(13) xor c(18) xor c(23) xor c(24) xor c(29); + newcrc(10) := d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(3) xor c(5) xor c(9) xor c(13) xor c(14) xor c(16) xor c(19) xor c(26) xor c(28) xor c(29) xor c(31); + newcrc(11) := d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(9) xor c(12) xor c(14) xor c(15) xor c(16) xor c(17) xor c(20) xor c(24) xor c(25) xor c(26) xor c(27) xor c(28) xor c(31); + newcrc(12) := d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(4) xor c(5) xor c(6) xor c(9) xor c(12) xor c(13) xor c(15) xor c(17) xor c(18) xor c(21) xor c(24) xor c(27) xor c(30) xor c(31); + newcrc(13) := d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(1) xor c(2) xor c(3) xor c(5) xor c(6) xor c(7) xor c(10) xor c(13) xor c(14) xor c(16) xor c(18) xor c(19) xor c(22) xor c(25) xor c(28) xor c(31); + newcrc(14) := d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor c(8) xor c(11) xor c(14) xor c(15) xor c(17) xor c(19) xor c(20) xor c(23) xor c(26) xor c(29); + newcrc(15) := d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(3) xor c(4) xor c(5) xor c(7) xor c(8) xor c(9) xor c(12) xor c(15) xor c(16) xor c(18) xor c(20) xor c(21) xor c(24) xor c(27) xor c(30); + newcrc(16) := d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(0) xor c(4) xor c(5) xor c(8) xor c(12) xor c(13) xor c(17) xor c(19) xor c(21) xor c(22) xor c(24) xor c(26) xor c(29) xor c(30); + newcrc(17) := d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(1) xor c(5) xor c(6) xor c(9) xor c(13) xor c(14) xor c(18) xor c(20) xor c(22) xor c(23) xor c(25) xor c(27) xor c(30) xor c(31); + newcrc(18) := d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(2) xor c(6) xor c(7) xor c(10) xor c(14) xor c(15) xor c(19) xor c(21) xor c(23) xor c(24) xor c(26) xor c(28) xor c(31); + newcrc(19) := d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(3) xor c(7) xor c(8) xor c(11) xor c(15) xor c(16) xor c(20) xor c(22) xor c(24) xor c(25) xor c(27) xor c(29); + newcrc(20) := d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(4) xor c(8) xor c(9) xor c(12) xor c(16) xor c(17) xor c(21) xor c(23) xor c(25) xor c(26) xor c(28) xor c(30); + newcrc(21) := d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(5) xor c(9) xor c(10) xor c(13) xor c(17) xor c(18) xor c(22) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(22) := d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(0) xor c(9) xor c(11) xor c(12) xor c(14) xor c(16) xor c(18) xor c(19) xor c(23) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(23) := d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(0) xor c(1) xor c(6) xor c(9) xor c(13) xor c(15) xor c(16) xor c(17) xor c(19) xor c(20) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(24) := d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(1) xor c(2) xor c(7) xor c(10) xor c(14) xor c(16) xor c(17) xor c(18) xor c(20) xor c(21) xor c(27) xor c(28) xor c(30); + newcrc(25) := d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(2) xor c(3) xor c(8) xor c(11) xor c(15) xor c(17) xor c(18) xor c(19) xor c(21) xor c(22) xor c(28) xor c(29) xor c(31); + newcrc(26) := d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(0) xor c(3) xor c(4) xor c(6) xor c(10) xor c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(24) xor c(25) xor c(26) xor c(28) xor c(31); + newcrc(27) := d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(1) xor c(4) xor c(5) xor c(7) xor c(11) xor c(19) xor c(20) xor c(21) xor c(23) xor c(24) xor c(25) xor c(26) xor c(27) xor c(29); + newcrc(28) := d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(2) xor c(5) xor c(6) xor c(8) xor c(12) xor c(20) xor c(21) xor c(22) xor c(24) xor c(25) xor c(26) xor c(27) xor c(28) xor c(30); + newcrc(29) := d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(3) xor c(6) xor c(7) xor c(9) xor c(13) xor c(21) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(30) := d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(4) xor c(7) xor c(8) xor c(10) xor c(14) xor c(22) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(31) := d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(5) xor c(8) xor c(9) xor c(11) xor c(15) xor c(23) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31); + return newcrc; + end nextCRC32_D32; + +end PCK_CRC32_D32; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D512.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D512.vhd new file mode 100755 index 0000000000000000000000000000000000000000..88b555b11b8200b1cc6b23aa7f97fe2e5c3427f6 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D512.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 +-- * data width: 512 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D512 is + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 512 + -- convention: the first serial bit is D[511] + function nextCRC32_D512 + (Data: std_logic_vector(511 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D512; + + +package body PCK_CRC32_D512 is + + -- polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 + -- data width: 512 + -- convention: the first serial bit is D[511] + function nextCRC32_D512 + (Data: std_logic_vector(511 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(511 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(511) xor d(510) xor d(508) xor d(507) xor d(506) xor d(502) xor d(501) xor d(500) xor d(495) xor d(494) xor d(493) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(486) xor d(483) xor d(482) xor d(481) xor d(480) xor d(479) xor d(477) xor d(476) xor d(472) xor d(470) xor d(468) xor d(465) xor d(464) xor d(462) xor d(461) xor d(458) xor d(452) xor d(450) xor d(449) xor d(448) xor d(444) xor d(437) xor d(436) xor d(434) xor d(433) xor d(424) xor d(422) xor d(419) xor d(418) xor d(416) xor d(414) xor d(412) xor d(409) xor d(408) xor d(407) xor d(405) xor d(404) xor d(400) xor d(399) xor d(398) xor d(396) xor d(393) xor d(392) xor d(391) xor d(390) xor d(388) xor d(387) xor d(386) xor d(381) xor d(378) xor d(376) xor d(374) xor d(372) xor d(369) xor d(368) xor d(366) xor d(363) xor d(362) xor d(359) xor d(358) xor d(357) xor d(353) xor d(349) xor d(348) xor d(347) xor d(345) xor d(344) xor d(342) xor d(341) xor d(339) xor d(338) xor d(337) xor d(335) xor d(334) xor d(333) xor d(328) xor d(327) xor d(322) xor d(321) xor d(320) xor d(319) xor d(318) xor d(317) xor d(315) xor d(312) xor d(310) xor d(309) xor d(305) xor d(303) xor d(302) xor d(300) xor d(299) xor d(298) xor d(297) xor d(296) xor d(295) xor d(294) xor d(292) xor d(290) xor d(288) xor d(287) xor d(286) xor d(283) xor d(279) xor d(277) xor d(276) xor d(274) xor d(273) xor d(269) xor d(268) xor d(265) xor d(264) xor d(261) xor d(259) xor d(257) xor d(255) xor d(252) xor d(248) xor d(243) xor d(237) xor d(234) xor d(230) xor d(228) xor d(227) xor d(226) xor d(224) xor d(216) xor d(214) xor d(212) xor d(210) xor d(209) xor d(208) xor d(207) xor d(203) xor d(202) xor d(201) xor d(199) xor d(198) xor d(197) xor d(194) xor d(193) xor d(192) xor d(191) xor d(190) xor d(188) xor d(186) xor d(183) xor d(182) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(166) xor d(162) xor d(161) xor d(158) xor d(156) xor d(155) xor d(151) xor d(149) xor d(144) xor d(143) xor d(137) xor d(136) xor d(135) xor d(134) xor d(132) xor d(128) xor d(127) xor d(126) xor d(125) xor d(123) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(111) xor d(110) xor d(106) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(81) xor d(79) xor d(73) xor d(72) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(61) xor d(60) xor d(58) xor d(55) xor d(54) xor d(53) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(37) xor d(34) xor d(32) xor d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(6) xor c(8) xor c(9) xor c(10) xor c(11) xor c(12) xor c(13) xor c(14) xor c(15) xor c(20) xor c(21) xor c(22) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(1) := d(510) xor d(509) xor d(506) xor d(503) xor d(500) xor d(496) xor d(488) xor d(487) xor d(486) xor d(484) xor d(479) xor d(478) xor d(476) xor d(473) xor d(472) xor d(471) xor d(470) xor d(469) xor d(468) xor d(466) xor d(464) xor d(463) xor d(461) xor d(459) xor d(458) xor d(453) xor d(452) xor d(451) xor d(448) xor d(445) xor d(444) xor d(438) xor d(436) xor d(435) xor d(433) xor d(425) xor d(424) xor d(423) xor d(422) xor d(420) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(410) xor d(407) xor d(406) xor d(404) xor d(401) xor d(398) xor d(397) xor d(396) xor d(394) xor d(390) xor d(389) xor d(386) xor d(382) xor d(381) xor d(379) xor d(378) xor d(377) xor d(376) xor d(375) xor d(374) xor d(373) xor d(372) xor d(370) xor d(368) xor d(367) xor d(366) xor d(364) xor d(362) xor d(360) xor d(357) xor d(354) xor d(353) xor d(350) xor d(347) xor d(346) xor d(344) xor d(343) xor d(341) xor d(340) xor d(337) xor d(336) xor d(333) xor d(329) xor d(327) xor d(323) xor d(317) xor d(316) xor d(315) xor d(313) xor d(312) xor d(311) xor d(309) xor d(306) xor d(305) xor d(304) xor d(302) xor d(301) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(289) xor d(286) xor d(284) xor d(283) xor d(280) xor d(279) xor d(278) xor d(276) xor d(275) xor d(273) xor d(270) xor d(268) xor d(266) xor d(264) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(257) xor d(256) xor d(255) xor d(253) xor d(252) xor d(249) xor d(248) xor d(244) xor d(243) xor d(238) xor d(237) xor d(235) xor d(234) xor d(231) xor d(230) xor d(229) xor d(226) xor d(225) xor d(224) xor d(217) xor d(216) xor d(215) xor d(214) xor d(213) xor d(212) xor d(211) xor d(207) xor d(204) xor d(201) xor d(200) xor d(197) xor d(195) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(182) xor d(173) xor d(169) xor d(168) xor d(166) xor d(163) xor d(161) xor d(159) xor d(158) xor d(157) xor d(155) xor d(152) xor d(151) xor d(150) xor d(149) xor d(145) xor d(143) xor d(138) xor d(134) xor d(133) xor d(132) xor d(129) xor d(125) xor d(124) xor d(123) xor d(120) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(101) xor d(100) xor d(94) xor d(88) xor d(87) xor d(86) xor d(81) xor d(80) xor d(79) xor d(74) xor d(72) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(53) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(44) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(4) xor c(6) xor c(7) xor c(8) xor c(16) xor c(20) xor c(23) xor c(26) xor c(29) xor c(30); + newcrc(2) := d(508) xor d(506) xor d(504) xor d(502) xor d(500) xor d(497) xor d(495) xor d(494) xor d(493) xor d(492) xor d(491) xor d(490) xor d(487) xor d(486) xor d(485) xor d(483) xor d(482) xor d(481) xor d(476) xor d(474) xor d(473) xor d(471) xor d(469) xor d(468) xor d(467) xor d(461) xor d(460) xor d(459) xor d(458) xor d(454) xor d(453) xor d(450) xor d(448) xor d(446) xor d(445) xor d(444) xor d(439) xor d(433) xor d(426) xor d(425) xor d(423) xor d(422) xor d(421) xor d(417) xor d(415) xor d(413) xor d(412) xor d(411) xor d(409) xor d(404) xor d(402) xor d(400) xor d(397) xor d(396) xor d(395) xor d(393) xor d(392) xor d(388) xor d(386) xor d(383) xor d(382) xor d(381) xor d(380) xor d(379) xor d(377) xor d(375) xor d(373) xor d(372) xor d(371) xor d(367) xor d(366) xor d(365) xor d(362) xor d(361) xor d(359) xor d(357) xor d(355) xor d(354) xor d(353) xor d(351) xor d(349) xor d(339) xor d(335) xor d(333) xor d(330) xor d(327) xor d(324) xor d(322) xor d(321) xor d(320) xor d(319) xor d(316) xor d(315) xor d(314) xor d(313) xor d(309) xor d(307) xor d(306) xor d(300) xor d(299) xor d(298) xor d(297) xor d(296) xor d(293) xor d(291) xor d(288) xor d(286) xor d(285) xor d(284) xor d(283) xor d(281) xor d(280) xor d(273) xor d(271) xor d(268) xor d(267) xor d(264) xor d(263) xor d(262) xor d(260) xor d(258) xor d(256) xor d(255) xor d(254) xor d(253) xor d(252) xor d(250) xor d(249) xor d(248) xor d(245) xor d(244) xor d(243) xor d(239) xor d(238) xor d(237) xor d(236) xor d(235) xor d(234) xor d(232) xor d(231) xor d(228) xor d(225) xor d(224) xor d(218) xor d(217) xor d(215) xor d(213) xor d(210) xor d(209) xor d(207) xor d(205) xor d(203) xor d(199) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(189) xor d(187) xor d(186) xor d(185) xor d(182) xor d(174) xor d(172) xor d(171) xor d(166) xor d(164) xor d(161) xor d(160) xor d(159) xor d(155) xor d(153) xor d(152) xor d(150) xor d(149) xor d(146) xor d(143) xor d(139) xor d(137) xor d(136) xor d(133) xor d(132) xor d(130) xor d(128) xor d(127) xor d(124) xor d(123) xor d(121) xor d(119) xor d(118) xor d(110) xor d(108) xor d(107) xor d(102) xor d(99) xor d(98) xor d(97) xor d(96) xor d(94) xor d(89) xor d(88) xor d(85) xor d(84) xor d(83) xor d(80) xor d(79) xor d(75) xor d(72) xor d(70) xor d(68) xor d(67) xor d(64) xor d(59) xor d(58) xor d(57) xor d(55) xor d(53) xor d(52) xor d(51) xor d(44) xor d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(32) xor d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(1) xor c(2) xor c(3) xor c(5) xor c(6) xor c(7) xor c(10) xor c(11) xor c(12) xor c(13) xor c(14) xor c(15) xor c(17) xor c(20) xor c(22) xor c(24) xor c(26) xor c(28); + newcrc(3) := d(509) xor d(507) xor d(505) xor d(503) xor d(501) xor d(498) xor d(496) xor d(495) xor d(494) xor d(493) xor d(492) xor d(491) xor d(488) xor d(487) xor d(486) xor d(484) xor d(483) xor d(482) xor d(477) xor d(475) xor d(474) xor d(472) xor d(470) xor d(469) xor d(468) xor d(462) xor d(461) xor d(460) xor d(459) xor d(455) xor d(454) xor d(451) xor d(449) xor d(447) xor d(446) xor d(445) xor d(440) xor d(434) xor d(427) xor d(426) xor d(424) xor d(423) xor d(422) xor d(418) xor d(416) xor d(414) xor d(413) xor d(412) xor d(410) xor d(405) xor d(403) xor d(401) xor d(398) xor d(397) xor d(396) xor d(394) xor d(393) xor d(389) xor d(387) xor d(384) xor d(383) xor d(382) xor d(381) xor d(380) xor d(378) xor d(376) xor d(374) xor d(373) xor d(372) xor d(368) xor d(367) xor d(366) xor d(363) xor d(362) xor d(360) xor d(358) xor d(356) xor d(355) xor d(354) xor d(352) xor d(350) xor d(340) xor d(336) xor d(334) xor d(331) xor d(328) xor d(325) xor d(323) xor d(322) xor d(321) xor d(320) xor d(317) xor d(316) xor d(315) xor d(314) xor d(310) xor d(308) xor d(307) xor d(301) xor d(300) xor d(299) xor d(298) xor d(297) xor d(294) xor d(292) xor d(289) xor d(287) xor d(286) xor d(285) xor d(284) xor d(282) xor d(281) xor d(274) xor d(272) xor d(269) xor d(268) xor d(265) xor d(264) xor d(263) xor d(261) xor d(259) xor d(257) xor d(256) xor d(255) xor d(254) xor d(253) xor d(251) xor d(250) xor d(249) xor d(246) xor d(245) xor d(244) xor d(240) xor d(239) xor d(238) xor d(237) xor d(236) xor d(235) xor d(233) xor d(232) xor d(229) xor d(226) xor d(225) xor d(219) xor d(218) xor d(216) xor d(214) xor d(211) xor d(210) xor d(208) xor d(206) xor d(204) xor d(200) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(190) xor d(188) xor d(187) xor d(186) xor d(183) xor d(175) xor d(173) xor d(172) xor d(167) xor d(165) xor d(162) xor d(161) xor d(160) xor d(156) xor d(154) xor d(153) xor d(151) xor d(150) xor d(147) xor d(144) xor d(140) xor d(138) xor d(137) xor d(134) xor d(133) xor d(131) xor d(129) xor d(128) xor d(125) xor d(124) xor d(122) xor d(120) xor d(119) xor d(111) xor d(109) xor d(108) xor d(103) xor d(100) xor d(99) xor d(98) xor d(97) xor d(95) xor d(90) xor d(89) xor d(86) xor d(85) xor d(84) xor d(81) xor d(80) xor d(76) xor d(73) xor d(71) xor d(69) xor d(68) xor d(65) xor d(60) xor d(59) xor d(58) xor d(56) xor d(54) xor d(53) xor d(52) xor d(45) xor d(40) xor d(39) xor d(38) xor d(37) xor d(36) xor d(33) xor d(32) xor d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor c(8) xor c(11) xor c(12) xor c(13) xor c(14) xor c(15) xor c(16) xor c(18) xor c(21) xor c(23) xor c(25) xor c(27) xor c(29); + newcrc(4) := d(511) xor d(507) xor d(504) xor d(501) xor d(500) xor d(499) xor d(497) xor d(496) xor d(491) xor d(490) xor d(487) xor d(486) xor d(485) xor d(484) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(477) xor d(475) xor d(473) xor d(472) xor d(471) xor d(469) xor d(468) xor d(465) xor d(464) xor d(463) xor d(460) xor d(458) xor d(456) xor d(455) xor d(449) xor d(447) xor d(446) xor d(444) xor d(441) xor d(437) xor d(436) xor d(435) xor d(434) xor d(433) xor d(428) xor d(427) xor d(425) xor d(423) xor d(422) xor d(418) xor d(417) xor d(416) xor d(415) xor d(413) xor d(412) xor d(411) xor d(409) xor d(408) xor d(407) xor d(406) xor d(405) xor d(402) xor d(400) xor d(397) xor d(396) xor d(395) xor d(394) xor d(393) xor d(392) xor d(391) xor d(387) xor d(386) xor d(385) xor d(384) xor d(383) xor d(382) xor d(379) xor d(378) xor d(377) xor d(376) xor d(375) xor d(373) xor d(372) xor d(367) xor d(366) xor d(364) xor d(362) xor d(361) xor d(358) xor d(356) xor d(355) xor d(351) xor d(349) xor d(348) xor d(347) xor d(345) xor d(344) xor d(342) xor d(339) xor d(338) xor d(334) xor d(333) xor d(332) xor d(329) xor d(328) xor d(327) xor d(326) xor d(324) xor d(323) xor d(320) xor d(319) xor d(316) xor d(312) xor d(311) xor d(310) xor d(308) xor d(305) xor d(303) xor d(301) xor d(297) xor d(296) xor d(294) xor d(293) xor d(292) xor d(285) xor d(282) xor d(279) xor d(277) xor d(276) xor d(275) xor d(274) xor d(270) xor d(268) xor d(266) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(256) xor d(254) xor d(251) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(243) xor d(241) xor d(240) xor d(239) xor d(238) xor d(236) xor d(233) xor d(228) xor d(224) xor d(220) xor d(219) xor d(217) xor d(216) xor d(215) xor d(214) xor d(211) xor d(210) xor d(208) xor d(205) xor d(203) xor d(202) xor d(197) xor d(196) xor d(195) xor d(193) xor d(192) xor d(190) xor d(189) xor d(187) xor d(186) xor d(184) xor d(183) xor d(182) xor d(176) xor d(174) xor d(173) xor d(172) xor d(171) xor d(170) xor d(169) xor d(168) xor d(167) xor d(163) xor d(158) xor d(157) xor d(156) xor d(154) xor d(152) xor d(149) xor d(148) xor d(145) xor d(144) xor d(143) xor d(141) xor d(139) xor d(138) xor d(137) xor d(136) xor d(130) xor d(129) xor d(128) xor d(127) xor d(121) xor d(120) xor d(119) xor d(118) xor d(117) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(106) xor d(103) xor d(100) xor d(97) xor d(95) xor d(94) xor d(91) xor d(90) xor d(86) xor d(84) xor d(83) xor d(79) xor d(77) xor d(74) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(65) xor d(63) xor d(59) xor d(58) xor d(57) xor d(50) xor d(48) xor d(47) xor d(46) xor d(45) xor d(44) xor d(41) xor d(40) xor d(39) xor d(38) xor d(33) xor d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(0) xor c(1) xor c(2) xor c(4) xor c(5) xor c(6) xor c(7) xor c(10) xor c(11) xor c(16) xor c(17) xor c(19) xor c(20) xor c(21) xor c(24) xor c(27) xor c(31); + newcrc(5) := d(511) xor d(510) xor d(507) xor d(506) xor d(505) xor d(498) xor d(497) xor d(495) xor d(494) xor d(493) xor d(490) xor d(489) xor d(487) xor d(485) xor d(478) xor d(477) xor d(474) xor d(473) xor d(469) xor d(468) xor d(466) xor d(462) xor d(459) xor d(458) xor d(457) xor d(456) xor d(452) xor d(449) xor d(447) xor d(445) xor d(444) xor d(442) xor d(438) xor d(435) xor d(433) xor d(429) xor d(428) xor d(426) xor d(423) xor d(422) xor d(417) xor d(413) xor d(410) xor d(406) xor d(405) xor d(404) xor d(403) xor d(401) xor d(400) xor d(399) xor d(397) xor d(395) xor d(394) xor d(391) xor d(390) xor d(385) xor d(384) xor d(383) xor d(381) xor d(380) xor d(379) xor d(377) xor d(373) xor d(372) xor d(369) xor d(367) xor d(366) xor d(365) xor d(358) xor d(356) xor d(353) xor d(352) xor d(350) xor d(347) xor d(346) xor d(344) xor d(343) xor d(342) xor d(341) xor d(340) xor d(338) xor d(337) xor d(330) xor d(329) xor d(325) xor d(324) xor d(322) xor d(319) xor d(318) xor d(315) xor d(313) xor d(311) xor d(310) xor d(306) xor d(305) xor d(304) xor d(303) xor d(300) xor d(299) xor d(296) xor d(293) xor d(292) xor d(290) xor d(288) xor d(287) xor d(280) xor d(279) xor d(278) xor d(275) xor d(274) xor d(273) xor d(271) xor d(268) xor d(267) xor d(265) xor d(264) xor d(263) xor d(262) xor d(260) xor d(251) xor d(249) xor d(247) xor d(246) xor d(244) xor d(243) xor d(242) xor d(241) xor d(240) xor d(239) xor d(230) xor d(229) xor d(228) xor d(227) xor d(226) xor d(225) xor d(224) xor d(221) xor d(220) xor d(218) xor d(217) xor d(215) xor d(214) xor d(211) xor d(210) xor d(208) xor d(207) xor d(206) xor d(204) xor d(202) xor d(201) xor d(199) xor d(196) xor d(192) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(177) xor d(175) xor d(174) xor d(173) xor d(168) xor d(167) xor d(166) xor d(164) xor d(162) xor d(161) xor d(159) xor d(157) xor d(156) xor d(153) xor d(151) xor d(150) xor d(146) xor d(145) xor d(143) xor d(142) xor d(140) xor d(139) xor d(138) xor d(136) xor d(135) xor d(134) xor d(132) xor d(131) xor d(130) xor d(129) xor d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(116) xor d(115) xor d(112) xor d(111) xor d(107) xor d(106) xor d(103) xor d(99) xor d(97) xor d(94) xor d(92) xor d(91) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(69) xor d(67) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(55) xor d(54) xor d(53) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(42) xor d(41) xor d(40) xor d(39) xor d(37) xor d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(5) xor c(7) xor c(9) xor c(10) xor c(13) xor c(14) xor c(15) xor c(17) xor c(18) xor c(25) xor c(26) xor c(27) xor c(30) xor c(31); + newcrc(6) := d(511) xor d(508) xor d(507) xor d(506) xor d(499) xor d(498) xor d(496) xor d(495) xor d(494) xor d(491) xor d(490) xor d(488) xor d(486) xor d(479) xor d(478) xor d(475) xor d(474) xor d(470) xor d(469) xor d(467) xor d(463) xor d(460) xor d(459) xor d(458) xor d(457) xor d(453) xor d(450) xor d(448) xor d(446) xor d(445) xor d(443) xor d(439) xor d(436) xor d(434) xor d(430) xor d(429) xor d(427) xor d(424) xor d(423) xor d(418) xor d(414) xor d(411) xor d(407) xor d(406) xor d(405) xor d(404) xor d(402) xor d(401) xor d(400) xor d(398) xor d(396) xor d(395) xor d(392) xor d(391) xor d(386) xor d(385) xor d(384) xor d(382) xor d(381) xor d(380) xor d(378) xor d(374) xor d(373) xor d(370) xor d(368) xor d(367) xor d(366) xor d(359) xor d(357) xor d(354) xor d(353) xor d(351) xor d(348) xor d(347) xor d(345) xor d(344) xor d(343) xor d(342) xor d(341) xor d(339) xor d(338) xor d(331) xor d(330) xor d(326) xor d(325) xor d(323) xor d(320) xor d(319) xor d(316) xor d(314) xor d(312) xor d(311) xor d(307) xor d(306) xor d(305) xor d(304) xor d(301) xor d(300) xor d(297) xor d(294) xor d(293) xor d(291) xor d(289) xor d(288) xor d(281) xor d(280) xor d(279) xor d(276) xor d(275) xor d(274) xor d(272) xor d(269) xor d(268) xor d(266) xor d(265) xor d(264) xor d(263) xor d(261) xor d(252) xor d(250) xor d(248) xor d(247) xor d(245) xor d(244) xor d(243) xor d(242) xor d(241) xor d(240) xor d(231) xor d(230) xor d(229) xor d(228) xor d(227) xor d(226) xor d(225) xor d(222) xor d(221) xor d(219) xor d(218) xor d(216) xor d(215) xor d(212) xor d(211) xor d(209) xor d(208) xor d(207) xor d(205) xor d(203) xor d(202) xor d(200) xor d(197) xor d(193) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(178) xor d(176) xor d(175) xor d(174) xor d(169) xor d(168) xor d(167) xor d(165) xor d(163) xor d(162) xor d(160) xor d(158) xor d(157) xor d(154) xor d(152) xor d(151) xor d(147) xor d(146) xor d(144) xor d(143) xor d(141) xor d(140) xor d(139) xor d(137) xor d(136) xor d(135) xor d(133) xor d(132) xor d(131) xor d(130) xor d(128) xor d(127) xor d(126) xor d(124) xor d(123) xor d(122) xor d(121) xor d(117) xor d(116) xor d(113) xor d(112) xor d(108) xor d(107) xor d(104) xor d(100) xor d(98) xor d(95) xor d(93) xor d(92) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(76) xor d(75) xor d(74) xor d(73) xor d(72) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(56) xor d(55) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(43) xor d(42) xor d(41) xor d(40) xor d(38) xor d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(6) xor c(8) xor c(10) xor c(11) xor c(14) xor c(15) xor c(16) xor c(18) xor c(19) xor c(26) xor c(27) xor c(28) xor c(31); + newcrc(7) := d(511) xor d(510) xor d(509) xor d(506) xor d(502) xor d(501) xor d(499) xor d(497) xor d(496) xor d(494) xor d(493) xor d(490) xor d(488) xor d(487) xor d(486) xor d(483) xor d(482) xor d(481) xor d(477) xor d(475) xor d(472) xor d(471) xor d(465) xor d(462) xor d(460) xor d(459) xor d(454) xor d(452) xor d(451) xor d(450) xor d(448) xor d(447) xor d(446) xor d(440) xor d(436) xor d(435) xor d(434) xor d(433) xor d(431) xor d(430) xor d(428) xor d(425) xor d(422) xor d(418) xor d(416) xor d(415) xor d(414) xor d(409) xor d(406) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(398) xor d(397) xor d(391) xor d(390) xor d(388) xor d(385) xor d(383) xor d(382) xor d(379) xor d(378) xor d(376) xor d(375) xor d(372) xor d(371) xor d(367) xor d(366) xor d(363) xor d(362) xor d(360) xor d(359) xor d(357) xor d(355) xor d(354) xor d(353) xor d(352) xor d(347) xor d(346) xor d(343) xor d(341) xor d(340) xor d(338) xor d(337) xor d(335) xor d(334) xor d(333) xor d(332) xor d(331) xor d(328) xor d(326) xor d(324) xor d(322) xor d(319) xor d(318) xor d(313) xor d(310) xor d(309) xor d(308) xor d(307) xor d(306) xor d(303) xor d(301) xor d(300) xor d(299) xor d(297) xor d(296) xor d(289) xor d(288) xor d(287) xor d(286) xor d(283) xor d(282) xor d(281) xor d(280) xor d(279) xor d(275) xor d(274) xor d(270) xor d(268) xor d(267) xor d(266) xor d(262) xor d(261) xor d(259) xor d(257) xor d(255) xor d(253) xor d(252) xor d(251) xor d(249) xor d(246) xor d(245) xor d(244) xor d(242) xor d(241) xor d(237) xor d(234) xor d(232) xor d(231) xor d(229) xor d(224) xor d(223) xor d(222) xor d(220) xor d(219) xor d(217) xor d(214) xor d(213) xor d(207) xor d(206) xor d(204) xor d(202) xor d(199) xor d(197) xor d(193) xor d(192) xor d(191) xor d(190) xor d(189) xor d(187) xor d(184) xor d(183) xor d(182) xor d(179) xor d(177) xor d(176) xor d(175) xor d(172) xor d(171) xor d(168) xor d(167) xor d(164) xor d(163) xor d(162) xor d(159) xor d(156) xor d(153) xor d(152) xor d(151) xor d(149) xor d(148) xor d(147) xor d(145) xor d(143) xor d(142) xor d(141) xor d(140) xor d(138) xor d(135) xor d(133) xor d(131) xor d(129) xor d(126) xor d(124) xor d(122) xor d(119) xor d(116) xor d(111) xor d(110) xor d(109) xor d(108) xor d(106) xor d(105) xor d(104) xor d(103) xor d(98) xor d(97) xor d(95) xor d(93) xor d(87) xor d(80) xor d(79) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(69) xor d(68) xor d(60) xor d(58) xor d(57) xor d(56) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(46) xor d(45) xor d(43) xor d(42) xor d(41) xor d(39) xor d(37) xor d(34) xor d(32) xor d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(1) xor c(2) xor c(3) xor c(6) xor c(7) xor c(8) xor c(10) xor c(13) xor c(14) xor c(16) xor c(17) xor c(19) xor c(21) xor c(22) xor c(26) xor c(29) xor c(30) xor c(31); + newcrc(8) := d(508) xor d(506) xor d(503) xor d(501) xor d(498) xor d(497) xor d(493) xor d(492) xor d(490) xor d(487) xor d(486) xor d(484) xor d(481) xor d(480) xor d(479) xor d(478) xor d(477) xor d(473) xor d(470) xor d(468) xor d(466) xor d(465) xor d(464) xor d(463) xor d(462) xor d(460) xor d(458) xor d(455) xor d(453) xor d(451) xor d(450) xor d(447) xor d(444) xor d(441) xor d(435) xor d(433) xor d(432) xor d(431) xor d(429) xor d(426) xor d(424) xor d(423) xor d(422) xor d(418) xor d(417) xor d(415) xor d(414) xor d(412) xor d(410) xor d(409) xor d(408) xor d(403) xor d(402) xor d(401) xor d(400) xor d(396) xor d(393) xor d(390) xor d(389) xor d(388) xor d(387) xor d(384) xor d(383) xor d(381) xor d(380) xor d(379) xor d(378) xor d(377) xor d(374) xor d(373) xor d(369) xor d(367) xor d(366) xor d(364) xor d(362) xor d(361) xor d(360) xor d(359) xor d(357) xor d(356) xor d(355) xor d(354) xor d(349) xor d(345) xor d(337) xor d(336) xor d(332) xor d(329) xor d(328) xor d(325) xor d(323) xor d(322) xor d(321) xor d(318) xor d(317) xor d(315) xor d(314) xor d(312) xor d(311) xor d(308) xor d(307) xor d(305) xor d(304) xor d(303) xor d(301) xor d(299) xor d(296) xor d(295) xor d(294) xor d(292) xor d(289) xor d(286) xor d(284) xor d(282) xor d(281) xor d(280) xor d(279) xor d(277) xor d(275) xor d(274) xor d(273) xor d(271) xor d(267) xor d(265) xor d(264) xor d(263) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(257) xor d(256) xor d(255) xor d(254) xor d(253) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(242) xor d(238) xor d(237) xor d(235) xor d(234) xor d(233) xor d(232) xor d(228) xor d(227) xor d(226) xor d(225) xor d(223) xor d(221) xor d(220) xor d(218) xor d(216) xor d(215) xor d(212) xor d(210) xor d(209) xor d(205) xor d(202) xor d(201) xor d(200) xor d(199) xor d(197) xor d(186) xor d(185) xor d(184) xor d(182) xor d(180) xor d(178) xor d(177) xor d(176) xor d(173) xor d(171) xor d(170) xor d(168) xor d(167) xor d(166) xor d(165) xor d(164) xor d(163) xor d(162) xor d(161) xor d(160) xor d(158) xor d(157) xor d(156) xor d(155) xor d(154) xor d(153) xor d(152) xor d(151) xor d(150) xor d(148) xor d(146) xor d(142) xor d(141) xor d(139) xor d(137) xor d(135) xor d(130) xor d(128) xor d(126) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(113) xor d(112) xor d(109) xor d(107) xor d(105) xor d(103) xor d(101) xor d(97) xor d(95) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(65) xor d(63) xor d(60) xor d(59) xor d(57) xor d(54) xor d(52) xor d(51) xor d(50) xor d(46) xor d(45) xor d(43) xor d(42) xor d(40) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(32) xor d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(4) xor c(6) xor c(7) xor c(10) xor c(12) xor c(13) xor c(17) xor c(18) xor c(21) xor c(23) xor c(26) xor c(28); + newcrc(9) := d(509) xor d(507) xor d(504) xor d(502) xor d(499) xor d(498) xor d(494) xor d(493) xor d(491) xor d(488) xor d(487) xor d(485) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(474) xor d(471) xor d(469) xor d(467) xor d(466) xor d(465) xor d(464) xor d(463) xor d(461) xor d(459) xor d(456) xor d(454) xor d(452) xor d(451) xor d(448) xor d(445) xor d(442) xor d(436) xor d(434) xor d(433) xor d(432) xor d(430) xor d(427) xor d(425) xor d(424) xor d(423) xor d(419) xor d(418) xor d(416) xor d(415) xor d(413) xor d(411) xor d(410) xor d(409) xor d(404) xor d(403) xor d(402) xor d(401) xor d(397) xor d(394) xor d(391) xor d(390) xor d(389) xor d(388) xor d(385) xor d(384) xor d(382) xor d(381) xor d(380) xor d(379) xor d(378) xor d(375) xor d(374) xor d(370) xor d(368) xor d(367) xor d(365) xor d(363) xor d(362) xor d(361) xor d(360) xor d(358) xor d(357) xor d(356) xor d(355) xor d(350) xor d(346) xor d(338) xor d(337) xor d(333) xor d(330) xor d(329) xor d(326) xor d(324) xor d(323) xor d(322) xor d(319) xor d(318) xor d(316) xor d(315) xor d(313) xor d(312) xor d(309) xor d(308) xor d(306) xor d(305) xor d(304) xor d(302) xor d(300) xor d(297) xor d(296) xor d(295) xor d(293) xor d(290) xor d(287) xor d(285) xor d(283) xor d(282) xor d(281) xor d(280) xor d(278) xor d(276) xor d(275) xor d(274) xor d(272) xor d(268) xor d(266) xor d(265) xor d(264) xor d(263) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(257) xor d(256) xor d(255) xor d(254) xor d(251) xor d(249) xor d(248) xor d(247) xor d(246) xor d(243) xor d(239) xor d(238) xor d(236) xor d(235) xor d(234) xor d(233) xor d(229) xor d(228) xor d(227) xor d(226) xor d(224) xor d(222) xor d(221) xor d(219) xor d(217) xor d(216) xor d(213) xor d(211) xor d(210) xor d(206) xor d(203) xor d(202) xor d(201) xor d(200) xor d(198) xor d(187) xor d(186) xor d(185) xor d(183) xor d(181) xor d(179) xor d(178) xor d(177) xor d(174) xor d(172) xor d(171) xor d(169) xor d(168) xor d(167) xor d(166) xor d(165) xor d(164) xor d(163) xor d(162) xor d(161) xor d(159) xor d(158) xor d(157) xor d(156) xor d(155) xor d(154) xor d(153) xor d(152) xor d(151) xor d(149) xor d(147) xor d(143) xor d(142) xor d(140) xor d(138) xor d(136) xor d(131) xor d(129) xor d(127) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(114) xor d(113) xor d(110) xor d(108) xor d(106) xor d(104) xor d(102) xor d(98) xor d(96) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(71) xor d(70) xor d(69) xor d(68) xor d(67) xor d(66) xor d(64) xor d(61) xor d(60) xor d(58) xor d(55) xor d(53) xor d(52) xor d(51) xor d(47) xor d(46) xor d(44) xor d(43) xor d(41) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(33) xor d(32) xor d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(0) xor c(1) xor c(2) xor c(5) xor c(7) xor c(8) xor c(11) xor c(13) xor c(14) xor c(18) xor c(19) xor c(22) xor c(24) xor c(27) xor c(29); + newcrc(10) := d(511) xor d(507) xor d(506) xor d(505) xor d(503) xor d(502) xor d(501) xor d(499) xor d(493) xor d(491) xor d(490) xor d(477) xor d(476) xor d(475) xor d(467) xor d(466) xor d(461) xor d(460) xor d(458) xor d(457) xor d(455) xor d(453) xor d(450) xor d(448) xor d(446) xor d(444) xor d(443) xor d(436) xor d(435) xor d(431) xor d(428) xor d(426) xor d(425) xor d(422) xor d(420) xor d(418) xor d(417) xor d(411) xor d(410) xor d(409) xor d(408) xor d(407) xor d(403) xor d(402) xor d(400) xor d(399) xor d(396) xor d(395) xor d(393) xor d(389) xor d(388) xor d(387) xor d(385) xor d(383) xor d(382) xor d(380) xor d(379) xor d(378) xor d(375) xor d(374) xor d(372) xor d(371) xor d(364) xor d(361) xor d(356) xor d(353) xor d(351) xor d(349) xor d(348) xor d(345) xor d(344) xor d(342) xor d(341) xor d(337) xor d(335) xor d(333) xor d(331) xor d(330) xor d(328) xor d(325) xor d(324) xor d(323) xor d(322) xor d(321) xor d(318) xor d(316) xor d(315) xor d(314) xor d(313) xor d(312) xor d(307) xor d(306) xor d(302) xor d(301) xor d(300) xor d(299) xor d(295) xor d(292) xor d(291) xor d(290) xor d(287) xor d(284) xor d(282) xor d(281) xor d(275) xor d(274) xor d(268) xor d(267) xor d(266) xor d(263) xor d(262) xor d(260) xor d(258) xor d(256) xor d(250) xor d(249) xor d(247) xor d(244) xor d(243) xor d(240) xor d(239) xor d(236) xor d(235) xor d(229) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(220) xor d(218) xor d(217) xor d(216) xor d(211) xor d(210) xor d(209) xor d(208) xor d(204) xor d(198) xor d(197) xor d(194) xor d(193) xor d(192) xor d(191) xor d(190) xor d(187) xor d(184) xor d(183) xor d(180) xor d(179) xor d(178) xor d(175) xor d(173) xor d(171) xor d(168) xor d(165) xor d(164) xor d(163) xor d(161) xor d(160) xor d(159) xor d(157) xor d(154) xor d(153) xor d(152) xor d(151) xor d(150) xor d(149) xor d(148) xor d(141) xor d(139) xor d(136) xor d(135) xor d(134) xor d(130) xor d(127) xor d(126) xor d(125) xor d(123) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(110) xor d(109) xor d(107) xor d(106) xor d(105) xor d(104) xor d(101) xor d(98) xor d(96) xor d(95) xor d(94) xor d(90) xor d(89) xor d(86) xor d(83) xor d(80) xor d(78) xor d(77) xor d(75) xor d(73) xor d(71) xor d(70) xor d(69) xor d(66) xor d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(55) xor d(52) xor d(50) xor d(42) xor d(40) xor d(39) xor d(36) xor d(35) xor d(33) xor d(32) xor d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(10) xor c(11) xor c(13) xor c(19) xor c(21) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(31); + newcrc(11) := d(511) xor d(510) xor d(504) xor d(503) xor d(501) xor d(495) xor d(493) xor d(490) xor d(489) xor d(488) xor d(486) xor d(483) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(472) xor d(470) xor d(467) xor d(465) xor d(464) xor d(459) xor d(456) xor d(454) xor d(452) xor d(451) xor d(450) xor d(448) xor d(447) xor d(445) xor d(434) xor d(433) xor d(432) xor d(429) xor d(427) xor d(426) xor d(424) xor d(423) xor d(422) xor d(421) xor d(416) xor d(414) xor d(411) xor d(410) xor d(407) xor d(405) xor d(403) xor d(401) xor d(399) xor d(398) xor d(397) xor d(394) xor d(393) xor d(392) xor d(391) xor d(389) xor d(387) xor d(384) xor d(383) xor d(380) xor d(379) xor d(378) xor d(375) xor d(374) xor d(373) xor d(369) xor d(368) xor d(366) xor d(365) xor d(363) xor d(359) xor d(358) xor d(354) xor d(353) xor d(352) xor d(350) xor d(348) xor d(347) xor d(346) xor d(344) xor d(343) xor d(341) xor d(339) xor d(337) xor d(336) xor d(335) xor d(333) xor d(332) xor d(331) xor d(329) xor d(328) xor d(327) xor d(326) xor d(325) xor d(324) xor d(323) xor d(321) xor d(320) xor d(318) xor d(316) xor d(314) xor d(313) xor d(312) xor d(310) xor d(309) xor d(308) xor d(307) xor d(305) xor d(301) xor d(299) xor d(298) xor d(297) xor d(295) xor d(294) xor d(293) xor d(291) xor d(290) xor d(287) xor d(286) xor d(285) xor d(282) xor d(279) xor d(277) xor d(275) xor d(274) xor d(273) xor d(267) xor d(265) xor d(263) xor d(255) xor d(252) xor d(251) xor d(250) xor d(245) xor d(244) xor d(243) xor d(241) xor d(240) xor d(236) xor d(234) xor d(228) xor d(225) xor d(223) xor d(221) xor d(219) xor d(218) xor d(217) xor d(216) xor d(214) xor d(211) xor d(208) xor d(207) xor d(205) xor d(203) xor d(202) xor d(201) xor d(197) xor d(195) xor d(190) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(181) xor d(180) xor d(179) xor d(176) xor d(174) xor d(171) xor d(170) xor d(167) xor d(165) xor d(164) xor d(160) xor d(156) xor d(154) xor d(153) xor d(152) xor d(150) xor d(144) xor d(143) xor d(142) xor d(140) xor d(134) xor d(132) xor d(131) xor d(125) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(108) xor d(107) xor d(105) xor d(104) xor d(103) xor d(102) xor d(101) xor d(98) xor d(94) xor d(91) xor d(90) xor d(85) xor d(83) xor d(82) xor d(78) xor d(76) xor d(74) xor d(73) xor d(71) xor d(70) xor d(68) xor d(66) xor d(65) xor d(64) xor d(59) xor d(58) xor d(57) xor d(56) xor d(55) xor d(54) xor d(51) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(40) xor d(36) xor d(33) xor d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(6) xor c(8) xor c(9) xor c(10) xor c(13) xor c(15) xor c(21) xor c(23) xor c(24) xor c(30) xor c(31); + newcrc(12) := d(510) xor d(508) xor d(507) xor d(506) xor d(505) xor d(504) xor d(501) xor d(500) xor d(496) xor d(495) xor d(493) xor d(492) xor d(488) xor d(487) xor d(486) xor d(484) xor d(477) xor d(476) xor d(473) xor d(472) xor d(471) xor d(470) xor d(466) xor d(464) xor d(462) xor d(461) xor d(460) xor d(458) xor d(457) xor d(455) xor d(453) xor d(451) xor d(450) xor d(446) xor d(444) xor d(437) xor d(436) xor d(435) xor d(430) xor d(428) xor d(427) xor d(425) xor d(423) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(411) xor d(409) xor d(407) xor d(406) xor d(405) xor d(402) xor d(396) xor d(395) xor d(394) xor d(391) xor d(387) xor d(386) xor d(385) xor d(384) xor d(380) xor d(379) xor d(378) xor d(375) xor d(372) xor d(370) xor d(368) xor d(367) xor d(364) xor d(363) xor d(362) xor d(360) xor d(358) xor d(357) xor d(355) xor d(354) xor d(351) xor d(341) xor d(340) xor d(339) xor d(336) xor d(335) xor d(332) xor d(330) xor d(329) xor d(326) xor d(325) xor d(324) xor d(320) xor d(318) xor d(314) xor d(313) xor d(312) xor d(311) xor d(308) xor d(306) xor d(305) xor d(303) xor d(297) xor d(291) xor d(290) xor d(280) xor d(279) xor d(278) xor d(277) xor d(275) xor d(273) xor d(269) xor d(266) xor d(265) xor d(261) xor d(259) xor d(257) xor d(256) xor d(255) xor d(253) xor d(251) xor d(248) xor d(246) xor d(245) xor d(244) xor d(243) xor d(242) xor d(241) xor d(235) xor d(234) xor d(230) xor d(229) xor d(228) xor d(227) xor d(222) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(215) xor d(214) xor d(210) xor d(207) xor d(206) xor d(204) xor d(201) xor d(199) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(190) xor d(188) xor d(187) xor d(185) xor d(184) xor d(181) xor d(180) xor d(177) xor d(175) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(162) xor d(158) xor d(157) xor d(156) xor d(154) xor d(153) xor d(149) xor d(145) xor d(141) xor d(137) xor d(136) xor d(134) xor d(133) xor d(128) xor d(127) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(111) xor d(110) xor d(109) xor d(108) xor d(105) xor d(102) xor d(101) xor d(98) xor d(97) xor d(96) xor d(94) xor d(92) xor d(91) xor d(87) xor d(86) xor d(85) xor d(82) xor d(81) xor d(77) xor d(75) xor d(74) xor d(73) xor d(71) xor d(69) xor d(68) xor d(63) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(41) xor d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(4) xor c(6) xor c(7) xor c(8) xor c(12) xor c(13) xor c(15) xor c(16) xor c(20) xor c(21) xor c(24) xor c(25) xor c(26) xor c(27) xor c(28) xor c(30); + newcrc(13) := d(511) xor d(509) xor d(508) xor d(507) xor d(506) xor d(505) xor d(502) xor d(501) xor d(497) xor d(496) xor d(494) xor d(493) xor d(489) xor d(488) xor d(487) xor d(485) xor d(478) xor d(477) xor d(474) xor d(473) xor d(472) xor d(471) xor d(467) xor d(465) xor d(463) xor d(462) xor d(461) xor d(459) xor d(458) xor d(456) xor d(454) xor d(452) xor d(451) xor d(447) xor d(445) xor d(438) xor d(437) xor d(436) xor d(431) xor d(429) xor d(428) xor d(426) xor d(424) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(412) xor d(410) xor d(408) xor d(407) xor d(406) xor d(403) xor d(397) xor d(396) xor d(395) xor d(392) xor d(388) xor d(387) xor d(386) xor d(385) xor d(381) xor d(380) xor d(379) xor d(376) xor d(373) xor d(371) xor d(369) xor d(368) xor d(365) xor d(364) xor d(363) xor d(361) xor d(359) xor d(358) xor d(356) xor d(355) xor d(352) xor d(342) xor d(341) xor d(340) xor d(337) xor d(336) xor d(333) xor d(331) xor d(330) xor d(327) xor d(326) xor d(325) xor d(321) xor d(319) xor d(315) xor d(314) xor d(313) xor d(312) xor d(309) xor d(307) xor d(306) xor d(304) xor d(298) xor d(292) xor d(291) xor d(281) xor d(280) xor d(279) xor d(278) xor d(276) xor d(274) xor d(270) xor d(267) xor d(266) xor d(262) xor d(260) xor d(258) xor d(257) xor d(256) xor d(254) xor d(252) xor d(249) xor d(247) xor d(246) xor d(245) xor d(244) xor d(243) xor d(242) xor d(236) xor d(235) xor d(231) xor d(230) xor d(229) xor d(228) xor d(223) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(215) xor d(211) xor d(208) xor d(207) xor d(205) xor d(202) xor d(200) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(191) xor d(189) xor d(188) xor d(186) xor d(185) xor d(182) xor d(181) xor d(178) xor d(176) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(163) xor d(159) xor d(158) xor d(157) xor d(155) xor d(154) xor d(150) xor d(146) xor d(142) xor d(138) xor d(137) xor d(135) xor d(134) xor d(129) xor d(128) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(112) xor d(111) xor d(110) xor d(109) xor d(106) xor d(103) xor d(102) xor d(99) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(88) xor d(87) xor d(86) xor d(83) xor d(82) xor d(78) xor d(76) xor d(75) xor d(74) xor d(72) xor d(70) xor d(69) xor d(64) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(42) xor d(32) xor d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(5) xor c(7) xor c(8) xor c(9) xor c(13) xor c(14) xor c(16) xor c(17) xor c(21) xor c(22) xor c(25) xor c(26) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(14) := d(510) xor d(509) xor d(508) xor d(507) xor d(506) xor d(503) xor d(502) xor d(498) xor d(497) xor d(495) xor d(494) xor d(490) xor d(489) xor d(488) xor d(486) xor d(479) xor d(478) xor d(475) xor d(474) xor d(473) xor d(472) xor d(468) xor d(466) xor d(464) xor d(463) xor d(462) xor d(460) xor d(459) xor d(457) xor d(455) xor d(453) xor d(452) xor d(448) xor d(446) xor d(439) xor d(438) xor d(437) xor d(432) xor d(430) xor d(429) xor d(427) xor d(425) xor d(421) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(413) xor d(411) xor d(409) xor d(408) xor d(407) xor d(404) xor d(398) xor d(397) xor d(396) xor d(393) xor d(389) xor d(388) xor d(387) xor d(386) xor d(382) xor d(381) xor d(380) xor d(377) xor d(374) xor d(372) xor d(370) xor d(369) xor d(366) xor d(365) xor d(364) xor d(362) xor d(360) xor d(359) xor d(357) xor d(356) xor d(353) xor d(343) xor d(342) xor d(341) xor d(338) xor d(337) xor d(334) xor d(332) xor d(331) xor d(328) xor d(327) xor d(326) xor d(322) xor d(320) xor d(316) xor d(315) xor d(314) xor d(313) xor d(310) xor d(308) xor d(307) xor d(305) xor d(299) xor d(293) xor d(292) xor d(282) xor d(281) xor d(280) xor d(279) xor d(277) xor d(275) xor d(271) xor d(268) xor d(267) xor d(263) xor d(261) xor d(259) xor d(258) xor d(257) xor d(255) xor d(253) xor d(250) xor d(248) xor d(247) xor d(246) xor d(245) xor d(244) xor d(243) xor d(237) xor d(236) xor d(232) xor d(231) xor d(230) xor d(229) xor d(224) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(216) xor d(212) xor d(209) xor d(208) xor d(206) xor d(203) xor d(201) xor d(199) xor d(198) xor d(196) xor d(195) xor d(194) xor d(192) xor d(190) xor d(189) xor d(187) xor d(186) xor d(183) xor d(182) xor d(179) xor d(177) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(164) xor d(160) xor d(159) xor d(158) xor d(156) xor d(155) xor d(151) xor d(147) xor d(143) xor d(139) xor d(138) xor d(136) xor d(135) xor d(130) xor d(129) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(113) xor d(112) xor d(111) xor d(110) xor d(107) xor d(104) xor d(103) xor d(100) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(89) xor d(88) xor d(87) xor d(84) xor d(83) xor d(79) xor d(77) xor d(76) xor d(75) xor d(73) xor d(71) xor d(70) xor d(65) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(43) xor d(33) xor d(32) xor d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(6) xor c(8) xor c(9) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(22) xor c(23) xor c(26) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(15) := d(511) xor d(510) xor d(509) xor d(508) xor d(507) xor d(504) xor d(503) xor d(499) xor d(498) xor d(496) xor d(495) xor d(491) xor d(490) xor d(489) xor d(487) xor d(480) xor d(479) xor d(476) xor d(475) xor d(474) xor d(473) xor d(469) xor d(467) xor d(465) xor d(464) xor d(463) xor d(461) xor d(460) xor d(458) xor d(456) xor d(454) xor d(453) xor d(449) xor d(447) xor d(440) xor d(439) xor d(438) xor d(433) xor d(431) xor d(430) xor d(428) xor d(426) xor d(422) xor d(421) xor d(420) xor d(419) xor d(418) xor d(417) xor d(414) xor d(412) xor d(410) xor d(409) xor d(408) xor d(405) xor d(399) xor d(398) xor d(397) xor d(394) xor d(390) xor d(389) xor d(388) xor d(387) xor d(383) xor d(382) xor d(381) xor d(378) xor d(375) xor d(373) xor d(371) xor d(370) xor d(367) xor d(366) xor d(365) xor d(363) xor d(361) xor d(360) xor d(358) xor d(357) xor d(354) xor d(344) xor d(343) xor d(342) xor d(339) xor d(338) xor d(335) xor d(333) xor d(332) xor d(329) xor d(328) xor d(327) xor d(323) xor d(321) xor d(317) xor d(316) xor d(315) xor d(314) xor d(311) xor d(309) xor d(308) xor d(306) xor d(300) xor d(294) xor d(293) xor d(283) xor d(282) xor d(281) xor d(280) xor d(278) xor d(276) xor d(272) xor d(269) xor d(268) xor d(264) xor d(262) xor d(260) xor d(259) xor d(258) xor d(256) xor d(254) xor d(251) xor d(249) xor d(248) xor d(247) xor d(246) xor d(245) xor d(244) xor d(238) xor d(237) xor d(233) xor d(232) xor d(231) xor d(230) xor d(225) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(217) xor d(213) xor d(210) xor d(209) xor d(207) xor d(204) xor d(202) xor d(200) xor d(199) xor d(197) xor d(196) xor d(195) xor d(193) xor d(191) xor d(190) xor d(188) xor d(187) xor d(184) xor d(183) xor d(180) xor d(178) xor d(173) xor d(172) xor d(171) xor d(170) xor d(168) xor d(165) xor d(161) xor d(160) xor d(159) xor d(157) xor d(156) xor d(152) xor d(148) xor d(144) xor d(140) xor d(139) xor d(137) xor d(136) xor d(131) xor d(130) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(114) xor d(113) xor d(112) xor d(111) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(90) xor d(89) xor d(88) xor d(85) xor d(84) xor d(80) xor d(78) xor d(77) xor d(76) xor d(74) xor d(72) xor d(71) xor d(66) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(50) xor d(49) xor d(45) xor d(44) xor d(34) xor d(33) xor d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(0) xor c(7) xor c(9) xor c(10) xor c(11) xor c(15) xor c(16) xor c(18) xor c(19) xor c(23) xor c(24) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(16) := d(509) xor d(507) xor d(506) xor d(505) xor d(504) xor d(502) xor d(501) xor d(499) xor d(497) xor d(496) xor d(495) xor d(494) xor d(493) xor d(489) xor d(486) xor d(483) xor d(482) xor d(479) xor d(475) xor d(474) xor d(472) xor d(466) xor d(459) xor d(458) xor d(457) xor d(455) xor d(454) xor d(452) xor d(449) xor d(444) xor d(441) xor d(440) xor d(439) xor d(437) xor d(436) xor d(433) xor d(432) xor d(431) xor d(429) xor d(427) xor d(424) xor d(423) xor d(421) xor d(420) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(411) xor d(410) xor d(408) xor d(407) xor d(406) xor d(405) xor d(404) xor d(396) xor d(395) xor d(393) xor d(392) xor d(389) xor d(387) xor d(386) xor d(384) xor d(383) xor d(382) xor d(381) xor d(379) xor d(378) xor d(371) xor d(369) xor d(367) xor d(364) xor d(363) xor d(361) xor d(357) xor d(355) xor d(353) xor d(349) xor d(348) xor d(347) xor d(343) xor d(342) xor d(341) xor d(340) xor d(338) xor d(337) xor d(336) xor d(335) xor d(330) xor d(329) xor d(327) xor d(324) xor d(321) xor d(320) xor d(319) xor d(316) xor d(307) xor d(305) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(298) xor d(297) xor d(296) xor d(292) xor d(290) xor d(288) xor d(287) xor d(286) xor d(284) xor d(282) xor d(281) xor d(276) xor d(274) xor d(270) xor d(268) xor d(264) xor d(263) xor d(260) xor d(250) xor d(249) xor d(247) xor d(246) xor d(245) xor d(243) xor d(239) xor d(238) xor d(237) xor d(233) xor d(232) xor d(231) xor d(230) xor d(228) xor d(227) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(218) xor d(216) xor d(212) xor d(211) xor d(209) xor d(207) xor d(205) xor d(202) xor d(200) xor d(199) xor d(196) xor d(193) xor d(190) xor d(189) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(181) xor d(179) xor d(174) xor d(173) xor d(170) xor d(167) xor d(160) xor d(157) xor d(156) xor d(155) xor d(153) xor d(151) xor d(145) xor d(144) xor d(143) xor d(141) xor d(140) xor d(138) xor d(136) xor d(135) xor d(134) xor d(131) xor d(128) xor d(127) xor d(124) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(115) xor d(112) xor d(111) xor d(110) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(99) xor d(97) xor d(94) xor d(91) xor d(90) xor d(89) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(78) xor d(77) xor d(75) xor d(68) xor d(66) xor d(57) xor d(56) xor d(51) xor d(48) xor d(47) xor d(46) xor d(44) xor d(37) xor d(35) xor d(32) xor d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(2) xor c(3) xor c(6) xor c(9) xor c(13) xor c(14) xor c(15) xor c(16) xor c(17) xor c(19) xor c(21) xor c(22) xor c(24) xor c(25) xor c(26) xor c(27) xor c(29); + newcrc(17) := d(510) xor d(508) xor d(507) xor d(506) xor d(505) xor d(503) xor d(502) xor d(500) xor d(498) xor d(497) xor d(496) xor d(495) xor d(494) xor d(490) xor d(487) xor d(484) xor d(483) xor d(480) xor d(476) xor d(475) xor d(473) xor d(467) xor d(460) xor d(459) xor d(458) xor d(456) xor d(455) xor d(453) xor d(450) xor d(445) xor d(442) xor d(441) xor d(440) xor d(438) xor d(437) xor d(434) xor d(433) xor d(432) xor d(430) xor d(428) xor d(425) xor d(424) xor d(422) xor d(421) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(411) xor d(409) xor d(408) xor d(407) xor d(406) xor d(405) xor d(397) xor d(396) xor d(394) xor d(393) xor d(390) xor d(388) xor d(387) xor d(385) xor d(384) xor d(383) xor d(382) xor d(380) xor d(379) xor d(372) xor d(370) xor d(368) xor d(365) xor d(364) xor d(362) xor d(358) xor d(356) xor d(354) xor d(350) xor d(349) xor d(348) xor d(344) xor d(343) xor d(342) xor d(341) xor d(339) xor d(338) xor d(337) xor d(336) xor d(331) xor d(330) xor d(328) xor d(325) xor d(322) xor d(321) xor d(320) xor d(317) xor d(308) xor d(306) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(298) xor d(297) xor d(293) xor d(291) xor d(289) xor d(288) xor d(287) xor d(285) xor d(283) xor d(282) xor d(277) xor d(275) xor d(271) xor d(269) xor d(265) xor d(264) xor d(261) xor d(251) xor d(250) xor d(248) xor d(247) xor d(246) xor d(244) xor d(240) xor d(239) xor d(238) xor d(234) xor d(233) xor d(232) xor d(231) xor d(229) xor d(228) xor d(224) xor d(223) xor d(222) xor d(221) xor d(220) xor d(219) xor d(217) xor d(213) xor d(212) xor d(210) xor d(208) xor d(206) xor d(203) xor d(201) xor d(200) xor d(197) xor d(194) xor d(191) xor d(190) xor d(187) xor d(186) xor d(185) xor d(184) xor d(183) xor d(182) xor d(180) xor d(175) xor d(174) xor d(171) xor d(168) xor d(161) xor d(158) xor d(157) xor d(156) xor d(154) xor d(152) xor d(146) xor d(145) xor d(144) xor d(142) xor d(141) xor d(139) xor d(137) xor d(136) xor d(135) xor d(132) xor d(129) xor d(128) xor d(125) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(116) xor d(113) xor d(112) xor d(111) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(100) xor d(98) xor d(95) xor d(92) xor d(91) xor d(90) xor d(88) xor d(87) xor d(85) xor d(84) xor d(83) xor d(79) xor d(78) xor d(76) xor d(69) xor d(67) xor d(58) xor d(57) xor d(52) xor d(49) xor d(48) xor d(47) xor d(45) xor d(38) xor d(36) xor d(33) xor d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(0) xor c(3) xor c(4) xor c(7) xor c(10) xor c(14) xor c(15) xor c(16) xor c(17) xor c(18) xor c(20) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(28) xor c(30); + newcrc(18) := d(511) xor d(509) xor d(508) xor d(507) xor d(506) xor d(504) xor d(503) xor d(501) xor d(499) xor d(498) xor d(497) xor d(496) xor d(495) xor d(491) xor d(488) xor d(485) xor d(484) xor d(481) xor d(477) xor d(476) xor d(474) xor d(468) xor d(461) xor d(460) xor d(459) xor d(457) xor d(456) xor d(454) xor d(451) xor d(446) xor d(443) xor d(442) xor d(441) xor d(439) xor d(438) xor d(435) xor d(434) xor d(433) xor d(431) xor d(429) xor d(426) xor d(425) xor d(423) xor d(422) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(412) xor d(410) xor d(409) xor d(408) xor d(407) xor d(406) xor d(398) xor d(397) xor d(395) xor d(394) xor d(391) xor d(389) xor d(388) xor d(386) xor d(385) xor d(384) xor d(383) xor d(381) xor d(380) xor d(373) xor d(371) xor d(369) xor d(366) xor d(365) xor d(363) xor d(359) xor d(357) xor d(355) xor d(351) xor d(350) xor d(349) xor d(345) xor d(344) xor d(343) xor d(342) xor d(340) xor d(339) xor d(338) xor d(337) xor d(332) xor d(331) xor d(329) xor d(326) xor d(323) xor d(322) xor d(321) xor d(318) xor d(309) xor d(307) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(298) xor d(294) xor d(292) xor d(290) xor d(289) xor d(288) xor d(286) xor d(284) xor d(283) xor d(278) xor d(276) xor d(272) xor d(270) xor d(266) xor d(265) xor d(262) xor d(252) xor d(251) xor d(249) xor d(248) xor d(247) xor d(245) xor d(241) xor d(240) xor d(239) xor d(235) xor d(234) xor d(233) xor d(232) xor d(230) xor d(229) xor d(225) xor d(224) xor d(223) xor d(222) xor d(221) xor d(220) xor d(218) xor d(214) xor d(213) xor d(211) xor d(209) xor d(207) xor d(204) xor d(202) xor d(201) xor d(198) xor d(195) xor d(192) xor d(191) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(183) xor d(181) xor d(176) xor d(175) xor d(172) xor d(169) xor d(162) xor d(159) xor d(158) xor d(157) xor d(155) xor d(153) xor d(147) xor d(146) xor d(145) xor d(143) xor d(142) xor d(140) xor d(138) xor d(137) xor d(136) xor d(133) xor d(130) xor d(129) xor d(126) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(117) xor d(114) xor d(113) xor d(112) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(101) xor d(99) xor d(96) xor d(93) xor d(92) xor d(91) xor d(89) xor d(88) xor d(86) xor d(85) xor d(84) xor d(80) xor d(79) xor d(77) xor d(70) xor d(68) xor d(59) xor d(58) xor d(53) xor d(50) xor d(49) xor d(48) xor d(46) xor d(39) xor d(37) xor d(34) xor d(32) xor d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(1) xor c(4) xor c(5) xor c(8) xor c(11) xor c(15) xor c(16) xor c(17) xor c(18) xor c(19) xor c(21) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(19) := d(510) xor d(509) xor d(508) xor d(507) xor d(505) xor d(504) xor d(502) xor d(500) xor d(499) xor d(498) xor d(497) xor d(496) xor d(492) xor d(489) xor d(486) xor d(485) xor d(482) xor d(478) xor d(477) xor d(475) xor d(469) xor d(462) xor d(461) xor d(460) xor d(458) xor d(457) xor d(455) xor d(452) xor d(447) xor d(444) xor d(443) xor d(442) xor d(440) xor d(439) xor d(436) xor d(435) xor d(434) xor d(432) xor d(430) xor d(427) xor d(426) xor d(424) xor d(423) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(413) xor d(411) xor d(410) xor d(409) xor d(408) xor d(407) xor d(399) xor d(398) xor d(396) xor d(395) xor d(392) xor d(390) xor d(389) xor d(387) xor d(386) xor d(385) xor d(384) xor d(382) xor d(381) xor d(374) xor d(372) xor d(370) xor d(367) xor d(366) xor d(364) xor d(360) xor d(358) xor d(356) xor d(352) xor d(351) xor d(350) xor d(346) xor d(345) xor d(344) xor d(343) xor d(341) xor d(340) xor d(339) xor d(338) xor d(333) xor d(332) xor d(330) xor d(327) xor d(324) xor d(323) xor d(322) xor d(319) xor d(310) xor d(308) xor d(306) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(299) xor d(295) xor d(293) xor d(291) xor d(290) xor d(289) xor d(287) xor d(285) xor d(284) xor d(279) xor d(277) xor d(273) xor d(271) xor d(267) xor d(266) xor d(263) xor d(253) xor d(252) xor d(250) xor d(249) xor d(248) xor d(246) xor d(242) xor d(241) xor d(240) xor d(236) xor d(235) xor d(234) xor d(233) xor d(231) xor d(230) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(221) xor d(219) xor d(215) xor d(214) xor d(212) xor d(210) xor d(208) xor d(205) xor d(203) xor d(202) xor d(199) xor d(196) xor d(193) xor d(192) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(177) xor d(176) xor d(173) xor d(170) xor d(163) xor d(160) xor d(159) xor d(158) xor d(156) xor d(154) xor d(148) xor d(147) xor d(146) xor d(144) xor d(143) xor d(141) xor d(139) xor d(138) xor d(137) xor d(134) xor d(131) xor d(130) xor d(127) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(118) xor d(115) xor d(114) xor d(113) xor d(112) xor d(108) xor d(107) xor d(106) xor d(105) xor d(103) xor d(102) xor d(100) xor d(97) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(87) xor d(86) xor d(85) xor d(81) xor d(80) xor d(78) xor d(71) xor d(69) xor d(60) xor d(59) xor d(54) xor d(51) xor d(50) xor d(49) xor d(47) xor d(40) xor d(38) xor d(35) xor d(33) xor d(32) xor d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(2) xor c(5) xor c(6) xor c(9) xor c(12) xor c(16) xor c(17) xor c(18) xor c(19) xor c(20) xor c(22) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(20) := d(511) xor d(510) xor d(509) xor d(508) xor d(506) xor d(505) xor d(503) xor d(501) xor d(500) xor d(499) xor d(498) xor d(497) xor d(493) xor d(490) xor d(487) xor d(486) xor d(483) xor d(479) xor d(478) xor d(476) xor d(470) xor d(463) xor d(462) xor d(461) xor d(459) xor d(458) xor d(456) xor d(453) xor d(448) xor d(445) xor d(444) xor d(443) xor d(441) xor d(440) xor d(437) xor d(436) xor d(435) xor d(433) xor d(431) xor d(428) xor d(427) xor d(425) xor d(424) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(414) xor d(412) xor d(411) xor d(410) xor d(409) xor d(408) xor d(400) xor d(399) xor d(397) xor d(396) xor d(393) xor d(391) xor d(390) xor d(388) xor d(387) xor d(386) xor d(385) xor d(383) xor d(382) xor d(375) xor d(373) xor d(371) xor d(368) xor d(367) xor d(365) xor d(361) xor d(359) xor d(357) xor d(353) xor d(352) xor d(351) xor d(347) xor d(346) xor d(345) xor d(344) xor d(342) xor d(341) xor d(340) xor d(339) xor d(334) xor d(333) xor d(331) xor d(328) xor d(325) xor d(324) xor d(323) xor d(320) xor d(311) xor d(309) xor d(307) xor d(306) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(300) xor d(296) xor d(294) xor d(292) xor d(291) xor d(290) xor d(288) xor d(286) xor d(285) xor d(280) xor d(278) xor d(274) xor d(272) xor d(268) xor d(267) xor d(264) xor d(254) xor d(253) xor d(251) xor d(250) xor d(249) xor d(247) xor d(243) xor d(242) xor d(241) xor d(237) xor d(236) xor d(235) xor d(234) xor d(232) xor d(231) xor d(227) xor d(226) xor d(225) xor d(224) xor d(223) xor d(222) xor d(220) xor d(216) xor d(215) xor d(213) xor d(211) xor d(209) xor d(206) xor d(204) xor d(203) xor d(200) xor d(197) xor d(194) xor d(193) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(178) xor d(177) xor d(174) xor d(171) xor d(164) xor d(161) xor d(160) xor d(159) xor d(157) xor d(155) xor d(149) xor d(148) xor d(147) xor d(145) xor d(144) xor d(142) xor d(140) xor d(139) xor d(138) xor d(135) xor d(132) xor d(131) xor d(128) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(119) xor d(116) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(107) xor d(106) xor d(104) xor d(103) xor d(101) xor d(98) xor d(95) xor d(94) xor d(93) xor d(91) xor d(90) xor d(88) xor d(87) xor d(86) xor d(82) xor d(81) xor d(79) xor d(72) xor d(70) xor d(61) xor d(60) xor d(55) xor d(52) xor d(51) xor d(50) xor d(48) xor d(41) xor d(39) xor d(36) xor d(34) xor d(33) xor d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(3) xor c(6) xor c(7) xor c(10) xor c(13) xor c(17) xor c(18) xor c(19) xor c(20) xor c(21) xor c(23) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(21) := d(511) xor d(510) xor d(509) xor d(507) xor d(506) xor d(504) xor d(502) xor d(501) xor d(500) xor d(499) xor d(498) xor d(494) xor d(491) xor d(488) xor d(487) xor d(484) xor d(480) xor d(479) xor d(477) xor d(471) xor d(464) xor d(463) xor d(462) xor d(460) xor d(459) xor d(457) xor d(454) xor d(449) xor d(446) xor d(445) xor d(444) xor d(442) xor d(441) xor d(438) xor d(437) xor d(436) xor d(434) xor d(432) xor d(429) xor d(428) xor d(426) xor d(425) xor d(421) xor d(420) xor d(419) xor d(418) xor d(417) xor d(416) xor d(415) xor d(413) xor d(412) xor d(411) xor d(410) xor d(409) xor d(401) xor d(400) xor d(398) xor d(397) xor d(394) xor d(392) xor d(391) xor d(389) xor d(388) xor d(387) xor d(386) xor d(384) xor d(383) xor d(376) xor d(374) xor d(372) xor d(369) xor d(368) xor d(366) xor d(362) xor d(360) xor d(358) xor d(354) xor d(353) xor d(352) xor d(348) xor d(347) xor d(346) xor d(345) xor d(343) xor d(342) xor d(341) xor d(340) xor d(335) xor d(334) xor d(332) xor d(329) xor d(326) xor d(325) xor d(324) xor d(321) xor d(312) xor d(310) xor d(308) xor d(307) xor d(306) xor d(305) xor d(304) xor d(303) xor d(302) xor d(301) xor d(297) xor d(295) xor d(293) xor d(292) xor d(291) xor d(289) xor d(287) xor d(286) xor d(281) xor d(279) xor d(275) xor d(273) xor d(269) xor d(268) xor d(265) xor d(255) xor d(254) xor d(252) xor d(251) xor d(250) xor d(248) xor d(244) xor d(243) xor d(242) xor d(238) xor d(237) xor d(236) xor d(235) xor d(233) xor d(232) xor d(228) xor d(227) xor d(226) xor d(225) xor d(224) xor d(223) xor d(221) xor d(217) xor d(216) xor d(214) xor d(212) xor d(210) xor d(207) xor d(205) xor d(204) xor d(201) xor d(198) xor d(195) xor d(194) xor d(191) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(179) xor d(178) xor d(175) xor d(172) xor d(165) xor d(162) xor d(161) xor d(160) xor d(158) xor d(156) xor d(150) xor d(149) xor d(148) xor d(146) xor d(145) xor d(143) xor d(141) xor d(140) xor d(139) xor d(136) xor d(133) xor d(132) xor d(129) xor d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(120) xor d(117) xor d(116) xor d(115) xor d(114) xor d(110) xor d(109) xor d(108) xor d(107) xor d(105) xor d(104) xor d(102) xor d(99) xor d(96) xor d(95) xor d(94) xor d(92) xor d(91) xor d(89) xor d(88) xor d(87) xor d(83) xor d(82) xor d(80) xor d(73) xor d(71) xor d(62) xor d(61) xor d(56) xor d(53) xor d(52) xor d(51) xor d(49) xor d(42) xor d(40) xor d(37) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(0) xor c(4) xor c(7) xor c(8) xor c(11) xor c(14) xor c(18) xor c(19) xor c(20) xor c(21) xor c(22) xor c(24) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(22) := d(506) xor d(505) xor d(503) xor d(499) xor d(494) xor d(493) xor d(491) xor d(490) xor d(486) xor d(485) xor d(483) xor d(482) xor d(479) xor d(478) xor d(477) xor d(476) xor d(470) xor d(468) xor d(463) xor d(462) xor d(460) xor d(455) xor d(452) xor d(449) xor d(448) xor d(447) xor d(446) xor d(445) xor d(444) xor d(443) xor d(442) xor d(439) xor d(438) xor d(436) xor d(435) xor d(434) xor d(430) xor d(429) xor d(427) xor d(426) xor d(424) xor d(421) xor d(420) xor d(417) xor d(413) xor d(411) xor d(410) xor d(409) xor d(408) xor d(407) xor d(405) xor d(404) xor d(402) xor d(401) xor d(400) xor d(396) xor d(395) xor d(391) xor d(389) xor d(386) xor d(385) xor d(384) xor d(381) xor d(378) xor d(377) xor d(376) xor d(375) xor d(374) xor d(373) xor d(372) xor d(370) xor d(368) xor d(367) xor d(366) xor d(362) xor d(361) xor d(358) xor d(357) xor d(355) xor d(354) xor d(346) xor d(345) xor d(343) xor d(339) xor d(338) xor d(337) xor d(336) xor d(334) xor d(330) xor d(328) xor d(326) xor d(325) xor d(321) xor d(320) xor d(319) xor d(318) xor d(317) xor d(315) xor d(313) xor d(312) xor d(311) xor d(310) xor d(308) xor d(307) xor d(306) xor d(304) xor d(300) xor d(299) xor d(297) xor d(295) xor d(293) xor d(286) xor d(283) xor d(282) xor d(280) xor d(279) xor d(277) xor d(273) xor d(270) xor d(268) xor d(266) xor d(265) xor d(264) xor d(261) xor d(259) xor d(257) xor d(256) xor d(253) xor d(251) xor d(249) xor d(248) xor d(245) xor d(244) xor d(239) xor d(238) xor d(236) xor d(233) xor d(230) xor d(229) xor d(225) xor d(222) xor d(218) xor d(217) xor d(216) xor d(215) xor d(214) xor d(213) xor d(212) xor d(211) xor d(210) xor d(209) xor d(207) xor d(206) xor d(205) xor d(203) xor d(201) xor d(198) xor d(197) xor d(196) xor d(195) xor d(194) xor d(193) xor d(189) xor d(187) xor d(186) xor d(185) xor d(183) xor d(182) xor d(180) xor d(179) xor d(176) xor d(173) xor d(172) xor d(171) xor d(170) xor d(169) xor d(167) xor d(163) xor d(159) xor d(158) xor d(157) xor d(156) xor d(155) xor d(150) xor d(147) xor d(146) xor d(143) xor d(142) xor d(141) xor d(140) xor d(136) xor d(135) xor d(133) xor d(132) xor d(130) xor d(128) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(109) xor d(108) xor d(105) xor d(104) xor d(101) xor d(100) xor d(99) xor d(98) xor d(94) xor d(93) xor d(92) xor d(90) xor d(89) xor d(88) xor d(87) xor d(85) xor d(82) xor d(79) xor d(74) xor d(73) xor d(68) xor d(67) xor d(66) xor d(65) xor d(62) xor d(61) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(2) xor c(3) xor c(5) xor c(6) xor c(10) xor c(11) xor c(13) xor c(14) xor c(19) xor c(23) xor c(25) xor c(26); + newcrc(23) := d(511) xor d(510) xor d(508) xor d(504) xor d(502) xor d(501) xor d(493) xor d(490) xor d(489) xor d(488) xor d(487) xor d(484) xor d(482) xor d(481) xor d(478) xor d(476) xor d(472) xor d(471) xor d(470) xor d(469) xor d(468) xor d(465) xor d(463) xor d(462) xor d(458) xor d(456) xor d(453) xor d(452) xor d(447) xor d(446) xor d(445) xor d(443) xor d(440) xor d(439) xor d(435) xor d(434) xor d(433) xor d(431) xor d(430) xor d(428) xor d(427) xor d(425) xor d(424) xor d(421) xor d(419) xor d(416) xor d(411) xor d(410) xor d(407) xor d(406) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(399) xor d(398) xor d(397) xor d(393) xor d(391) xor d(388) xor d(385) xor d(382) xor d(381) xor d(379) xor d(377) xor d(375) xor d(373) xor d(372) xor d(371) xor d(367) xor d(366) xor d(357) xor d(356) xor d(355) xor d(353) xor d(349) xor d(348) xor d(346) xor d(345) xor d(342) xor d(341) xor d(340) xor d(334) xor d(333) xor d(331) xor d(329) xor d(328) xor d(326) xor d(317) xor d(316) xor d(315) xor d(314) xor d(313) xor d(311) xor d(310) xor d(308) xor d(307) xor d(303) xor d(302) xor d(301) xor d(299) xor d(297) xor d(295) xor d(292) xor d(290) xor d(288) xor d(286) xor d(284) xor d(281) xor d(280) xor d(279) xor d(278) xor d(277) xor d(276) xor d(273) xor d(271) xor d(268) xor d(267) xor d(266) xor d(264) xor d(262) xor d(261) xor d(260) xor d(259) xor d(258) xor d(255) xor d(254) xor d(250) xor d(249) xor d(248) xor d(246) xor d(245) xor d(243) xor d(240) xor d(239) xor d(231) xor d(228) xor d(227) xor d(224) xor d(223) xor d(219) xor d(218) xor d(217) xor d(215) xor d(213) xor d(211) xor d(209) xor d(206) xor d(204) xor d(203) xor d(201) xor d(196) xor d(195) xor d(193) xor d(192) xor d(191) xor d(187) xor d(184) xor d(182) xor d(181) xor d(180) xor d(177) xor d(174) xor d(173) xor d(169) xor d(168) xor d(167) xor d(166) xor d(164) xor d(162) xor d(161) xor d(160) xor d(159) xor d(157) xor d(155) xor d(149) xor d(148) xor d(147) xor d(142) xor d(141) xor d(135) xor d(133) xor d(132) xor d(131) xor d(129) xor d(128) xor d(127) xor d(126) xor d(124) xor d(122) xor d(120) xor d(119) xor d(118) xor d(117) xor d(115) xor d(113) xor d(111) xor d(109) xor d(105) xor d(104) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(93) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(75) xor d(74) xor d(73) xor d(72) xor d(69) xor d(65) xor d(62) xor d(60) xor d(59) xor d(56) xor d(55) xor d(54) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(1) xor c(2) xor c(4) xor c(7) xor c(8) xor c(9) xor c(10) xor c(13) xor c(21) xor c(22) xor c(24) xor c(28) xor c(30) xor c(31); + newcrc(24) := d(511) xor d(509) xor d(505) xor d(503) xor d(502) xor d(494) xor d(491) xor d(490) xor d(489) xor d(488) xor d(485) xor d(483) xor d(482) xor d(479) xor d(477) xor d(473) xor d(472) xor d(471) xor d(470) xor d(469) xor d(466) xor d(464) xor d(463) xor d(459) xor d(457) xor d(454) xor d(453) xor d(448) xor d(447) xor d(446) xor d(444) xor d(441) xor d(440) xor d(436) xor d(435) xor d(434) xor d(432) xor d(431) xor d(429) xor d(428) xor d(426) xor d(425) xor d(422) xor d(420) xor d(417) xor d(412) xor d(411) xor d(408) xor d(407) xor d(405) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(399) xor d(398) xor d(394) xor d(392) xor d(389) xor d(386) xor d(383) xor d(382) xor d(380) xor d(378) xor d(376) xor d(374) xor d(373) xor d(372) xor d(368) xor d(367) xor d(358) xor d(357) xor d(356) xor d(354) xor d(350) xor d(349) xor d(347) xor d(346) xor d(343) xor d(342) xor d(341) xor d(335) xor d(334) xor d(332) xor d(330) xor d(329) xor d(327) xor d(318) xor d(317) xor d(316) xor d(315) xor d(314) xor d(312) xor d(311) xor d(309) xor d(308) xor d(304) xor d(303) xor d(302) xor d(300) xor d(298) xor d(296) xor d(293) xor d(291) xor d(289) xor d(287) xor d(285) xor d(282) xor d(281) xor d(280) xor d(279) xor d(278) xor d(277) xor d(274) xor d(272) xor d(269) xor d(268) xor d(267) xor d(265) xor d(263) xor d(262) xor d(261) xor d(260) xor d(259) xor d(256) xor d(255) xor d(251) xor d(250) xor d(249) xor d(247) xor d(246) xor d(244) xor d(241) xor d(240) xor d(232) xor d(229) xor d(228) xor d(225) xor d(224) xor d(220) xor d(219) xor d(218) xor d(216) xor d(214) xor d(212) xor d(210) xor d(207) xor d(205) xor d(204) xor d(202) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(188) xor d(185) xor d(183) xor d(182) xor d(181) xor d(178) xor d(175) xor d(174) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(163) xor d(162) xor d(161) xor d(160) xor d(158) xor d(156) xor d(150) xor d(149) xor d(148) xor d(143) xor d(142) xor d(136) xor d(134) xor d(133) xor d(132) xor d(130) xor d(129) xor d(128) xor d(127) xor d(125) xor d(123) xor d(121) xor d(120) xor d(119) xor d(118) xor d(116) xor d(114) xor d(112) xor d(110) xor d(106) xor d(105) xor d(104) xor d(103) xor d(101) xor d(99) xor d(98) xor d(97) xor d(94) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(76) xor d(75) xor d(74) xor d(73) xor d(70) xor d(66) xor d(63) xor d(61) xor d(60) xor d(57) xor d(56) xor d(55) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(40) xor d(39) xor d(37) xor d(36) xor d(35) xor d(32) xor d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(2) xor c(3) xor c(5) xor c(8) xor c(9) xor c(10) xor c(11) xor c(14) xor c(22) xor c(23) xor c(25) xor c(29) xor c(31); + newcrc(25) := d(510) xor d(506) xor d(504) xor d(503) xor d(495) xor d(492) xor d(491) xor d(490) xor d(489) xor d(486) xor d(484) xor d(483) xor d(480) xor d(478) xor d(474) xor d(473) xor d(472) xor d(471) xor d(470) xor d(467) xor d(465) xor d(464) xor d(460) xor d(458) xor d(455) xor d(454) xor d(449) xor d(448) xor d(447) xor d(445) xor d(442) xor d(441) xor d(437) xor d(436) xor d(435) xor d(433) xor d(432) xor d(430) xor d(429) xor d(427) xor d(426) xor d(423) xor d(421) xor d(418) xor d(413) xor d(412) xor d(409) xor d(408) xor d(406) xor d(405) xor d(404) xor d(403) xor d(402) xor d(401) xor d(400) xor d(399) xor d(395) xor d(393) xor d(390) xor d(387) xor d(384) xor d(383) xor d(381) xor d(379) xor d(377) xor d(375) xor d(374) xor d(373) xor d(369) xor d(368) xor d(359) xor d(358) xor d(357) xor d(355) xor d(351) xor d(350) xor d(348) xor d(347) xor d(344) xor d(343) xor d(342) xor d(336) xor d(335) xor d(333) xor d(331) xor d(330) xor d(328) xor d(319) xor d(318) xor d(317) xor d(316) xor d(315) xor d(313) xor d(312) xor d(310) xor d(309) xor d(305) xor d(304) xor d(303) xor d(301) xor d(299) xor d(297) xor d(294) xor d(292) xor d(290) xor d(288) xor d(286) xor d(283) xor d(282) xor d(281) xor d(280) xor d(279) xor d(278) xor d(275) xor d(273) xor d(270) xor d(269) xor d(268) xor d(266) xor d(264) xor d(263) xor d(262) xor d(261) xor d(260) xor d(257) xor d(256) xor d(252) xor d(251) xor d(250) xor d(248) xor d(247) xor d(245) xor d(242) xor d(241) xor d(233) xor d(230) xor d(229) xor d(226) xor d(225) xor d(221) xor d(220) xor d(219) xor d(217) xor d(215) xor d(213) xor d(211) xor d(208) xor d(206) xor d(205) xor d(203) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(189) xor d(186) xor d(184) xor d(183) xor d(182) xor d(179) xor d(176) xor d(175) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(164) xor d(163) xor d(162) xor d(161) xor d(159) xor d(157) xor d(151) xor d(150) xor d(149) xor d(144) xor d(143) xor d(137) xor d(135) xor d(134) xor d(133) xor d(131) xor d(130) xor d(129) xor d(128) xor d(126) xor d(124) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(115) xor d(113) xor d(111) xor d(107) xor d(106) xor d(105) xor d(104) xor d(102) xor d(100) xor d(99) xor d(98) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(87) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(77) xor d(76) xor d(75) xor d(74) xor d(71) xor d(67) xor d(64) xor d(62) xor d(61) xor d(58) xor d(57) xor d(56) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(41) xor d(40) xor d(38) xor d(37) xor d(36) xor d(33) xor d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(0) xor c(3) xor c(4) xor c(6) xor c(9) xor c(10) xor c(11) xor c(12) xor c(15) xor c(23) xor c(24) xor c(26) xor c(30); + newcrc(26) := d(510) xor d(508) xor d(506) xor d(505) xor d(504) xor d(502) xor d(501) xor d(500) xor d(496) xor d(495) xor d(494) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(484) xor d(483) xor d(482) xor d(480) xor d(477) xor d(476) xor d(475) xor d(474) xor d(473) xor d(471) xor d(470) xor d(466) xor d(464) xor d(462) xor d(459) xor d(458) xor d(456) xor d(455) xor d(452) xor d(446) xor d(444) xor d(443) xor d(442) xor d(438) xor d(431) xor d(430) xor d(428) xor d(427) xor d(418) xor d(416) xor d(413) xor d(412) xor d(410) xor d(408) xor d(406) xor d(403) xor d(402) xor d(401) xor d(399) xor d(398) xor d(394) xor d(393) xor d(392) xor d(390) xor d(387) xor d(386) xor d(385) xor d(384) xor d(382) xor d(381) xor d(380) xor d(375) xor d(372) xor d(370) xor d(368) xor d(366) xor d(363) xor d(362) xor d(360) xor d(357) xor d(356) xor d(353) xor d(352) xor d(351) xor d(347) xor d(343) xor d(342) xor d(341) xor d(339) xor d(338) xor d(336) xor d(335) xor d(333) xor d(332) xor d(331) xor d(329) xor d(328) xor d(327) xor d(322) xor d(321) xor d(316) xor d(315) xor d(314) xor d(313) xor d(312) xor d(311) xor d(309) xor d(306) xor d(304) xor d(303) xor d(299) xor d(297) xor d(296) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(289) xor d(288) xor d(286) xor d(284) xor d(282) xor d(281) xor d(280) xor d(277) xor d(273) xor d(271) xor d(270) xor d(268) xor d(267) xor d(263) xor d(262) xor d(259) xor d(258) xor d(255) xor d(253) xor d(251) xor d(249) xor d(246) xor d(242) xor d(237) xor d(231) xor d(228) xor d(224) xor d(222) xor d(221) xor d(220) xor d(218) xor d(210) xor d(208) xor d(206) xor d(204) xor d(203) xor d(202) xor d(201) xor d(197) xor d(196) xor d(195) xor d(193) xor d(192) xor d(191) xor d(188) xor d(187) xor d(186) xor d(185) xor d(184) xor d(182) xor d(180) xor d(177) xor d(176) xor d(166) xor d(165) xor d(164) xor d(163) xor d(161) xor d(160) xor d(156) xor d(155) xor d(152) xor d(150) xor d(149) xor d(145) xor d(143) xor d(138) xor d(137) xor d(131) xor d(130) xor d(129) xor d(128) xor d(126) xor d(122) xor d(121) xor d(120) xor d(119) xor d(117) xor d(113) xor d(112) xor d(111) xor d(110) xor d(108) xor d(107) xor d(105) xor d(104) xor d(100) xor d(98) xor d(97) xor d(95) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(88) xor d(81) xor d(79) xor d(78) xor d(77) xor d(76) xor d(75) xor d(73) xor d(67) xor d(66) xor d(62) xor d(61) xor d(60) xor d(59) xor d(57) xor d(55) xor d(54) xor d(52) xor d(49) xor d(48) xor d(47) xor d(44) xor d(42) xor d(41) xor d(39) xor d(38) xor d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(0) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(14) xor c(15) xor c(16) xor c(20) xor c(21) xor c(22) xor c(24) xor c(25) xor c(26) xor c(28) xor c(30); + newcrc(27) := d(511) xor d(509) xor d(507) xor d(506) xor d(505) xor d(503) xor d(502) xor d(501) xor d(497) xor d(496) xor d(495) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(484) xor d(483) xor d(481) xor d(478) xor d(477) xor d(476) xor d(475) xor d(474) xor d(472) xor d(471) xor d(467) xor d(465) xor d(463) xor d(460) xor d(459) xor d(457) xor d(456) xor d(453) xor d(447) xor d(445) xor d(444) xor d(443) xor d(439) xor d(432) xor d(431) xor d(429) xor d(428) xor d(419) xor d(417) xor d(414) xor d(413) xor d(411) xor d(409) xor d(407) xor d(404) xor d(403) xor d(402) xor d(400) xor d(399) xor d(395) xor d(394) xor d(393) xor d(391) xor d(388) xor d(387) xor d(386) xor d(385) xor d(383) xor d(382) xor d(381) xor d(376) xor d(373) xor d(371) xor d(369) xor d(367) xor d(364) xor d(363) xor d(361) xor d(358) xor d(357) xor d(354) xor d(353) xor d(352) xor d(348) xor d(344) xor d(343) xor d(342) xor d(340) xor d(339) xor d(337) xor d(336) xor d(334) xor d(333) xor d(332) xor d(330) xor d(329) xor d(328) xor d(323) xor d(322) xor d(317) xor d(316) xor d(315) xor d(314) xor d(313) xor d(312) xor d(310) xor d(307) xor d(305) xor d(304) xor d(300) xor d(298) xor d(297) xor d(295) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(289) xor d(287) xor d(285) xor d(283) xor d(282) xor d(281) xor d(278) xor d(274) xor d(272) xor d(271) xor d(269) xor d(268) xor d(264) xor d(263) xor d(260) xor d(259) xor d(256) xor d(254) xor d(252) xor d(250) xor d(247) xor d(243) xor d(238) xor d(232) xor d(229) xor d(225) xor d(223) xor d(222) xor d(221) xor d(219) xor d(211) xor d(209) xor d(207) xor d(205) xor d(204) xor d(203) xor d(202) xor d(198) xor d(197) xor d(196) xor d(194) xor d(193) xor d(192) xor d(189) xor d(188) xor d(187) xor d(186) xor d(185) xor d(183) xor d(181) xor d(178) xor d(177) xor d(167) xor d(166) xor d(165) xor d(164) xor d(162) xor d(161) xor d(157) xor d(156) xor d(153) xor d(151) xor d(150) xor d(146) xor d(144) xor d(139) xor d(138) xor d(132) xor d(131) xor d(130) xor d(129) xor d(127) xor d(123) xor d(122) xor d(121) xor d(120) xor d(118) xor d(114) xor d(113) xor d(112) xor d(111) xor d(109) xor d(108) xor d(106) xor d(105) xor d(101) xor d(99) xor d(98) xor d(96) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(89) xor d(82) xor d(80) xor d(79) xor d(78) xor d(77) xor d(76) xor d(74) xor d(68) xor d(67) xor d(63) xor d(62) xor d(61) xor d(60) xor d(58) xor d(56) xor d(55) xor d(53) xor d(50) xor d(49) xor d(48) xor d(45) xor d(43) xor d(42) xor d(40) xor d(39) xor d(32) xor d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(1) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(10) xor c(15) xor c(16) xor c(17) xor c(21) xor c(22) xor c(23) xor c(25) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(28) := d(510) xor d(508) xor d(507) xor d(506) xor d(504) xor d(503) xor d(502) xor d(498) xor d(497) xor d(496) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(484) xor d(482) xor d(479) xor d(478) xor d(477) xor d(476) xor d(475) xor d(473) xor d(472) xor d(468) xor d(466) xor d(464) xor d(461) xor d(460) xor d(458) xor d(457) xor d(454) xor d(448) xor d(446) xor d(445) xor d(444) xor d(440) xor d(433) xor d(432) xor d(430) xor d(429) xor d(420) xor d(418) xor d(415) xor d(414) xor d(412) xor d(410) xor d(408) xor d(405) xor d(404) xor d(403) xor d(401) xor d(400) xor d(396) xor d(395) xor d(394) xor d(392) xor d(389) xor d(388) xor d(387) xor d(386) xor d(384) xor d(383) xor d(382) xor d(377) xor d(374) xor d(372) xor d(370) xor d(368) xor d(365) xor d(364) xor d(362) xor d(359) xor d(358) xor d(355) xor d(354) xor d(353) xor d(349) xor d(345) xor d(344) xor d(343) xor d(341) xor d(340) xor d(338) xor d(337) xor d(335) xor d(334) xor d(333) xor d(331) xor d(330) xor d(329) xor d(324) xor d(323) xor d(318) xor d(317) xor d(316) xor d(315) xor d(314) xor d(313) xor d(311) xor d(308) xor d(306) xor d(305) xor d(301) xor d(299) xor d(298) xor d(296) xor d(295) xor d(294) xor d(293) xor d(292) xor d(291) xor d(290) xor d(288) xor d(286) xor d(284) xor d(283) xor d(282) xor d(279) xor d(275) xor d(273) xor d(272) xor d(270) xor d(269) xor d(265) xor d(264) xor d(261) xor d(260) xor d(257) xor d(255) xor d(253) xor d(251) xor d(248) xor d(244) xor d(239) xor d(233) xor d(230) xor d(226) xor d(224) xor d(223) xor d(222) xor d(220) xor d(212) xor d(210) xor d(208) xor d(206) xor d(205) xor d(204) xor d(203) xor d(199) xor d(198) xor d(197) xor d(195) xor d(194) xor d(193) xor d(190) xor d(189) xor d(188) xor d(187) xor d(186) xor d(184) xor d(182) xor d(179) xor d(178) xor d(168) xor d(167) xor d(166) xor d(165) xor d(163) xor d(162) xor d(158) xor d(157) xor d(154) xor d(152) xor d(151) xor d(147) xor d(145) xor d(140) xor d(139) xor d(133) xor d(132) xor d(131) xor d(130) xor d(128) xor d(124) xor d(123) xor d(122) xor d(121) xor d(119) xor d(115) xor d(114) xor d(113) xor d(112) xor d(110) xor d(109) xor d(107) xor d(106) xor d(102) xor d(100) xor d(99) xor d(97) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(90) xor d(83) xor d(81) xor d(80) xor d(79) xor d(78) xor d(77) xor d(75) xor d(69) xor d(68) xor d(64) xor d(63) xor d(62) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(43) xor d(41) xor d(40) xor d(33) xor d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(2) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(10) xor c(11) xor c(16) xor c(17) xor c(18) xor c(22) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30); + newcrc(29) := d(511) xor d(509) xor d(508) xor d(507) xor d(505) xor d(504) xor d(503) xor d(499) xor d(498) xor d(497) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(485) xor d(483) xor d(480) xor d(479) xor d(478) xor d(477) xor d(476) xor d(474) xor d(473) xor d(469) xor d(467) xor d(465) xor d(462) xor d(461) xor d(459) xor d(458) xor d(455) xor d(449) xor d(447) xor d(446) xor d(445) xor d(441) xor d(434) xor d(433) xor d(431) xor d(430) xor d(421) xor d(419) xor d(416) xor d(415) xor d(413) xor d(411) xor d(409) xor d(406) xor d(405) xor d(404) xor d(402) xor d(401) xor d(397) xor d(396) xor d(395) xor d(393) xor d(390) xor d(389) xor d(388) xor d(387) xor d(385) xor d(384) xor d(383) xor d(378) xor d(375) xor d(373) xor d(371) xor d(369) xor d(366) xor d(365) xor d(363) xor d(360) xor d(359) xor d(356) xor d(355) xor d(354) xor d(350) xor d(346) xor d(345) xor d(344) xor d(342) xor d(341) xor d(339) xor d(338) xor d(336) xor d(335) xor d(334) xor d(332) xor d(331) xor d(330) xor d(325) xor d(324) xor d(319) xor d(318) xor d(317) xor d(316) xor d(315) xor d(314) xor d(312) xor d(309) xor d(307) xor d(306) xor d(302) xor d(300) xor d(299) xor d(297) xor d(296) xor d(295) xor d(294) xor d(293) xor d(292) xor d(291) xor d(289) xor d(287) xor d(285) xor d(284) xor d(283) xor d(280) xor d(276) xor d(274) xor d(273) xor d(271) xor d(270) xor d(266) xor d(265) xor d(262) xor d(261) xor d(258) xor d(256) xor d(254) xor d(252) xor d(249) xor d(245) xor d(240) xor d(234) xor d(231) xor d(227) xor d(225) xor d(224) xor d(223) xor d(221) xor d(213) xor d(211) xor d(209) xor d(207) xor d(206) xor d(205) xor d(204) xor d(200) xor d(199) xor d(198) xor d(196) xor d(195) xor d(194) xor d(191) xor d(190) xor d(189) xor d(188) xor d(187) xor d(185) xor d(183) xor d(180) xor d(179) xor d(169) xor d(168) xor d(167) xor d(166) xor d(164) xor d(163) xor d(159) xor d(158) xor d(155) xor d(153) xor d(152) xor d(148) xor d(146) xor d(141) xor d(140) xor d(134) xor d(133) xor d(132) xor d(131) xor d(129) xor d(125) xor d(124) xor d(123) xor d(122) xor d(120) xor d(116) xor d(115) xor d(114) xor d(113) xor d(111) xor d(110) xor d(108) xor d(107) xor d(103) xor d(101) xor d(100) xor d(98) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(91) xor d(84) xor d(82) xor d(81) xor d(80) xor d(79) xor d(78) xor d(76) xor d(70) xor d(69) xor d(65) xor d(64) xor d(63) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(44) xor d(42) xor d(41) xor d(34) xor d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(0) xor c(3) xor c(5) xor c(6) xor c(7) xor c(8) xor c(9) xor c(10) xor c(11) xor c(12) xor c(17) xor c(18) xor c(19) xor c(23) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(30) := d(510) xor d(509) xor d(508) xor d(506) xor d(505) xor d(504) xor d(500) xor d(499) xor d(498) xor d(493) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(486) xor d(484) xor d(481) xor d(480) xor d(479) xor d(478) xor d(477) xor d(475) xor d(474) xor d(470) xor d(468) xor d(466) xor d(463) xor d(462) xor d(460) xor d(459) xor d(456) xor d(450) xor d(448) xor d(447) xor d(446) xor d(442) xor d(435) xor d(434) xor d(432) xor d(431) xor d(422) xor d(420) xor d(417) xor d(416) xor d(414) xor d(412) xor d(410) xor d(407) xor d(406) xor d(405) xor d(403) xor d(402) xor d(398) xor d(397) xor d(396) xor d(394) xor d(391) xor d(390) xor d(389) xor d(388) xor d(386) xor d(385) xor d(384) xor d(379) xor d(376) xor d(374) xor d(372) xor d(370) xor d(367) xor d(366) xor d(364) xor d(361) xor d(360) xor d(357) xor d(356) xor d(355) xor d(351) xor d(347) xor d(346) xor d(345) xor d(343) xor d(342) xor d(340) xor d(339) xor d(337) xor d(336) xor d(335) xor d(333) xor d(332) xor d(331) xor d(326) xor d(325) xor d(320) xor d(319) xor d(318) xor d(317) xor d(316) xor d(315) xor d(313) xor d(310) xor d(308) xor d(307) xor d(303) xor d(301) xor d(300) xor d(298) xor d(297) xor d(296) xor d(295) xor d(294) xor d(293) xor d(292) xor d(290) xor d(288) xor d(286) xor d(285) xor d(284) xor d(281) xor d(277) xor d(275) xor d(274) xor d(272) xor d(271) xor d(267) xor d(266) xor d(263) xor d(262) xor d(259) xor d(257) xor d(255) xor d(253) xor d(250) xor d(246) xor d(241) xor d(235) xor d(232) xor d(228) xor d(226) xor d(225) xor d(224) xor d(222) xor d(214) xor d(212) xor d(210) xor d(208) xor d(207) xor d(206) xor d(205) xor d(201) xor d(200) xor d(199) xor d(197) xor d(196) xor d(195) xor d(192) xor d(191) xor d(190) xor d(189) xor d(188) xor d(186) xor d(184) xor d(181) xor d(180) xor d(170) xor d(169) xor d(168) xor d(167) xor d(165) xor d(164) xor d(160) xor d(159) xor d(156) xor d(154) xor d(153) xor d(149) xor d(147) xor d(142) xor d(141) xor d(135) xor d(134) xor d(133) xor d(132) xor d(130) xor d(126) xor d(125) xor d(124) xor d(123) xor d(121) xor d(117) xor d(116) xor d(115) xor d(114) xor d(112) xor d(111) xor d(109) xor d(108) xor d(104) xor d(102) xor d(101) xor d(99) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(92) xor d(85) xor d(83) xor d(82) xor d(81) xor d(80) xor d(79) xor d(77) xor d(71) xor d(70) xor d(66) xor d(65) xor d(64) xor d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(53) xor d(52) xor d(51) xor d(48) xor d(46) xor d(45) xor d(43) xor d(42) xor d(35) xor d(32) xor d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(0) xor c(1) xor c(4) xor c(6) xor c(7) xor c(8) xor c(9) xor c(10) xor c(11) xor c(12) xor c(13) xor c(18) xor c(19) xor c(20) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30); + newcrc(31) := d(511) xor d(510) xor d(509) xor d(507) xor d(506) xor d(505) xor d(501) xor d(500) xor d(499) xor d(494) xor d(493) xor d(492) xor d(491) xor d(490) xor d(489) xor d(488) xor d(487) xor d(485) xor d(482) xor d(481) xor d(480) xor d(479) xor d(478) xor d(476) xor d(475) xor d(471) xor d(469) xor d(467) xor d(464) xor d(463) xor d(461) xor d(460) xor d(457) xor d(451) xor d(449) xor d(448) xor d(447) xor d(443) xor d(436) xor d(435) xor d(433) xor d(432) xor d(423) xor d(421) xor d(418) xor d(417) xor d(415) xor d(413) xor d(411) xor d(408) xor d(407) xor d(406) xor d(404) xor d(403) xor d(399) xor d(398) xor d(397) xor d(395) xor d(392) xor d(391) xor d(390) xor d(389) xor d(387) xor d(386) xor d(385) xor d(380) xor d(377) xor d(375) xor d(373) xor d(371) xor d(368) xor d(367) xor d(365) xor d(362) xor d(361) xor d(358) xor d(357) xor d(356) xor d(352) xor d(348) xor d(347) xor d(346) xor d(344) xor d(343) xor d(341) xor d(340) xor d(338) xor d(337) xor d(336) xor d(334) xor d(333) xor d(332) xor d(327) xor d(326) xor d(321) xor d(320) xor d(319) xor d(318) xor d(317) xor d(316) xor d(314) xor d(311) xor d(309) xor d(308) xor d(304) xor d(302) xor d(301) xor d(299) xor d(298) xor d(297) xor d(296) xor d(295) xor d(294) xor d(293) xor d(291) xor d(289) xor d(287) xor d(286) xor d(285) xor d(282) xor d(278) xor d(276) xor d(275) xor d(273) xor d(272) xor d(268) xor d(267) xor d(264) xor d(263) xor d(260) xor d(258) xor d(256) xor d(254) xor d(251) xor d(247) xor d(242) xor d(236) xor d(233) xor d(229) xor d(227) xor d(226) xor d(225) xor d(223) xor d(215) xor d(213) xor d(211) xor d(209) xor d(208) xor d(207) xor d(206) xor d(202) xor d(201) xor d(200) xor d(198) xor d(197) xor d(196) xor d(193) xor d(192) xor d(191) xor d(190) xor d(189) xor d(187) xor d(185) xor d(182) xor d(181) xor d(171) xor d(170) xor d(169) xor d(168) xor d(166) xor d(165) xor d(161) xor d(160) xor d(157) xor d(155) xor d(154) xor d(150) xor d(148) xor d(143) xor d(142) xor d(136) xor d(135) xor d(134) xor d(133) xor d(131) xor d(127) xor d(126) xor d(125) xor d(124) xor d(122) xor d(118) xor d(117) xor d(116) xor d(115) xor d(113) xor d(112) xor d(110) xor d(109) xor d(105) xor d(103) xor d(102) xor d(100) xor d(98) xor d(97) xor d(96) xor d(95) xor d(94) xor d(93) xor d(86) xor d(84) xor d(83) xor d(82) xor d(81) xor d(80) xor d(78) xor d(72) xor d(71) xor d(67) xor d(66) xor d(65) xor d(64) xor d(62) xor d(60) xor d(59) xor d(57) xor d(54) xor d(53) xor d(52) xor d(49) xor d(47) xor d(46) xor d(44) xor d(43) xor d(36) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(0) xor c(1) xor c(2) xor c(5) xor c(7) xor c(8) xor c(9) xor c(10) xor c(11) xor c(12) xor c(13) xor c(14) xor c(19) xor c(20) xor c(21) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + return newcrc; + end nextCRC32_D512; + +end PCK_CRC32_D512; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D64.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D64.vhd new file mode 100755 index 0000000000000000000000000000000000000000..ec12fcb9560852b235b2bcc7649c61dc8b053360 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D64.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) +-- * data width: 64 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D64 is + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 64 + -- convention: the first serial bit is D[63] + function nextCRC32_D64 + (Data: std_logic_vector(63 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D64; + + +package body PCK_CRC32_D64 is + + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 64 + -- convention: the first serial bit is D[63] + function nextCRC32_D64 + (Data: std_logic_vector(63 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(63 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(63) xor d(61) xor d(60) xor d(58) xor d(55) xor d(54) xor d(53) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(37) xor d(34) xor d(32) xor d(31) xor d(30) xor d(29) xor d(28) xor d(26) xor d(25) xor d(24) xor d(16) xor d(12) xor d(10) xor d(9) xor d(6) xor d(0) xor c(0) xor c(2) xor c(5) xor c(12) xor c(13) xor c(15) xor c(16) xor c(18) xor c(21) xor c(22) xor c(23) xor c(26) xor c(28) xor c(29) xor c(31); + newcrc(1) := d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(53) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(44) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(28) xor d(27) xor d(24) xor d(17) xor d(16) xor d(13) xor d(12) xor d(11) xor d(9) xor d(7) xor d(6) xor d(1) xor d(0) xor c(1) xor c(2) xor c(3) xor c(5) xor c(6) xor c(12) xor c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(21) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(2) := d(59) xor d(58) xor d(57) xor d(55) xor d(53) xor d(52) xor d(51) xor d(44) xor d(39) xor d(38) xor d(37) xor d(36) xor d(35) xor d(32) xor d(31) xor d(30) xor d(26) xor d(24) xor d(18) xor d(17) xor d(16) xor d(14) xor d(13) xor d(9) xor d(8) xor d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(0) xor c(3) xor c(4) xor c(5) xor c(6) xor c(7) xor c(12) xor c(19) xor c(20) xor c(21) xor c(23) xor c(25) xor c(26) xor c(27); + newcrc(3) := d(60) xor d(59) xor d(58) xor d(56) xor d(54) xor d(53) xor d(52) xor d(45) xor d(40) xor d(39) xor d(38) xor d(37) xor d(36) xor d(33) xor d(32) xor d(31) xor d(27) xor d(25) xor d(19) xor d(18) xor d(17) xor d(15) xor d(14) xor d(10) xor d(9) xor d(8) xor d(7) xor d(3) xor d(2) xor d(1) xor c(0) xor c(1) xor c(4) xor c(5) xor c(6) xor c(7) xor c(8) xor c(13) xor c(20) xor c(21) xor c(22) xor c(24) xor c(26) xor c(27) xor c(28); + newcrc(4) := d(63) xor d(59) xor d(58) xor d(57) xor d(50) xor d(48) xor d(47) xor d(46) xor d(45) xor d(44) xor d(41) xor d(40) xor d(39) xor d(38) xor d(33) xor d(31) xor d(30) xor d(29) xor d(25) xor d(24) xor d(20) xor d(19) xor d(18) xor d(15) xor d(12) xor d(11) xor d(8) xor d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(1) xor c(6) xor c(7) xor c(8) xor c(9) xor c(12) xor c(13) xor c(14) xor c(15) xor c(16) xor c(18) xor c(25) xor c(26) xor c(27) xor c(31); + newcrc(5) := d(63) xor d(61) xor d(59) xor d(55) xor d(54) xor d(53) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(42) xor d(41) xor d(40) xor d(39) xor d(37) xor d(29) xor d(28) xor d(24) xor d(21) xor d(20) xor d(19) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(5) xor c(7) xor c(8) xor c(9) xor c(10) xor c(12) xor c(14) xor c(17) xor c(18) xor c(19) xor c(21) xor c(22) xor c(23) xor c(27) xor c(29) xor c(31); + newcrc(6) := d(62) xor d(60) xor d(56) xor d(55) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(43) xor d(42) xor d(41) xor d(40) xor d(38) xor d(30) xor d(29) xor d(25) xor d(22) xor d(21) xor d(20) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(6) xor c(8) xor c(9) xor c(10) xor c(11) xor c(13) xor c(15) xor c(18) xor c(19) xor c(20) xor c(22) xor c(23) xor c(24) xor c(28) xor c(30); + newcrc(7) := d(60) xor d(58) xor d(57) xor d(56) xor d(54) xor d(52) xor d(51) xor d(50) xor d(47) xor d(46) xor d(45) xor d(43) xor d(42) xor d(41) xor d(39) xor d(37) xor d(34) xor d(32) xor d(29) xor d(28) xor d(25) xor d(24) xor d(23) xor d(22) xor d(21) xor d(16) xor d(15) xor d(10) xor d(8) xor d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(2) xor c(5) xor c(7) xor c(9) xor c(10) xor c(11) xor c(13) xor c(14) xor c(15) xor c(18) xor c(19) xor c(20) xor c(22) xor c(24) xor c(25) xor c(26) xor c(28); + newcrc(8) := d(63) xor d(60) xor d(59) xor d(57) xor d(54) xor d(52) xor d(51) xor d(50) xor d(46) xor d(45) xor d(43) xor d(42) xor d(40) xor d(38) xor d(37) xor d(35) xor d(34) xor d(33) xor d(32) xor d(31) xor d(28) xor d(23) xor d(22) xor d(17) xor d(12) xor d(11) xor d(10) xor d(8) xor d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(1) xor c(2) xor c(3) xor c(5) xor c(6) xor c(8) xor c(10) xor c(11) xor c(13) xor c(14) xor c(18) xor c(19) xor c(20) xor c(22) xor c(25) xor c(27) xor c(28) xor c(31); + newcrc(9) := d(61) xor d(60) xor d(58) xor d(55) xor d(53) xor d(52) xor d(51) xor d(47) xor d(46) xor d(44) xor d(43) xor d(41) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(33) xor d(32) xor d(29) xor d(24) xor d(23) xor d(18) xor d(13) xor d(12) xor d(11) xor d(9) xor d(5) xor d(4) xor d(2) xor d(1) xor c(0) xor c(1) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor c(9) xor c(11) xor c(12) xor c(14) xor c(15) xor c(19) xor c(20) xor c(21) xor c(23) xor c(26) xor c(28) xor c(29); + newcrc(10) := d(63) xor d(62) xor d(60) xor d(59) xor d(58) xor d(56) xor d(55) xor d(52) xor d(50) xor d(42) xor d(40) xor d(39) xor d(36) xor d(35) xor d(33) xor d(32) xor d(31) xor d(29) xor d(28) xor d(26) xor d(19) xor d(16) xor d(14) xor d(13) xor d(9) xor d(5) xor d(3) xor d(2) xor d(0) xor c(0) xor c(1) xor c(3) xor c(4) xor c(7) xor c(8) xor c(10) xor c(18) xor c(20) xor c(23) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(11) := d(59) xor d(58) xor d(57) xor d(56) xor d(55) xor d(54) xor d(51) xor d(50) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(40) xor d(36) xor d(33) xor d(31) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(20) xor d(17) xor d(16) xor d(15) xor d(14) xor d(12) xor d(9) xor d(4) xor d(3) xor d(1) xor d(0) xor c(1) xor c(4) xor c(8) xor c(9) xor c(11) xor c(12) xor c(13) xor c(15) xor c(16) xor c(18) xor c(19) xor c(22) xor c(23) xor c(24) xor c(25) xor c(26) xor c(27); + newcrc(12) := d(63) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(41) xor d(31) xor d(30) xor d(27) xor d(24) xor d(21) xor d(18) xor d(17) xor d(15) xor d(13) xor d(12) xor d(9) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(9) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(19) xor c(20) xor c(21) xor c(22) xor c(24) xor c(25) xor c(27) xor c(29) xor c(31); + newcrc(13) := d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(42) xor d(32) xor d(31) xor d(28) xor d(25) xor d(22) xor d(19) xor d(18) xor d(16) xor d(14) xor d(13) xor d(10) xor d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(0) xor c(10) xor c(11) xor c(15) xor c(16) xor c(18) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(25) xor c(26) xor c(28) xor c(30); + newcrc(14) := d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(43) xor d(33) xor d(32) xor d(29) xor d(26) xor d(23) xor d(20) xor d(19) xor d(17) xor d(15) xor d(14) xor d(11) xor d(8) xor d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(0) xor c(1) xor c(11) xor c(12) xor c(16) xor c(17) xor c(19) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(15) := d(62) xor d(60) xor d(59) xor d(57) xor d(56) xor d(55) xor d(54) xor d(53) xor d(52) xor d(50) xor d(49) xor d(45) xor d(44) xor d(34) xor d(33) xor d(30) xor d(27) xor d(24) xor d(21) xor d(20) xor d(18) xor d(16) xor d(15) xor d(12) xor d(9) xor d(8) xor d(7) xor d(5) xor d(4) xor d(3) xor c(1) xor c(2) xor c(12) xor c(13) xor c(17) xor c(18) xor c(20) xor c(21) xor c(22) xor c(23) xor c(24) xor c(25) xor c(27) xor c(28) xor c(30); + newcrc(16) := d(57) xor d(56) xor d(51) xor d(48) xor d(47) xor d(46) xor d(44) xor d(37) xor d(35) xor d(32) xor d(30) xor d(29) xor d(26) xor d(24) xor d(22) xor d(21) xor d(19) xor d(17) xor d(13) xor d(12) xor d(8) xor d(5) xor d(4) xor d(0) xor c(0) xor c(3) xor c(5) xor c(12) xor c(14) xor c(15) xor c(16) xor c(19) xor c(24) xor c(25); + newcrc(17) := d(58) xor d(57) xor d(52) xor d(49) xor d(48) xor d(47) xor d(45) xor d(38) xor d(36) xor d(33) xor d(31) xor d(30) xor d(27) xor d(25) xor d(23) xor d(22) xor d(20) xor d(18) xor d(14) xor d(13) xor d(9) xor d(6) xor d(5) xor d(1) xor c(1) xor c(4) xor c(6) xor c(13) xor c(15) xor c(16) xor c(17) xor c(20) xor c(25) xor c(26); + newcrc(18) := d(59) xor d(58) xor d(53) xor d(50) xor d(49) xor d(48) xor d(46) xor d(39) xor d(37) xor d(34) xor d(32) xor d(31) xor d(28) xor d(26) xor d(24) xor d(23) xor d(21) xor d(19) xor d(15) xor d(14) xor d(10) xor d(7) xor d(6) xor d(2) xor c(0) xor c(2) xor c(5) xor c(7) xor c(14) xor c(16) xor c(17) xor c(18) xor c(21) xor c(26) xor c(27); + newcrc(19) := d(60) xor d(59) xor d(54) xor d(51) xor d(50) xor d(49) xor d(47) xor d(40) xor d(38) xor d(35) xor d(33) xor d(32) xor d(29) xor d(27) xor d(25) xor d(24) xor d(22) xor d(20) xor d(16) xor d(15) xor d(11) xor d(8) xor d(7) xor d(3) xor c(0) xor c(1) xor c(3) xor c(6) xor c(8) xor c(15) xor c(17) xor c(18) xor c(19) xor c(22) xor c(27) xor c(28); + newcrc(20) := d(61) xor d(60) xor d(55) xor d(52) xor d(51) xor d(50) xor d(48) xor d(41) xor d(39) xor d(36) xor d(34) xor d(33) xor d(30) xor d(28) xor d(26) xor d(25) xor d(23) xor d(21) xor d(17) xor d(16) xor d(12) xor d(9) xor d(8) xor d(4) xor c(1) xor c(2) xor c(4) xor c(7) xor c(9) xor c(16) xor c(18) xor c(19) xor c(20) xor c(23) xor c(28) xor c(29); + newcrc(21) := d(62) xor d(61) xor d(56) xor d(53) xor d(52) xor d(51) xor d(49) xor d(42) xor d(40) xor d(37) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(22) xor d(18) xor d(17) xor d(13) xor d(10) xor d(9) xor d(5) xor c(2) xor c(3) xor c(5) xor c(8) xor c(10) xor c(17) xor c(19) xor c(20) xor c(21) xor c(24) xor c(29) xor c(30); + newcrc(22) := d(62) xor d(61) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(48) xor d(47) xor d(45) xor d(44) xor d(43) xor d(41) xor d(38) xor d(37) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(24) xor d(23) xor d(19) xor d(18) xor d(16) xor d(14) xor d(12) xor d(11) xor d(9) xor d(0) xor c(2) xor c(3) xor c(4) xor c(5) xor c(6) xor c(9) xor c(11) xor c(12) xor c(13) xor c(15) xor c(16) xor c(20) xor c(23) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30); + newcrc(23) := d(62) xor d(60) xor d(59) xor d(56) xor d(55) xor d(54) xor d(50) xor d(49) xor d(47) xor d(46) xor d(42) xor d(39) xor d(38) xor d(36) xor d(35) xor d(34) xor d(31) xor d(29) xor d(27) xor d(26) xor d(20) xor d(19) xor d(17) xor d(16) xor d(15) xor d(13) xor d(9) xor d(6) xor d(1) xor d(0) xor c(2) xor c(3) xor c(4) xor c(6) xor c(7) xor c(10) xor c(14) xor c(15) xor c(17) xor c(18) xor c(22) xor c(23) xor c(24) xor c(27) xor c(28) xor c(30); + newcrc(24) := d(63) xor d(61) xor d(60) xor d(57) xor d(56) xor d(55) xor d(51) xor d(50) xor d(48) xor d(47) xor d(43) xor d(40) xor d(39) xor d(37) xor d(36) xor d(35) xor d(32) xor d(30) xor d(28) xor d(27) xor d(21) xor d(20) xor d(18) xor d(17) xor d(16) xor d(14) xor d(10) xor d(7) xor d(2) xor d(1) xor c(0) xor c(3) xor c(4) xor c(5) xor c(7) xor c(8) xor c(11) xor c(15) xor c(16) xor c(18) xor c(19) xor c(23) xor c(24) xor c(25) xor c(28) xor c(29) xor c(31); + newcrc(25) := d(62) xor d(61) xor d(58) xor d(57) xor d(56) xor d(52) xor d(51) xor d(49) xor d(48) xor d(44) xor d(41) xor d(40) xor d(38) xor d(37) xor d(36) xor d(33) xor d(31) xor d(29) xor d(28) xor d(22) xor d(21) xor d(19) xor d(18) xor d(17) xor d(15) xor d(11) xor d(8) xor d(3) xor d(2) xor c(1) xor c(4) xor c(5) xor c(6) xor c(8) xor c(9) xor c(12) xor c(16) xor c(17) xor c(19) xor c(20) xor c(24) xor c(25) xor c(26) xor c(29) xor c(30); + newcrc(26) := d(62) xor d(61) xor d(60) xor d(59) xor d(57) xor d(55) xor d(54) xor d(52) xor d(49) xor d(48) xor d(47) xor d(44) xor d(42) xor d(41) xor d(39) xor d(38) xor d(31) xor d(28) xor d(26) xor d(25) xor d(24) xor d(23) xor d(22) xor d(20) xor d(19) xor d(18) xor d(10) xor d(6) xor d(4) xor d(3) xor d(0) xor c(6) xor c(7) xor c(9) xor c(10) xor c(12) xor c(15) xor c(16) xor c(17) xor c(20) xor c(22) xor c(23) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30); + newcrc(27) := d(63) xor d(62) xor d(61) xor d(60) xor d(58) xor d(56) xor d(55) xor d(53) xor d(50) xor d(49) xor d(48) xor d(45) xor d(43) xor d(42) xor d(40) xor d(39) xor d(32) xor d(29) xor d(27) xor d(26) xor d(25) xor d(24) xor d(23) xor d(21) xor d(20) xor d(19) xor d(11) xor d(7) xor d(5) xor d(4) xor d(1) xor c(0) xor c(7) xor c(8) xor c(10) xor c(11) xor c(13) xor c(16) xor c(17) xor c(18) xor c(21) xor c(23) xor c(24) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(28) := d(63) xor d(62) xor d(61) xor d(59) xor d(57) xor d(56) xor d(54) xor d(51) xor d(50) xor d(49) xor d(46) xor d(44) xor d(43) xor d(41) xor d(40) xor d(33) xor d(30) xor d(28) xor d(27) xor d(26) xor d(25) xor d(24) xor d(22) xor d(21) xor d(20) xor d(12) xor d(8) xor d(6) xor d(5) xor d(2) xor c(1) xor c(8) xor c(9) xor c(11) xor c(12) xor c(14) xor c(17) xor c(18) xor c(19) xor c(22) xor c(24) xor c(25) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(29) := d(63) xor d(62) xor d(60) xor d(58) xor d(57) xor d(55) xor d(52) xor d(51) xor d(50) xor d(47) xor d(45) xor d(44) xor d(42) xor d(41) xor d(34) xor d(31) xor d(29) xor d(28) xor d(27) xor d(26) xor d(25) xor d(23) xor d(22) xor d(21) xor d(13) xor d(9) xor d(7) xor d(6) xor d(3) xor c(2) xor c(9) xor c(10) xor c(12) xor c(13) xor c(15) xor c(18) xor c(19) xor c(20) xor c(23) xor c(25) xor c(26) xor c(28) xor c(30) xor c(31); + newcrc(30) := d(63) xor d(61) xor d(59) xor d(58) xor d(56) xor d(53) xor d(52) xor d(51) xor d(48) xor d(46) xor d(45) xor d(43) xor d(42) xor d(35) xor d(32) xor d(30) xor d(29) xor d(28) xor d(27) xor d(26) xor d(24) xor d(23) xor d(22) xor d(14) xor d(10) xor d(8) xor d(7) xor d(4) xor c(0) xor c(3) xor c(10) xor c(11) xor c(13) xor c(14) xor c(16) xor c(19) xor c(20) xor c(21) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(31) := d(62) xor d(60) xor d(59) xor d(57) xor d(54) xor d(53) xor d(52) xor d(49) xor d(47) xor d(46) xor d(44) xor d(43) xor d(36) xor d(33) xor d(31) xor d(30) xor d(29) xor d(28) xor d(27) xor d(25) xor d(24) xor d(23) xor d(15) xor d(11) xor d(9) xor d(8) xor d(5) xor c(1) xor c(4) xor c(11) xor c(12) xor c(14) xor c(15) xor c(17) xor c(20) xor c(21) xor c(22) xor c(25) xor c(27) xor c(28) xor c(30); + return newcrc; + end nextCRC32_D64; + +end PCK_CRC32_D64; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D8.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D8.vhd new file mode 100755 index 0000000000000000000000000000000000000000..8b75ac54dd356da7919b857c394fb72810b202c3 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/PCK_CRC32_D8.vhd @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (C) 1999-2008 Easics NV. +-- This source file may be used and distributed without restriction +-- provided that this copyright statement is not removed from the file +-- and that any derivative work contains the original copyright notice +-- and the associated disclaimer. +-- +-- THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +-- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +-- +-- Purpose : synthesizable CRC function +-- * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) +-- * data width: 8 +-- +-- Info : tools@easics.be +-- http://www.easics.com +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + +package PCK_CRC32_D8 is + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 8 + -- convention: the first serial bit is D[7] + function nextCRC32_D8 + (Data: std_logic_vector(7 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector; +end PCK_CRC32_D8; + + +package body PCK_CRC32_D8 is + + -- polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) + -- data width: 8 + -- convention: the first serial bit is D[7] + function nextCRC32_D8 + (Data: std_logic_vector(7 downto 0); + crc: std_logic_vector(31 downto 0)) + return std_logic_vector is + + variable d: std_logic_vector(7 downto 0); + variable c: std_logic_vector(31 downto 0); + variable newcrc: std_logic_vector(31 downto 0); + + begin + d := Data; + c := crc; + + newcrc(0) := d(6) xor d(0) xor c(24) xor c(30); + newcrc(1) := d(7) xor d(6) xor d(1) xor d(0) xor c(24) xor c(25) xor c(30) xor c(31); + newcrc(2) := d(7) xor d(6) xor d(2) xor d(1) xor d(0) xor c(24) xor c(25) xor c(26) xor c(30) xor c(31); + newcrc(3) := d(7) xor d(3) xor d(2) xor d(1) xor c(25) xor c(26) xor c(27) xor c(31); + newcrc(4) := d(6) xor d(4) xor d(3) xor d(2) xor d(0) xor c(24) xor c(26) xor c(27) xor c(28) xor c(30); + newcrc(5) := d(7) xor d(6) xor d(5) xor d(4) xor d(3) xor d(1) xor d(0) xor c(24) xor c(25) xor c(27) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(6) := d(7) xor d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30) xor c(31); + newcrc(7) := d(7) xor d(5) xor d(3) xor d(2) xor d(0) xor c(24) xor c(26) xor c(27) xor c(29) xor c(31); + newcrc(8) := d(4) xor d(3) xor d(1) xor d(0) xor c(0) xor c(24) xor c(25) xor c(27) xor c(28); + newcrc(9) := d(5) xor d(4) xor d(2) xor d(1) xor c(1) xor c(25) xor c(26) xor c(28) xor c(29); + newcrc(10) := d(5) xor d(3) xor d(2) xor d(0) xor c(2) xor c(24) xor c(26) xor c(27) xor c(29); + newcrc(11) := d(4) xor d(3) xor d(1) xor d(0) xor c(3) xor c(24) xor c(25) xor c(27) xor c(28); + newcrc(12) := d(6) xor d(5) xor d(4) xor d(2) xor d(1) xor d(0) xor c(4) xor c(24) xor c(25) xor c(26) xor c(28) xor c(29) xor c(30); + newcrc(13) := d(7) xor d(6) xor d(5) xor d(3) xor d(2) xor d(1) xor c(5) xor c(25) xor c(26) xor c(27) xor c(29) xor c(30) xor c(31); + newcrc(14) := d(7) xor d(6) xor d(4) xor d(3) xor d(2) xor c(6) xor c(26) xor c(27) xor c(28) xor c(30) xor c(31); + newcrc(15) := d(7) xor d(5) xor d(4) xor d(3) xor c(7) xor c(27) xor c(28) xor c(29) xor c(31); + newcrc(16) := d(5) xor d(4) xor d(0) xor c(8) xor c(24) xor c(28) xor c(29); + newcrc(17) := d(6) xor d(5) xor d(1) xor c(9) xor c(25) xor c(29) xor c(30); + newcrc(18) := d(7) xor d(6) xor d(2) xor c(10) xor c(26) xor c(30) xor c(31); + newcrc(19) := d(7) xor d(3) xor c(11) xor c(27) xor c(31); + newcrc(20) := d(4) xor c(12) xor c(28); + newcrc(21) := d(5) xor c(13) xor c(29); + newcrc(22) := d(0) xor c(14) xor c(24); + newcrc(23) := d(6) xor d(1) xor d(0) xor c(15) xor c(24) xor c(25) xor c(30); + newcrc(24) := d(7) xor d(2) xor d(1) xor c(16) xor c(25) xor c(26) xor c(31); + newcrc(25) := d(3) xor d(2) xor c(17) xor c(26) xor c(27); + newcrc(26) := d(6) xor d(4) xor d(3) xor d(0) xor c(18) xor c(24) xor c(27) xor c(28) xor c(30); + newcrc(27) := d(7) xor d(5) xor d(4) xor d(1) xor c(19) xor c(25) xor c(28) xor c(29) xor c(31); + newcrc(28) := d(6) xor d(5) xor d(2) xor c(20) xor c(26) xor c(29) xor c(30); + newcrc(29) := d(7) xor d(6) xor d(3) xor c(21) xor c(27) xor c(30) xor c(31); + newcrc(30) := d(7) xor d(4) xor c(22) xor c(28) xor c(31); + newcrc(31) := d(5) xor c(23) xor c(29); + return newcrc; + end nextCRC32_D8; + +end PCK_CRC32_D8; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc.vhd new file mode 100755 index 0000000000000000000000000000000000000000..ecb99832d95303a0af431c139d882d1460d99dbf --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc.vhd @@ -0,0 +1,243 @@ +-------------------------------------------------------------------------------- +-- Title : Append CRC to packet +-- Project : Square Kilometer Array +-------------------------------------------------------------------------------- +-- File : append_crc.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz +-- Company : High Performance Computing Research Lab, AUT +-- Created : Fri Oct 11 14:34:07 2019 +-- Last update : Thu Oct 31 08:32:00 2019 +-- Platform : +-- Standard : VHDL-2008 +-------------------------------------------------------------------------------- +-- Copyright (c) 2019 High Performance Computing Research Lab, AUT +------------------------------------------------------------------------------- +-- Description: Append a CRC32 to the end of packets in the AXI4 Stream +-------------------------------------------------------------------------------- +-- Revisions: Revisions and documentation are controlled by +-- the revision control system (RCS). The RCS should be consulted +-- on revision history. +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.AXI4_pkg.keep_to_empty; +use work.crc_pkg.all; +use work.misc_tools_pkg.all; -- bit_swap + +use work.bit_width_config_pkg.all; + +entity append_crc is + + generic ( + g_AREA_SPEED_TRADEOFF_FACTOR : natural range 1 to 32 := 1; -- defines the parallelisation of the implementation. Larger = more area, but more speed. + g_INIT_CRC : std_logic_vector := (31 downto 0 => '1'); -- Initial value of the CRC calc. + g_BIT_REVERSE_IN : boolean := true; + g_BIT_REVERSE_OUT : boolean := true; + g_XOR_CRC_OUT : std_logic_vector := (31 downto 0 => '1'); + g_NAND_MASK : std_logic_vector := ""; -- Bits set to '1' will be cleared to '0' for the CRC calulation. + g_OR_MASK : std_logic_vector := ""; -- Bits set to '1' will be set to '1' for the CRC calulation. + g_INVALID_CYCLES_BETWEEN_PACKETS : natural := 0 -- guaranteed number of cycles between packets. + ); + + port ( + i_clk : in std_logic; + i_clk_reset : in std_logic; + + i_stream : in AXI4_STREAMING_RDMA_t; + o_stream_stop : out std_logic; + o_stream : out AXI4_STREAMING_RDMA_t; + i_stream_stop : in std_logic + ); + +end entity append_crc; + +architecture rtl of append_crc is + + function f_padded_mask ( + constant mask : std_logic_vector; + constant mask_len : natural + ) + return std_logic_vector is + constant top : integer := mask_len - 1; + constant bot : integer := top - mask'length; + variable padded_mask : std_logic_vector(top downto 0); + begin + padded_mask(top downto bot + 1) := mask; + padded_mask(bot downto 0) := (others => '0'); + return padded_mask; + end function f_padded_mask; + + constant c_MASK_LEN : natural := round_up(maximum(g_OR_MASK'length, g_NAND_MASK'length), i_stream.data'length); + constant c_OR_MASK : std_logic_vector := f_padded_mask(g_OR_MASK, c_MASK_LEN); + constant c_NAND_MASK : std_logic_vector := f_padded_mask(g_NAND_MASK, c_MASK_LEN); + constant c_MASK_CYCLES : natural := c_MASK_LEN/i_stream.data'length; + + function f_CRC_MASK_DELAY return natural is + begin + if c_MASK_CYCLES > 0 then + return 4; + else + return 3; + end if; + end function f_CRC_MASK_DELAY; + signal masked_stream : AXI4_Streaming_RDMA_t; + + signal crc_vld : std_logic; + signal crc : std_logic_vector(31 downto 0); + + signal stream_delayed : AXI4_Streaming_RDMA_t; + signal stream_delayed_slv : AXI4_Streaming_RDMA_t_slv; + + signal crc_save : std_logic_vector(crc'range); + signal crc_keep : std_logic_vector(crc'length/8-1 downto 0); + signal append_crc : std_logic; + signal error_save : std_logic; + +begin + + G_MASK : if c_MASK_CYCLES > 0 generate + signal mask_cycle_cnt : unsigned(ceil_log2(c_MASK_CYCLES) downto 0); + begin + + P_MASK_VARIANT_HEADER_FIELDS : process (i_clk) + variable v_fb : unsigned(mask_cycle_cnt'range); + variable v_dec : unsigned(mask_cycle_cnt'range); + variable v_cyc : natural range 0 to c_MASK_CYCLES -1; + variable v_validated_data : std_logic_vector(i_stream.data'range); + begin + if rising_edge(i_clk) then + if (not mask_cycle_cnt(mask_cycle_cnt'high)) and i_stream.valid and not i_stream.last then + v_dec := to_unsigned(1, v_dec'length); + else + v_dec := to_unsigned(0, v_dec'length); + end if; + if i_stream.last and i_stream.valid then + v_fb := to_unsigned(c_MASK_CYCLES - 1, v_fb'length); + else + v_fb := mask_cycle_cnt; + end if; + mask_cycle_cnt <= v_fb - v_dec; + + for byte in i_stream.keep'range loop + v_validated_data(byte*8+7 downto byte*8+0) := i_stream.data(byte*8+7 downto byte*8+0) and i_stream.keep(byte); + end loop; + + masked_stream <= i_stream; + if mask_cycle_cnt(mask_cycle_cnt'high) then + -- Payload + masked_stream.data <= v_validated_data; + else + v_cyc := to_integer(mask_cycle_cnt); + -- Headers, some fields get masked off (replaced with '1's or '0's). + masked_stream.data <= (v_validated_data + or c_OR_MASK(v_cyc*i_stream.data'length + i_stream.data'high downto v_cyc*i_stream.data'length + 0)) + and (not c_NAND_MASK(v_cyc*i_stream.data'length + i_stream.data'high downto v_cyc*i_stream.data'length + 0)); + end if; + if i_clk_reset then + mask_cycle_cnt <= to_unsigned(c_MASK_CYCLES - 1, v_fb'length); + end if; + end if; + end process; + end generate G_MASK; + + G_NO_MASK : if c_MASK_CYCLES <= 0 generate + masked_stream <= i_stream; + end generate; + + E_CRC : entity work.crc_generator + generic map ( + g_AREA_SPEED_TRADEOFF_FACTOR => g_AREA_SPEED_TRADEOFF_FACTOR, + g_INIT_CRC => g_INIT_CRC, + g_BIT_REVERSE_IN => g_BIT_REVERSE_IN, + g_BIT_REVERSE_OUT => g_BIT_REVERSE_OUT, + g_XOR_CRC_OUT => g_XOR_CRC_OUT, + g_INVALID_CYCLES_BETWEEN_PACKETS => g_INVALID_CYCLES_BETWEEN_PACKETS + ) + port map ( + i_clk => i_clk, + i_clk_reset => i_clk_reset, + i_stream => masked_stream, + o_stop => o_stream_stop, + o_crc => crc, + o_crc_vld => crc_vld, + i_stop2 => i_stream_stop + ); + + -- delay to match that of E_CRC and masking. + E_DELAY_CRC : entity work.pipeline_delay_ram + generic map ( + g_CYCLES_DELAY => f_CRC_MASK_DELAY, + g_FORCE_USE_FLOPS => false, + g_FLOPS_BEFORE_RAM => 1, + g_FLOPS_AFTER_RAM => 1 + ) + port map ( + i_clk => i_clk, + i_bus => to_slv(i_stream), + o_bus => stream_delayed_slv + ); + + stream_delayed <= from_slv(stream_delayed_slv); + + P_APPEND_CRC : process (i_clk) + variable v_crc_rotate : std_logic_vector(ceil_log2(crc'length/8)-1 downto 0); + variable v_rotated_crc : unsigned(crc'range); + begin + if rising_edge(i_clk) then + if stream_delayed.valid then + assert stream_delayed.last = crc_vld + report "CRC output and end of packet are not aligned. Try adjusting the E_DELAY_CRC.g_CYCLES_DELAY generic." + severity error; + end if; + o_stream <= stream_delayed; + + -- Pre-rotate the crc value so the first byte of the crc will end up in the byte position after the last data byte. + v_crc_rotate := keep_to_empty(to_01(stream_delayed.keep))(1 downto 0); + v_rotated_crc := rotate_left(unsigned(crc), 8*to_integer(unsigned(v_crc_rotate))); + + for slice in stream_delayed.data'length/crc'length-1 downto 0 loop + -- Insert the CRC everywhere there are available bytes. Will select the correct one with valid and keep. + -- Should only really be at the last cycle of a packet (also inserted into invalid cycles, including the one after the packet). + for byte in crc'length/8-1 downto 0 loop + if not stream_delayed.keep(slice*4+byte) then + o_stream.data(slice*32+byte*8+7 downto slice*32+byte*8) <= + std_logic_vector(v_rotated_crc(byte*8+7 downto byte*8)); + end if; + end loop; + end loop; + + append_crc <= '0'; + crc_keep <= (others => '1'); + crc_save <= std_logic_vector(v_rotated_crc); + error_save <= stream_delayed.error; + if stream_delayed.last and stream_delayed.valid then + if stream_delayed.keep(crc'length/8-1) then + -- Was not enough room in the current cycle. + -- Some or all of the CRC must be inserted on the next cycle. + o_stream.last <= '0'; + append_crc <= '1'; + crc_keep <= stream_delayed.keep(crc_keep'range); + end if; + end if; + -- Wherever the crc ended up, rotate the keep to validate the first instance of the crc. + o_stream.keep <= crc_keep & stream_delayed.keep(stream_delayed.keep'high downto crc_keep'length); + + if append_crc then + assert stream_delayed.valid = '0' + report "Wanted to insert the CRC into this cycle but it was not invalid." & + " Expecting an invalid cycle between all incoming packets." + severity error; + o_stream.last <= '1'; + o_stream.valid <= '1'; + o_stream.data <= (others => '-'); + o_stream.data(o_stream.data'high downto o_stream.data'length - crc'length) <= crc_save; + o_stream.keep <= crc_keep & (stream_delayed.keep'high downto crc_keep'length => '0'); + o_stream.error <= error_save; + end if; + end if; + end process; + +end architecture rtl; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc_dp_wrapper.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc_dp_wrapper.vhd new file mode 100755 index 0000000000000000000000000000000000000000..532954c55cba07ed4b8e28b8566f3518ee8988a7 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc_dp_wrapper.vhd @@ -0,0 +1,133 @@ +------------------------------------------------------------------------------- +-- +-- Copyright 2023 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +------------------------------------------------------------------------------- +-- Author: R. van der Walle +-- Purpose: Wrapper around append_crc that provides DP interfaces by converting +-- the AXI4 interfaces using axi4_stream_dp_bridge. + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +library axi4_lib, dp_lib; +use axi4_lib.axi4_stream_pkg.all; +use dp_lib.dp_stream_pkg.all; + +use work.crc_pkg.all; +use work.bit_width_config_pkg.all; +use work.rdma_pkg.all; + +entity append_crc_dp_wrapper is + port ( + dp_clk : in std_logic; + dp_rst : in std_logic; + + out_dp_sosi : out t_dp_sosi := c_dp_sosi_rst; + out_dp_siso : in t_dp_siso := c_dp_siso_rdy; + + in_dp_sosi : in t_dp_sosi := c_dp_sosi_rst; + in_dp_siso : out t_dp_siso := c_dp_siso_rdy + ); +end append_crc_dp_wrapper; + +architecture str of append_crc_dp_wrapper is + + signal i_stream_stop : std_logic; + signal o_stream_stop : std_logic; + + signal o_stream : AXI4_Streaming_RDMA_t := AXI4_Streaming_RDMA_t_ZERO; + signal i_stream : AXI4_Streaming_RDMA_t := AXI4_Streaming_RDMA_t_ZERO; + + signal o_stream_axi4_sosi : t_axi4_sosi := c_axi4_sosi_rst; + signal o_stream_axi4_siso : t_axi4_siso := c_axi4_siso_rst; + signal i_stream_axi4_sosi : t_axi4_sosi := c_axi4_sosi_rst; + signal i_stream_axi4_siso : t_axi4_siso := c_axi4_siso_rst; + + +begin + -- Wire Records to IN/OUT ports. + -- o_stream + i_stream_stop <= not o_stream_axi4_siso.tready; + + o_stream_axi4_sosi.tvalid <= o_stream.valid; + o_stream_axi4_sosi.tlast <= o_stream.last; + o_stream_axi4_sosi.tdata <= o_stream.data; + o_stream_axi4_sosi.tkeep <= o_stream.keep; + + -- i_stream + i_stream_axi4_siso.tready <= not o_stream_stop; + + i_stream.valid <= i_stream_axi4_sosi.tvalid; + i_stream.last <= i_stream_axi4_sosi.tlast; + i_stream.data <= i_stream_axi4_sosi.tdata; + i_stream.keep <= i_stream_axi4_sosi.tkeep; + + u_dp_to_axi : entity axi4_lib.axi4_stream_dp_bridge + generic map ( + g_use_empty => true, + g_axi4_rl => 1, + g_dp_rl => 1 + ) + port map ( + in_clk => dp_clk, + in_rst => dp_rst, + + axi4_out_sosi => i_stream_axi4_sosi, + axi4_out_siso => i_stream_axi4_siso, + + dp_in_sosi => in_dp_sosi, + dp_in_siso => in_dp_siso + ); + + u_axi4_to_dp : entity axi4_lib.axi4_stream_dp_bridge + generic map ( + g_use_empty => true, + g_axi4_rl => 1, + g_dp_rl => 1 + ) + port map ( + in_clk => dp_clk, + in_rst => dp_rst, + + axi4_in_sosi => o_stream_axi4_sosi, + axi4_in_siso => o_stream_axi4_siso, + + dp_out_sosi => out_dp_sosi, + dp_out_siso => out_dp_siso + ); + +u_append_crc : entity work.append_crc + generic map( + g_AREA_SPEED_TRADEOFF_FACTOR => 4, + g_INIT_CRC => f_ICRC_INIT, + g_BIT_REVERSE_IN => true, + g_BIT_REVERSE_OUT => true, + g_XOR_CRC_OUT => (31 downto 0 => '1'), + g_OR_MASK => to_slv(c_RoCEv2_HEADER_INVARIANT_MASK), + g_INVALID_CYCLES_BETWEEN_PACKETS => 1 + ) + port map( + i_clk => dp_clk, + i_clk_reset => dp_rst, + i_stream => i_stream, + o_stream_stop => o_stream_stop, + o_stream => o_stream, + i_stream_stop => i_stream_stop + ); + +end str; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc_wrapper.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc_wrapper.vhd new file mode 100755 index 0000000000000000000000000000000000000000..f53339b72e45a5f622b74b2b113bd97c259de490 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/append_crc_wrapper.vhd @@ -0,0 +1,109 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 06/27/2023 10:50:24 AM +-- Design Name: +-- Module Name: append_crc_wrapper - Behavioral +-- Project Name: +-- Target Devices: +-- Tool Versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--use IEEE.NUMERIC_STD.ALL; + +-- Uncomment the following library declaration if instantiating +-- any Xilinx leaf cells in this code. +--library UNISIM; +--use UNISIM.VComponents.all; +use work.crc_pkg.all; +use work.bit_width_config_pkg.all; +use work.rdma_pkg.all; + +entity append_crc_wrapper is + Port ( + i_clk : in std_logic; + i_clk_reset : in std_logic; + + -- o_stream + -- Source In and Sink Out + o_stream_tready : in std_logic; + + -- Source Out and Sink In + o_stream_tvalid : out std_logic; + o_stream_tdata : out std_logic_vector(512 - 1 downto 0); + o_stream_tkeep : out std_logic_vector(512 / 8 - 1 downto 0); + o_stream_tlast : out std_logic; + + -- i_stream + -- Source In and Sink Out + i_stream_tready : out std_logic; + + -- Source Out and Sink In + i_stream_tvalid : in std_logic; + i_stream_tdata : in std_logic_vector(512 - 1 downto 0); + i_stream_tkeep : in std_logic_vector(512 / 8 - 1 downto 0); + i_stream_tlast : in std_logic + ); +end append_crc_wrapper; + +architecture Behavioral of append_crc_wrapper is + + signal i_stream_stop : std_logic; + signal o_stream_stop : std_logic; + + signal o_stream : AXI4_Streaming_RDMA_t; + signal i_stream : AXI4_Streaming_RDMA_t; + +begin + -- Wire Records to IN/OUT ports. + -- o_stream + i_stream_stop <= not o_stream_tready; + + o_stream_tvalid <= o_stream.valid; + o_stream_tlast <= o_stream.last; + o_stream_tdata <= o_stream.data; + o_stream_tkeep <= o_stream.keep; + + -- i_stream + i_stream_tready <= not o_stream_stop; + + i_stream.valid <= i_stream_tvalid; + i_stream.last <= i_stream_tlast; + i_stream.data <= i_stream_tdata; + i_stream.keep <= i_stream_tkeep; + +u_append_crc : entity work.append_crc + generic map( + g_AREA_SPEED_TRADEOFF_FACTOR => 32, + g_INIT_CRC => f_ICRC_INIT, + g_BIT_REVERSE_IN => true, + g_BIT_REVERSE_OUT => true, + g_XOR_CRC_OUT => (31 downto 0 => '1'), + g_OR_MASK => to_slv(c_RoCEv2_HEADER_INVARIANT_MASK), + g_INVALID_CYCLES_BETWEEN_PACKETS => 1 + ) + port map( + i_clk => i_clk, + i_clk_reset => i_clk_reset, + i_stream => i_stream, + o_stream_stop => o_stream_stop, + o_stream => o_stream, + i_stream_stop => i_stream_stop + ); + +end Behavioral; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/bit_width_config_pkg.512b.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/bit_width_config_pkg.512b.vhd new file mode 100755 index 0000000000000000000000000000000000000000..eb3356e056510b2033b9b84fe80becfae5cae408 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/bit_width_config_pkg.512b.vhd @@ -0,0 +1,60 @@ +-------------------------------------------------------------------------------- +-- Title : RDMA bit width configuration package +-- Project : Square Kilometer Array +-------------------------------------------------------------------------------- +-- File : rdma_bit_width_config_pkg.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz +-- Company : High Performance Computing Research Lab, AUT +-- Created : Mon Aug 19 14:12:52 2019 +-- Last update : Fri Jan 31 17:34:16 2020 +-- Platform : +-- Standard : VHDL-2008 +-------------------------------------------------------------------------------- +-- Copyright (c) 2019 High Performance Computing Research Lab, AUT +------------------------------------------------------------------------------- +-- Description: Emulates an FSP's spead visibility interface. +-------------------------------------------------------------------------------- +-- Revisions: Revisions and documentation are controlled by +-- the revision control system (RCS). The RCS should be consulted +-- on revision history. +------------------------------------------------------------------------------- +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +use work.AXI4_pkg.all; + +package bit_width_config_pkg is + + subtype AXI4_streaming_RDMA_t is AXI4_Streaming_512_t; + subtype AXI4_streaming_RDMA_t_a is AXI4_Streaming_512_t_a; + subtype AXI4_streaming_RDMA_t_slv is AXI4_Streaming_512_t_slv; + + constant AXI4_Streaming_RDMA_t_slv_width : natural := AXI4_Streaming_512_t_slv_width; + constant AXI4_Streaming_RDMA_t_ZERO : AXI4_streaming_RDMA_t := AXI4_Streaming_512_t_ZERO; + constant AXI4_Streaming_RDMA_t_DONT_CARE : AXI4_streaming_RDMA_t := AXI4_Streaming_512_t_DONT_CARE; + + function to_slv (rec : AXI4_Streaming_RDMA_t) return AXI4_Streaming_RDMA_t_slv; + function from_slv (slv : AXI4_Streaming_RDMA_t_slv) return AXI4_Streaming_RDMA_t; + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_RDMA_t; + +end package; + +package body bit_width_config_pkg is + + function to_slv (rec : AXI4_Streaming_RDMA_t) return AXI4_Streaming_RDMA_t_slv is + begin + return work.AXI4_pkg.to_slv(rec); + end function; + + function from_slv (slv : AXI4_Streaming_RDMA_t_slv) return AXI4_Streaming_RDMA_t is + begin + return work.AXI4_pkg.from_slv(slv); + end function; + + function from_slv (slv : std_logic_vector; vld : std_logic) return AXI4_Streaming_RDMA_t is + begin + return work.AXI4_pkg.from_slv(slv, vld); + end function; + +end package body; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/common_types_pkg.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/common_types_pkg.vhd new file mode 100755 index 0000000000000000000000000000000000000000..7a2914fd81667017a597d15e7b38cc47f6cc1ffc --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/common_types_pkg.vhd @@ -0,0 +1,126 @@ +------------------------------------------------------------------------------- +-- Title : Common Type Declarations +-- Project : +------------------------------------------------------------------------------- +-- File : common_types_pkg.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz> +-- Company : High Performance Computing Research Lab, Auckland University of Technology +-- Created : 2015-12-07 +-- Last update: 2018-01-01 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2015 High Performance Computing Research Lab, Auckland University of Technology +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2015-12-07 1.0 wkamp Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use ieee.fixed_pkg.all; + +package common_types_pkg is + + type t_natural_a is array (integer range<>) of natural; + type t_integer_a is array (integer range<>) of integer; + type t_boolean_a is array (integer range<>) of boolean; + + type slv_a is array (natural range <>) of std_logic_vector; + -- Standard powers of two + subtype slv_1_a is slv_a (open)(0 downto 0); + subtype slv_2_a is slv_a (open)(1 downto 0); + subtype slv_4_a is slv_a (open)(3 downto 0); + subtype slv_8_a is slv_a (open)(7 downto 0); + subtype slv_16_a is slv_a (open)(15 downto 0); + subtype slv_32_a is slv_a (open)(31 downto 0); + subtype slv_64_a is slv_a (open)(63 downto 0); + subtype slv_128_a is slv_a (open)(127 downto 0); + subtype slv_256_a is slv_a (open)(255 downto 0); + + type unsigned_a is array (natural range <>) of unsigned; + -- Unsigned powers of two vectors + subtype unsigned_1_a is unsigned_a (open)(0 downto 0); + subtype unsigned_2_a is unsigned_a (open)(1 downto 0); + subtype unsigned_4_a is unsigned_a (open)(3 downto 0); + subtype unsigned_8_a is unsigned_a (open)(7 downto 0); + subtype unsigned_16_a is unsigned_a (open)(15 downto 0); + subtype unsigned_32_a is unsigned_a (open)(31 downto 0); + subtype unsigned_64_a is unsigned_a (open)(63 downto 0); + subtype unsigned_128_a is unsigned_a (open)(127 downto 0); + subtype unsigned_256_a is unsigned_a (open)(255 downto 0); + + type signed_a is array (natural range <>) of signed; + -- signed powers of two vectors + subtype signed_1_a is signed_a (open)(0 downto 0); + subtype signed_2_a is signed_a (open)(1 downto 0); + subtype signed_4_a is signed_a (open)(3 downto 0); + subtype signed_8_a is signed_a (open)(7 downto 0); + subtype signed_16_a is signed_a (open)(15 downto 0); + subtype signed_32_a is signed_a (open)(31 downto 0); + subtype signed_64_a is signed_a (open)(63 downto 0); + subtype signed_128_a is signed_a (open)(127 downto 0); + subtype signed_256_a is signed_a (open)(255 downto 0); + + type sfixed_a is array (natural range <>) of sfixed; + type ufixed_a is array (natural range <>) of ufixed; + + -- Stratix5 transceiver interfaces. + subtype slv_80_a is slv_a (open)(79 downto 0); + subtype slv_92_a is slv_a (open)(91 downto 0); + subtype slv_140_a is slv_a (open)(139 downto 0); + + function to_slv(slv_array : slv_a; big_endian : boolean := true) return std_logic_vector; + function from_slv(slv : std_logic_vector; width : natural := 64; big_endian : boolean := true) return slv_a; + +end package common_types_pkg; + +package body common_types_pkg is + + function to_slv( + slv_array : slv_a; + big_endian : boolean := true) + return std_logic_vector is + variable slv : std_logic_vector(slv_array'length * slv_array(slv_array'left)'length - 1 downto 0); + variable hi : integer; + constant stride : natural := slv_array(slv_array'left)'length; + begin + hi := slv'high; + for idx in slv_array'range loop + if big_endian then + slv(hi downto hi + 1 - stride) := slv_array(idx); + hi := hi - stride; + else + slv(idx * stride + stride - 1 downto idx * stride) := slv_array(idx); + end if; + end loop; + return slv; + end function to_slv; + + function from_slv( + slv : std_logic_vector; + width : natural := 64; + big_endian : boolean := true) + return slv_a is + variable slvz : std_logic_vector(slv'length - 1 downto 0); + variable slv_array : slv_a(0 to slv'length / width - 1)(width - 1 downto 0); + variable hi : integer; + begin + slvz := slv; + hi := slvz'high; + for idx in slv_array'range loop + if big_endian then + slv_array(idx) := slvz(hi downto hi + 1 - width); + hi := hi - width; + else + slv_array(idx) := slvz(idx*width + width - 1 downto idx*width); + end if; + end loop; + return slv_array; + end function from_slv; + +end package body common_types_pkg; \ No newline at end of file diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/crc_generator.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/crc_generator.vhd new file mode 100755 index 0000000000000000000000000000000000000000..24d295a67fb03e6da7b5e96d6990fdcb45e958dc --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/crc_generator.vhd @@ -0,0 +1,255 @@ +------------------------------------------------------------------------------- +-- Title : CRC generator +-- Project : +------------------------------------------------------------------------------- +-- File : crc_generator.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz> +-- Company : +-- Created : 2016-02-16 +-- Last update: 2016-07-26 +-- Platform : +-- Standard : VHDL'2008 +------------------------------------------------------------------------------- +-- Description: +-- Calculates the CRC for an AXI stream. +-- +-- Area vs Speed Tradeoff. +-- The CRC algorithm can be parallelised by slicing the data into segments and +-- computing the CRC of each segment of the bus and XORing the results. +-- +-- This uses the result that CRC(msg_A) xor CRC(msg_B) = CRC(msg_A xor msg_B). +-- The kicker is that msg_A'length must equal msg_B'length. +-- +-- The message on the input bus is separated into segments, e.g. +-- msg = 0x 1234_5678 +-- msg_A = 0x 1234|0000 +-- msg_B = 0x 0000|5678 +-- such that each message has one 'active' segment and all other segments = '0'. +-- +-- The data bits in the non-active segments for each CRC are replaced with a +-- constant '0'. The synthesis engine can then optimise away part of the +-- CRC XOR-tree, since A xor '0' = A, thus reducing the critical timing path. +-- This of course has +-- a limit, as no reduction can be made on the CRC feedback path, which will +-- have an average fan in of half the CRC bits, plus half the data bits in the +-- slice. Additionally as g_AREA_SPEED_TRADEOFF_FACTOR is increased, the size +-- of the final combining XOR tree will also grow. However this can be pipelined! +-- If you double the number of CRC slices used, then the area of each CRC will reduce, +-- initially by about a third, and then with diminishing returns. Therefore, with +-- g_AREA_SPEED_TRADEOFF_FACTOR = 2, will result in an area increase of +-- approximately 2*2/3 = 1.33, or 33%. +-- If you double the number of CRCs, then the fan-in of each CRC will be reduced +-- by half the data width. If the original data width is 64b, and the CRC is 32b, +-- and g_AREA_SPEED_TRADEOFF_FACTOR = 2 then the average fan-in for each CRC bit +-- is (64/gASTF + 32/2) = 48. +-- +-- When keep /= (others => '1'), then the lengths of msg_A and msg_B are not equal. +-- Initially the part CRCs are calculated assuming that the bus is full and using +-- keep to set the corresponding bytes to zero. This means extra zero bytes are +-- included in the messages. +-- The part CRCs are then combined with an XOR. +-- Finally, the extra zero bytes are removed from the CRC by running the LFSR +-- backwards by the number of extra zero bytes in the original message. +-- +-- Error Forwarding: +-- If i_stream.error is set with i_stream.last then the CRC result is inverted. +-- You can distinguish between a transmission error and a forwarded error at the +-- receiver, by comparing the recalculated crc with the original and its inverse. +-- +-- g_INVALID_CYCLES_BETWEEN_PACKETS: +-- This parameter is the number of guaranteed invalid cycles between packets. +-- If this value is greater than 0, then the logic area is approximately halved. +-- +------------------------------------------------------------------------------- +-- Copyright (c) 2016 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2016-02-16 1.0 will Created +-- 2019-10-15 1.1 Will Kamp Added support for i_stream.keep, generics to +-- control bit reversal and CRC output XOR. +------------------------------------------------------------------------------- + +library ieee; + use ieee.std_logic_1164.all; + use work.crc_pkg.all; + use work.PCK_CRC32_D1_reversed.all; -- prevCRC32_D1 + use work.misc_tools_pkg.all; -- bit_swap, byte_swap + +use work.bit_width_config_pkg.all; + +-- vsg_off entity_008 entity_012 + +entity crc_generator is + generic ( + G_AREA_SPEED_TRADEOFF_FACTOR : natural range 1 to 32 := 1; + -- defines the parallelisation of the implementation. Larger = more area, but more speed. + G_INIT_CRC : std_logic_vector := (31 downto 0 => '1'); + -- Initial value of the CRC calc. + G_BIT_REVERSE_IN : boolean := true; + -- Reverse the bit order within each input byte before applying CRC. + G_BIT_REVERSE_OUT : boolean := true; + -- Reverse the bit order within each CRC output byte, + G_XOR_CRC_OUT : std_logic_vector := (31 downto 0 => '1'); + -- XOR the CRC output with this value. + G_INVALID_CYCLES_BETWEEN_PACKETS : natural := 0 + -- guaranteed number of cycles between packets. + ); + port ( + i_clk : in std_logic; + i_clk_reset : in std_logic; + + i_stream : in AXI4_STREAMING_RDMA_t; + o_stop : out std_logic; + o_crc : out std_logic_vector; + o_crc_vld : out std_logic; + i_stop2 : in std_logic + ); +end entity crc_generator; + +architecture rtl of crc_generator is + + constant C_TOTAL_WIDTH : natural := i_stream.data'length; + constant C_CRC_WIDTH : natural := o_crc'length; + + function f_slice_width ( + constant slice_idx : natural) + return natural is + begin + -- calculates irregular divisions of the bus width, e.g. by 3. + return (c_TOTAL_WIDTH + slice_idx) / g_AREA_SPEED_TRADEOFF_FACTOR; + end function f_slice_width; + + function f_slice_lo ( + constant slice_idx : natural) + return natural is + variable v_lo : natural; + begin -- function f_slice_lo + v_lo := 0; + for i in 1 to slice_idx loop + v_lo := v_lo + f_slice_width(i); + end loop; + return v_lo; + end function f_slice_lo; + + type t_slv_crc_a is array (natural range <>) of std_logic_vector(o_crc'range); + signal part_crc : t_slv_crc_a(g_AREA_SPEED_TRADEOFF_FACTOR - 1 downto 0); + signal part_crc_vld : std_logic_vector(g_AREA_SPEED_TRADEOFF_FACTOR - 1 downto 0); + signal part_keep : std_logic_vector(i_stream.keep'range); + signal err_fwd : std_logic; + + signal crc_combined : std_logic_vector(o_crc'range); + signal crc_combined_vld : std_logic; + signal comb_keep : std_logic_vector(i_stream.keep'range); + +begin -- architecture rtl + + o_stop <= i_stop2; + + G_SLICE : for idx in 0 to g_AREA_SPEED_TRADEOFF_FACTOR - 1 generate + -- calculate the range of a slice of the data. This will cope with irregular divisors. + constant C_SLICE_WIDTH : natural := f_slice_width(idx); + constant C_SLICE_LO : natural := f_slice_lo(idx); + constant C_SLICE_HI : natural := C_SLICE_LO + C_SLICE_WIDTH - 1; + signal slice_crc : std_logic_vector(o_crc'range); + signal sop : std_logic; + begin + + P_CRC : process (i_clk) is + variable v_data : std_logic_vector(i_stream.data'range); + variable v_crc_fb : std_logic_vector(o_crc'range); + begin -- process + if rising_edge(i_clk) then + v_data := (others => '0'); + for byte in C_SLICE_HI / 8 downto C_SLICE_LO / 8 loop + -- extract a slice of the data bus. + -- validate each byte using keep, set to zero if invalid. + v_data(byte * 8 + 7 downto byte * 8) := i_stream.data(byte * 8 + 7 downto byte * 8) + and i_stream.keep(byte); + end loop; + if g_BIT_REVERSE_IN then + v_data := byte_swap(bit_swap(v_data)); + end if; + if i_stream.valid then + sop <= i_stream.last; + if sop then + v_crc_fb := g_INIT_CRC when C_SLICE_HI = i_stream.data'high + else (others => '0'); + else + v_crc_fb := slice_crc; + end if; + -- compute the slice_crc for this slice. + slice_crc <= f_next_crc(v_data, v_crc_fb); + end if; + part_crc_vld(idx) <= i_stream.valid and i_stream.last; + if i_clk_reset then + sop <= '1'; + end if; + end if; + end process P_CRC; + + part_crc(idx) <= slice_crc; + + end generate G_SLICE; + + P_PIPE_CONTROL : process (i_clk) is + begin -- process + if rising_edge(i_clk) then + err_fwd <= i_stream.error; + part_keep <= i_stream.keep; + end if; + end process P_PIPE_CONTROL; + + -- XOR all the part CRC together. + -- If this is large (g_AREA_SPEED_TRADEOFF_FACTOR > 5), could add a pipeline or two. + P_COMBINE : process (i_clk) is + variable v_crc_comb : std_logic_vector(o_crc'range); + begin -- process + if rising_edge(i_clk) then + v_crc_comb := (others => err_fwd); -- Invert the result of the CRC. + for idx in 0 to g_AREA_SPEED_TRADEOFF_FACTOR - 1 loop + v_crc_comb := part_crc(idx) xor v_crc_comb; + end loop; + crc_combined <= v_crc_comb; + crc_combined_vld <= part_crc_vld(0); + comb_keep <= part_keep; + end if; + end process P_COMBINE; + + -- CRC has been calculated to the full width of the bus. + -- Now roll back the extra zero bytes that were left over. + -- To achieve more speed, possibly should do this in each slice before combining the part CRCs. + P_ROLLBACK : process (i_clk) is + variable v_rb_crc : std_logic_vector(o_crc'range); + variable v_xor_crc : std_logic_vector(o_crc'range); + begin + if rising_edge(i_clk) then + v_rb_crc := crc_combined; + if crc_combined_vld then + for byte in comb_keep'low to comb_keep'high loop + if not comb_keep(byte) then + for b in 0 to 7 loop + v_rb_crc := prevCRC32_D1('0', v_rb_crc); + end loop; -- b + else + assert (and comb_keep(comb_keep'high downto byte)) + report "Expected the high bits of the keep to all be the same. Got: " & to_string(comb_keep) + severity error; + exit; -- exit loop prematurely. + end if; + end loop; --byte + end if; + + v_xor_crc := v_rb_crc xor g_XOR_CRC_OUT; + + if g_BIT_REVERSE_OUT then + o_crc <= byte_swap(bit_swap(v_xor_crc)); + else + o_crc <= v_xor_crc; + end if; + + o_crc_vld <= crc_combined_vld; + end if; + end process P_ROLLBACK; + +end architecture RTL; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/crc_pkg.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/crc_pkg.vhd new file mode 100755 index 0000000000000000000000000000000000000000..364aad859eab6f97fe5011c322c6dc3fe003cd38 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/crc_pkg.vhd @@ -0,0 +1,70 @@ +------------------------------------------------------------------------------- +-- Title : Cyclic Redundancy Check Package +-- Project : +------------------------------------------------------------------------------- +-- File : crc_pkg.vhd +-- Author : Will Kamp <will@knight> +-- Company : +-- Created : 2016-02-17 +-- Last update: 2016-04-08 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: Acts as a portal to the easics.com CRC functions/packages. +------------------------------------------------------------------------------- +-- Copyright (c) 2016 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2016-02-17 1.0 will Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.PCK_CRC32_D8.all; +use work.PCK_CRC32_D16.all; +use work.PCK_CRC32_D32.all; +use work.PCK_CRC32_D64.all; +use work.PCK_CRC32_D128.all; +use work.PCK_CRC32_D256.all; +use work.PCK_CRC32_D512.all; +use work.PCK_CRC32_D1024.all; + +package crc_pkg is + + function f_next_crc ( + data : std_logic_vector; + crc : std_logic_vector) + return std_logic_vector; + +end package crc_pkg; + +package body crc_pkg is + + function f_next_crc ( + data : std_logic_vector; + crc : std_logic_vector) + return std_logic_vector is + begin + case crc'length is + when 32 => + case data'length is + when 8 => return nextCRC32_D8(data, crc); + when 16 => return nextCRC32_D16(data, crc); + when 32 => return nextCRC32_D32(data, crc); + when 64 => return nextCRC32_D64(data, crc); + when 128 => return nextCRC32_D128(data, crc); + when 256 => return nextCRC32_D256(data, crc); + when 512 => return nextCRC32_D512(data, crc); + when 1024 => return nextCRC32_D1024(data, crc); + when others => report "Data width of" & integer'image(data'length) & " is not supported. Go to www.easics.com to generate one and add it to crc_pkg.vhd" severity failure; + end case; + when others => + report "CRC width of" & integer'image(crc'length) & " is not supported. Go to www.easics.com to generate one and add it to crc_pkg.vhd" severity failure; + end case; + return (crc'range => '-'); -- drop out to default. Keeps compiler happy. + end function f_next_crc; + +end package body crc_pkg; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/eth_ip_udp_header_prepend_pkg.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/eth_ip_udp_header_prepend_pkg.vhd new file mode 100755 index 0000000000000000000000000000000000000000..0cd76ed5337b4f987451abedf3d94e6cd4185221 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/eth_ip_udp_header_prepend_pkg.vhd @@ -0,0 +1,281 @@ +-------------------------------------------------------------------------------- +-- Title : Ethernet/IP/UDP header Prepend package +-- Project : Square Kilometer Array +-------------------------------------------------------------------------------- +-- File : eth_ip_udp_header_prepend_pkg.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz +-- Company : High Performance Computing Research Lab, AUT +-- Created : Thu Jul 11 15:41:59 2019 +-- Last update : Tue Jan 7 16:06:03 2020 +-- Platform : +-- Standard : VHDL-2008 +-------------------------------------------------------------------------------- +-- Copyright (c) 2019 High Performance Computing Research Lab, AUT +------------------------------------------------------------------------------- +-- Description: +-------------------------------------------------------------------------------- +-- Revisions: Revisions and documentation are controlled by +-- the revision control system (RCS). The RCS should be consulted +-- on revision history. +------------------------------------------------------------------------------- + +library ieee; + use ieee.std_logic_1164.all; + use ieee.numeric_std.all; + +package eth_ip_udp_header_prepend_pkg is + + type t_eth_header is record + dst_mac_addr : std_logic_vector(47 downto 0); + src_mac_addr : std_logic_vector(47 downto 0); + ethertype : std_logic_vector(15 downto 0); + end record; + + type t_ip_header is record + version : std_logic_vector(3 downto 0); + header_len : std_logic_vector(3 downto 0); + type_of_service : std_logic_vector(7 downto 0); + total_length : std_logic_vector(15 downto 0); + identification : std_logic_vector(15 downto 0); + flags : std_logic_vector(2 downto 0); + frag_offset : std_logic_vector(12 downto 0); + ttl : std_logic_vector(7 downto 0); + protocol : std_logic_vector(7 downto 0); + header_checksum : std_logic_vector(15 downto 0); + src_addr : std_logic_vector(31 downto 0); + dst_addr : std_logic_vector(31 downto 0); + end record; + + type t_udp_header is record + src_port : std_logic_vector(15 downto 0); + dst_port : std_logic_vector(15 downto 0); + length : std_logic_vector(15 downto 0); + checksum : std_logic_vector(15 downto 0); + end record; + + type t_eth_ip_udp_header is record + eth : t_eth_header; + ip : t_ip_header; + udp : t_udp_header; + end record; + + -- vsg_off constant_015 variable_012 + -- autogen start decl + -------------------------------------------------- + -- Auto-generated code below. You should not edit. + -- Generated Fri Oct 4 13:18:51 2019 + -------------------------------------------------- + + type t_eth_header_a is array(natural range <>) of t_eth_header; + + constant T_ETH_HEADER_ZERO : t_eth_header := ( + dst_mac_addr => (others => '0'), + src_mac_addr => (others => '0'), + ethertype => (others => '0') + ); + + constant T_ETH_HEADER_DONT_CARE : t_eth_header := ( + dst_mac_addr => (others => '-'), + src_mac_addr => (others => '-'), + ethertype => (others => '-') + ); + + constant T_ETH_HEADER_SLV_WIDTH : natural := 112; + + subtype t_eth_header_slv is std_logic_vector(111 downto 0); + function to_slv (rec : t_eth_header) return t_eth_header_slv; + function from_slv (slv : t_eth_header_slv) return t_eth_header; + + type t_ip_header_a is array(natural range <>) of t_ip_header; + + constant T_IP_HEADER_ZERO : t_ip_header := ( + version => (others => '0'), + header_len => (others => '0'), + type_of_service => (others => '0'), + total_length => (others => '0'), + identification => (others => '0'), + flags => (others => '0'), + frag_offset => (others => '0'), + ttl => (others => '0'), + protocol => (others => '0'), + header_checksum => (others => '0'), + src_addr => (others => '0'), + dst_addr => (others => '0') + ); + + constant T_IP_HEADER_DONT_CARE : t_ip_header := ( + version => (others => '-'), + header_len => (others => '-'), + type_of_service => (others => '-'), + total_length => (others => '-'), + identification => (others => '-'), + flags => (others => '-'), + frag_offset => (others => '-'), + ttl => (others => '-'), + protocol => (others => '-'), + header_checksum => (others => '-'), + src_addr => (others => '-'), + dst_addr => (others => '-') + ); + + constant T_IP_HEADER_SLV_WIDTH : natural := 160; + + subtype t_ip_header_slv is std_logic_vector(159 downto 0); + function to_slv (rec : t_ip_header) return t_ip_header_slv; + function from_slv (slv : t_ip_header_slv) return t_ip_header; + + type t_udp_header_a is array(natural range <>) of t_udp_header; + + constant T_UDP_HEADER_ZERO : t_udp_header := ( + src_port => (others => '0'), + dst_port => (others => '0'), + length => (others => '0'), + checksum => (others => '0') + ); + + constant T_UDP_HEADER_DONT_CARE : t_udp_header := ( + src_port => (others => '-'), + dst_port => (others => '-'), + length => (others => '-'), + checksum => (others => '-') + ); + + constant T_UDP_HEADER_SLV_WIDTH : natural := 64; + + subtype t_udp_header_slv is std_logic_vector(63 downto 0); + function to_slv (rec : t_udp_header) return t_udp_header_slv; + function from_slv (slv : t_udp_header_slv) return t_udp_header; + + type t_eth_ip_udp_header_a is array(natural range <>) of t_eth_ip_udp_header; + + constant T_ETH_IP_UDP_HEADER_ZERO : t_eth_ip_udp_header := ( + eth => T_ETH_HEADER_ZERO, + ip => T_IP_HEADER_ZERO, + udp => T_UDP_HEADER_ZERO + ); + + constant T_ETH_IP_UDP_HEADER_DONT_CARE : t_eth_ip_udp_header := ( + eth => T_ETH_HEADER_ZERO, + ip => T_IP_HEADER_ZERO, + udp => T_UDP_HEADER_ZERO + ); + + constant T_ETH_IP_UDP_HEADER_SLV_WIDTH : natural := 336; + + subtype t_eth_ip_udp_header_slv is std_logic_vector(335 downto 0); + function to_slv (rec : t_eth_ip_udp_header) return t_eth_ip_udp_header_slv; + function from_slv (slv : t_eth_ip_udp_header_slv) return t_eth_ip_udp_header; + + ------------------------------------------------------ + -- End of Autogenerated code. You may add yours below. + ------------------------------------------------------ + -- autogen end decl + +end package eth_ip_udp_header_prepend_pkg; + +package body eth_ip_udp_header_prepend_pkg is + + -- autogen start body + -------------------------------------------------- + -- Auto-generated code below. You should not edit. + -- Generated Fri Oct 4 13:18:51 2019 + -------------------------------------------------- + + function to_slv (rec : t_eth_header) return t_eth_header_slv is + variable slv : std_logic_vector(111 downto 0); + begin + slv(15 downto 0) := rec.ethertype; + slv(63 downto 16) := rec.src_mac_addr; + slv(111 downto 64) := rec.dst_mac_addr; + return slv; + end function to_slv; + + function from_slv (slv : t_eth_header_slv) return t_eth_header is + variable rec : t_eth_header; + begin + rec.ethertype := slv(15 downto 0); + rec.src_mac_addr := slv(63 downto 16); + rec.dst_mac_addr := slv(111 downto 64); + return rec; + end function from_slv; + + function to_slv (rec : t_ip_header) return t_ip_header_slv is + variable slv : std_logic_vector(159 downto 0); + begin + slv(31 downto 0) := rec.dst_addr; + slv(63 downto 32) := rec.src_addr; + slv(79 downto 64) := rec.header_checksum; + slv(87 downto 80) := rec.protocol; + slv(95 downto 88) := rec.ttl; + slv(108 downto 96) := rec.frag_offset; + slv(111 downto 109) := rec.flags; + slv(127 downto 112) := rec.identification; + slv(143 downto 128) := rec.total_length; + slv(151 downto 144) := rec.type_of_service; + slv(155 downto 152) := rec.header_len; + slv(159 downto 156) := rec.version; + return slv; + end function to_slv; + + function from_slv (slv : t_ip_header_slv) return t_ip_header is + variable rec : t_ip_header; + begin + rec.dst_addr := slv(31 downto 0); + rec.src_addr := slv(63 downto 32); + rec.header_checksum := slv(79 downto 64); + rec.protocol := slv(87 downto 80); + rec.ttl := slv(95 downto 88); + rec.frag_offset := slv(108 downto 96); + rec.flags := slv(111 downto 109); + rec.identification := slv(127 downto 112); + rec.total_length := slv(143 downto 128); + rec.type_of_service := slv(151 downto 144); + rec.header_len := slv(155 downto 152); + rec.version := slv(159 downto 156); + return rec; + end function from_slv; + + function to_slv (rec : t_udp_header) return t_udp_header_slv is + variable slv : std_logic_vector(63 downto 0); + begin + slv(15 downto 0) := rec.checksum; + slv(31 downto 16) := rec.length; + slv(47 downto 32) := rec.dst_port; + slv(63 downto 48) := rec.src_port; + return slv; + end function to_slv; + + function from_slv (slv : t_udp_header_slv) return t_udp_header is + variable rec : t_udp_header; + begin + rec.checksum := slv(15 downto 0); + rec.length := slv(31 downto 16); + rec.dst_port := slv(47 downto 32); + rec.src_port := slv(63 downto 48); + return rec; + end function from_slv; + + function to_slv (rec : t_eth_ip_udp_header) return t_eth_ip_udp_header_slv is + variable slv : std_logic_vector(335 downto 0); + begin + slv(63 downto 0) := to_slv(rec.udp); + slv(223 downto 64) := to_slv(rec.ip); + slv(335 downto 224) := to_slv(rec.eth); + return slv; + end function to_slv; + + function from_slv (slv : t_eth_ip_udp_header_slv) return t_eth_ip_udp_header is + variable rec : t_eth_ip_udp_header; + begin + rec.udp := from_slv(slv(63 downto 0)); + rec.ip := from_slv(slv(223 downto 64)); + rec.eth := from_slv(slv(335 downto 224)); + return rec; + end function from_slv; + + ------------------------------------------------------ + -- End of Autogenerated code. You may add yours below. + ------------------------------------------------------ + -- autogen end body + +end package body eth_ip_udp_header_prepend_pkg; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/lfsr_pkg.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/lfsr_pkg.vhd new file mode 100755 index 0000000000000000000000000000000000000000..3ccbc23c8f618d7b65ffcd8d07131f43aea9152b --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/lfsr_pkg.vhd @@ -0,0 +1,403 @@ +------------------------------------------------------------------------------- +-- Title : Linear Feedback Shift Register Package +-- Project : +------------------------------------------------------------------------------- +-- File : lfsr_pkg.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz> +-- Company : High Performance Computing Research Lab, Auckland University of Technology +-- Created : 2018-06-29 +-- Last update: 2018-07-02 +-- Platform : +-- Standard : VHDL +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2018 High Performance Computing Research Lab, Auckland University of Technology +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2018-06-29 1.0 will Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; + +package lfsr_pkg is + + type t_int_a is array (natural range <>) of integer; + type t_taps_a is array (natural range <>) of t_int_a(0 to 3); + + --Table of Linear Feedback Shift Registers + --Roy Ward, Tim Molteno; Department of Physics, University of Otago, Box 56, Dunedin, New Zealand + --October 26, 2007 + --Retrieved 02-07-2018 from https://web.archive.org/web/20161007061934/http://courses.cse.tamu.edu/csce680/walker/lfsr_table.pdf + --above reference gives taps for LFSRs for 2-786, 1024, 2048, 4096. + --First page, 2-67 reproduced below. + constant xnor_taps : t_taps_a(2 to 4096) := ( + -- page 1 + 2 => (2, 1, -1, -1), 24 => (24, 23, 21, 20), 46 => (46, 40, 39, 38), + 3 => (3, 2, -1, -1), 25 => (25, 24, 23, 22), 47 => (47, 46, 43, 42), + 4 => (4, 3, -1, -1), 26 => (26, 25, 24, 20), 48 => (48, 44, 41, 39), + 5 => (5, 4, 3, 2), 27 => (27, 26, 25, 22), 49 => (49, 45, 44, 43), + 6 => (6, 5, 3, 2), 28 => (28, 27, 24, 22), 50 => (50, 48, 47, 46), + 7 => (7, 6, 5, 4), 29 => (29, 28, 27, 25), 51 => (51, 50, 48, 45), + 8 => (8, 6, 5, 4), 30 => (30, 29, 26, 24), 52 => (52, 51, 49, 46), + 9 => (9, 8, 6, 5), 31 => (31, 30, 29, 28), 53 => (53, 52, 51, 47), + 10 => (10, 9, 7, 6), 32 => (32, 30, 26, 25), 54 => (54, 51, 48, 46), + 11 => (11, 10, 9, 7), 33 => (33, 32, 29, 27), 55 => (55, 54, 53, 49), + 12 => (12, 11, 8, 6), 34 => (34, 31, 30, 26), 56 => (56, 54, 52, 49), + 13 => (13, 12, 10, 9), 35 => (35, 34, 28, 27), 57 => (57, 55, 54, 52), + 14 => (14, 13, 11, 9), 36 => (36, 35, 29, 28), 58 => (58, 57, 53, 52), + 15 => (15, 14, 13, 11), 37 => (37, 36, 33, 31), 59 => (59, 57, 55, 52), + 16 => (16, 14, 13, 11), 38 => (38, 37, 33, 32), 60 => (60, 58, 56, 55), + 17 => (17, 16, 15, 14), 39 => (39, 38, 35, 32), 61 => (61, 60, 59, 56), + 18 => (18, 17, 16, 13), 40 => (40, 37, 36, 35), 62 => (62, 59, 57, 56), + 19 => (19, 18, 17, 14), 41 => (41, 40, 39, 38), 63 => (63, 62, 59, 58), + 20 => (20, 19, 16, 14), 42 => (42, 40, 37, 35), 64 => (64, 63, 61, 60), + 21 => (21, 20, 19, 16), 43 => (43, 42, 38, 37), 65 => (65, 64, 62, 61), + 22 => (22, 19, 18, 17), 44 => (44, 42, 39, 38), 66 => (66, 60, 58, 57), + 23 => (23, 22, 20, 18), 45 => (45, 44, 42, 41), 67 => (67, 66, 65, 62), + -- page 2 + 68 => (68, 67, 63, 61), 120 => (120, 118, 114, 111), 172 => (172, 169, 165, 161), + 69 => (69, 67, 64, 63), 121 => (121, 120, 116, 113), 173 => (173, 171, 168, 165), + 70 => (70, 69, 67, 65), 122 => (122, 121, 120, 116), 174 => (174, 169, 166, 165), + 71 => (71, 70, 68, 66), 123 => (123, 122, 119, 115), 175 => (175, 173, 171, 169), + 72 => (72, 69, 63, 62), 124 => (124, 119, 118, 117), 176 => (176, 167, 165, 164), + 73 => (73, 71, 70, 69), 125 => (125, 120, 119, 118), 177 => (177, 175, 174, 172), + 74 => (74, 71, 70, 67), 126 => (126, 124, 122, 119), 178 => (178, 176, 171, 170), + 75 => (75, 74, 72, 69), 127 => (127, 126, 124, 120), 179 => (179, 178, 177, 175), + 76 => (76, 74, 72, 71), 128 => (128, 127, 126, 121), 180 => (180, 173, 170, 168), + 77 => (77, 75, 72, 71), 129 => (129, 128, 125, 124), 181 => (181, 180, 175, 174), + 78 => (78, 77, 76, 71), 130 => (130, 129, 128, 125), 182 => (182, 181, 176, 174), + 79 => (79, 77, 76, 75), 131 => (131, 129, 128, 123), 183 => (183, 179, 176, 175), + 80 => (80, 78, 76, 71), 132 => (132, 130, 127, 123), 184 => (184, 177, 176, 175), + 81 => (81, 79, 78, 75), 133 => (133, 131, 125, 124), 185 => (185, 184, 182, 177), + 82 => (82, 78, 76, 73), 134 => (134, 133, 129, 127), 186 => (186, 180, 178, 177), + 83 => (83, 81, 79, 76), 135 => (135, 132, 131, 129), 187 => (187, 182, 181, 180), + 84 => (84, 83, 77, 75), 136 => (136, 134, 133, 128), 188 => (188, 186, 183, 182), + 85 => (85, 84, 83, 77), 137 => (137, 136, 133, 126), 189 => (189, 187, 184, 183), + 86 => (86, 84, 81, 80), 138 => (138, 137, 131, 130), 190 => (190, 188, 184, 177), + 87 => (87, 86, 82, 80), 139 => (139, 136, 134, 131), 191 => (191, 187, 185, 184), + 88 => (88, 80, 79, 77), 140 => (140, 139, 136, 132), 192 => (192, 190, 178, 177), + 89 => (89, 86, 84, 83), 141 => (141, 140, 135, 128), 193 => (193, 189, 186, 184), + 90 => (90, 88, 87, 85), 142 => (142, 141, 139, 132), 194 => (194, 192, 191, 190), + 91 => (91, 90, 86, 83), 143 => (143, 141, 140, 138), 195 => (195, 193, 192, 187), + 92 => (92, 90, 87, 86), 144 => (144, 142, 140, 137), 196 => (196, 194, 187, 185), + 93 => (93, 91, 90, 87), 145 => (145, 144, 140, 139), 197 => (197, 195, 193, 188), + 94 => (94, 93, 89, 88), 146 => (146, 144, 143, 141), 198 => (198, 193, 190, 183), + 95 => (95, 94, 90, 88), 147 => (147, 145, 143, 136), 199 => (199, 198, 195, 190), + 96 => (96, 90, 87, 86), 148 => (148, 145, 143, 141), 200 => (200, 198, 197, 195), + 97 => (97, 95, 93, 91), 149 => (149, 142, 140, 139), 201 => (201, 199, 198, 195), + 98 => (98, 97, 91, 90), 150 => (150, 148, 147, 142), 202 => (202, 198, 196, 195), + 99 => (99, 95, 94, 92), 151 => (151, 150, 149, 148), 203 => (203, 202, 196, 195), + 100 => (100, 98, 93, 92), 152 => (152, 150, 149, 146), 204 => (204, 201, 200, 194), + 101 => (101, 100, 95, 94), 153 => (153, 149, 148, 145), 205 => (205, 203, 200, 196), + 102 => (102, 99, 97, 96), 154 => (154, 153, 149, 145), 206 => (206, 201, 197, 196), + 103 => (103, 102, 99, 94), 155 => (155, 151, 150, 148), 207 => (207, 206, 201, 198), + 104 => (104, 103, 94, 93), 156 => (156, 153, 151, 147), 208 => (208, 207, 205, 199), + 105 => (105, 104, 99, 98), 157 => (157, 155, 152, 151), 209 => (209, 207, 206, 204), + 106 => (106, 105, 101, 100), 158 => (158, 153, 152, 150), 210 => (210, 207, 206, 198), + 107 => (107, 105, 99, 98), 159 => (159, 156, 153, 148), 211 => (211, 203, 201, 200), + 108 => (108, 103, 97, 96), 160 => (160, 158, 157, 155), 212 => (212, 209, 208, 205), + 109 => (109, 107, 105, 104), 161 => (161, 159, 158, 155), 213 => (213, 211, 208, 207), + 110 => (110, 109, 106, 104), 162 => (162, 158, 155, 154), 214 => (214, 213, 211, 209), + 111 => (111, 109, 107, 104), 163 => (163, 160, 157, 156), 215 => (215, 212, 210, 209), + 112 => (112, 108, 106, 101), 164 => (164, 159, 158, 152), 216 => (216, 215, 213, 209), + 113 => (113, 111, 110, 108), 165 => (165, 162, 157, 156), 217 => (217, 213, 212, 211), + 114 => (114, 113, 112, 103), 166 => (166, 164, 163, 156), 218 => (218, 217, 211, 210), + 115 => (115, 110, 108, 107), 167 => (167, 165, 163, 161), 219 => (219, 218, 215, 211), + 116 => (116, 114, 111, 110), 168 => (168, 162, 159, 152), 220 => (220, 211, 210, 208), + 117 => (117, 116, 115, 112), 169 => (169, 164, 163, 161), 221 => (221, 219, 215, 213), + 118 => (118, 116, 113, 112), 170 => (170, 169, 166, 161), 222 => (222, 220, 217, 214), + 119 => (119, 116, 111, 110), 171 => (171, 169, 166, 165), 223 => (223, 221, 219, 218), + -- page 3 + 224 => (224, 222, 217, 212), 276 => (276, 275, 273, 270), 328 => (328, 323, 321, 319), + 225 => (225, 224, 220, 215), 277 => (277, 274, 271, 265), 329 => (329, 326, 323, 321), + 226 => (226, 223, 219, 216), 278 => (278, 277, 274, 273), 330 => (330, 328, 323, 322), + 227 => (227, 223, 218, 217), 279 => (279, 278, 275, 274), 331 => (331, 329, 325, 321), + 228 => (228, 226, 217, 216), 280 => (280, 278, 275, 271), 332 => (332, 325, 321, 320), + 229 => (229, 228, 225, 219), 281 => (281, 280, 277, 272), 333 => (333, 331, 329, 325), + 230 => (230, 224, 223, 222), 282 => (282, 278, 277, 272), 334 => (334, 333, 330, 327), + 231 => (231, 229, 227, 224), 283 => (283, 278, 276, 271), 335 => (335, 333, 328, 325), + 232 => (232, 228, 223, 221), 284 => (284, 279, 278, 276), 336 => (336, 335, 332, 329), + 233 => (233, 232, 229, 224), 285 => (285, 280, 278, 275), 337 => (337, 336, 331, 327), + 234 => (234, 232, 225, 223), 286 => (286, 285, 276, 271), 338 => (338, 336, 335, 332), + 235 => (235, 234, 229, 226), 287 => (287, 285, 282, 281), 339 => (339, 332, 329, 323), + 236 => (236, 229, 228, 226), 288 => (288, 287, 278, 277), 340 => (340, 337, 336, 329), + 237 => (237, 236, 233, 230), 289 => (289, 286, 285, 277), 341 => (341, 336, 330, 327), + 238 => (238, 237, 236, 233), 290 => (290, 288, 287, 285), 342 => (342, 341, 340, 331), + 239 => (239, 238, 232, 227), 291 => (291, 286, 280, 279), 343 => (343, 338, 335, 333), + 240 => (240, 237, 235, 232), 292 => (292, 291, 289, 285), 344 => (344, 338, 334, 333), + 241 => (241, 237, 233, 232), 293 => (293, 292, 287, 282), 345 => (345, 343, 341, 337), + 242 => (242, 241, 236, 231), 294 => (294, 292, 291, 285), 346 => (346, 344, 339, 335), + 243 => (243, 242, 238, 235), 295 => (295, 293, 291, 290), 347 => (347, 344, 337, 336), + 244 => (244, 243, 240, 235), 296 => (296, 292, 287, 285), 348 => (348, 344, 341, 340), + 245 => (245, 244, 241, 239), 297 => (297, 296, 293, 292), 349 => (349, 347, 344, 343), + 246 => (246, 245, 244, 235), 298 => (298, 294, 290, 287), 350 => (350, 340, 337, 336), + 247 => (247, 245, 243, 238), 299 => (299, 295, 293, 288), 351 => (351, 348, 345, 343), + 248 => (248, 238, 234, 233), 300 => (300, 290, 288, 287), 352 => (352, 346, 341, 339), + 249 => (249, 248, 245, 242), 301 => (301, 299, 296, 292), 353 => (353, 349, 346, 344), + 250 => (250, 247, 245, 240), 302 => (302, 297, 293, 290), 354 => (354, 349, 341, 340), + 251 => (251, 249, 247, 244), 303 => (303, 297, 291, 290), 355 => (355, 354, 350, 349), + 252 => (252, 251, 247, 241), 304 => (304, 303, 302, 293), 356 => (356, 349, 347, 346), + 253 => (253, 252, 247, 246), 305 => (305, 303, 299, 298), 357 => (357, 355, 347, 346), + 254 => (254, 253, 252, 247), 306 => (306, 305, 303, 299), 358 => (358, 351, 350, 344), + 255 => (255, 253, 252, 250), 307 => (307, 305, 303, 299), 359 => (359, 358, 352, 350), + 256 => (256, 254, 251, 246), 308 => (308, 306, 299, 293), 360 => (360, 359, 335, 334), + 257 => (257, 255, 251, 250), 309 => (309, 307, 302, 299), 361 => (361, 360, 357, 354), + 258 => (258, 254, 252, 249), 310 => (310, 309, 305, 302), 362 => (362, 360, 351, 344), + 259 => (259, 257, 253, 249), 311 => (311, 308, 306, 304), 363 => (363, 362, 356, 355), + 260 => (260, 253, 252, 250), 312 => (312, 307, 302, 301), 364 => (364, 363, 359, 352), + 261 => (261, 257, 255, 254), 313 => (313, 312, 310, 306), 365 => (365, 360, 359, 356), + 262 => (262, 258, 254, 253), 314 => (314, 311, 305, 300), 366 => (366, 362, 359, 352), + 263 => (263, 261, 258, 252), 315 => (315, 314, 306, 305), 367 => (367, 365, 363, 358), + 264 => (264, 263, 255, 254), 316 => (316, 309, 305, 304), 368 => (368, 361, 359, 351), + 265 => (265, 263, 262, 260), 317 => (317, 315, 313, 310), 369 => (369, 367, 359, 358), + 266 => (266, 265, 260, 259), 318 => (318, 313, 312, 310), 370 => (370, 368, 367, 365), + 267 => (267, 264, 261, 259), 319 => (319, 318, 317, 308), 371 => (371, 369, 368, 363), + 268 => (268, 267, 264, 258), 320 => (320, 319, 317, 316), 372 => (372, 369, 365, 357), + 269 => (269, 268, 263, 262), 321 => (321, 319, 316, 314), 373 => (373, 371, 366, 365), + 270 => (270, 267, 263, 260), 322 => (322, 321, 320, 305), 374 => (374, 369, 368, 366), + 271 => (271, 265, 264, 260), 323 => (323, 322, 320, 313), 375 => (375, 374, 368, 367), + 272 => (272, 270, 266, 263), 324 => (324, 321, 320, 318), 376 => (376, 371, 369, 368), + 273 => (273, 272, 271, 266), 325 => (325, 323, 320, 315), 377 => (377, 376, 374, 369), + 274 => (274, 272, 267, 265), 326 => (326, 325, 323, 316), 378 => (378, 374, 365, 363), + 275 => (275, 266, 265, 264), 327 => (327, 325, 322, 319), 379 => (379, 375, 370, 369), + -- page 4 + 380 => (380, 377, 374, 366), 432 => (432, 429, 428, 419), 484 => (484, 483, 482, 470), + 381 => (381, 380, 379, 376), 433 => (433, 430, 428, 422), 485 => (485, 479, 469, 468), + 382 => (382, 379, 375, 364), 434 => (434, 429, 423, 422), 486 => (486, 481, 478, 472), + 383 => (383, 382, 378, 374), 435 => (435, 430, 426, 423), 487 => (487, 485, 483, 478), + 384 => (384, 378, 369, 368), 436 => (436, 432, 431, 430), 488 => (488, 487, 485, 484), + 385 => (385, 383, 381, 379), 437 => (437, 436, 435, 431), 489 => (489, 484, 483, 480), + 386 => (386, 381, 380, 376), 438 => (438, 436, 432, 421), 490 => (490, 485, 483, 481), + 387 => (387, 385, 379, 378), 439 => (439, 437, 436, 431), 491 => (491, 488, 485, 480), + 388 => (388, 387, 385, 374), 440 => (440, 439, 437, 436), 492 => (492, 491, 485, 484), + 389 => (389, 384, 380, 379), 441 => (441, 440, 433, 430), 493 => (493, 490, 488, 483), + 390 => (390, 388, 380, 377), 442 => (442, 440, 437, 435), 494 => (494, 493, 489, 481), + 391 => (391, 390, 389, 385), 443 => (443, 442, 437, 433), 495 => (495, 494, 486, 480), + 392 => (392, 386, 382, 379), 444 => (444, 435, 432, 431), 496 => (496, 494, 491, 480), + 393 => (393, 392, 391, 386), 445 => (445, 441, 439, 438), 497 => (497, 493, 488, 486), + 394 => (394, 392, 387, 386), 446 => (446, 442, 439, 431), 498 => (498, 495, 489, 487), + 395 => (395, 390, 389, 384), 447 => (447, 446, 441, 438), 499 => (499, 494, 493, 488), + 396 => (396, 392, 390, 389), 448 => (448, 444, 442, 437), 500 => (500, 499, 494, 490), + 397 => (397, 392, 387, 385), 449 => (449, 446, 440, 438), 501 => (501, 499, 497, 496), + 398 => (398, 393, 392, 384), 450 => (450, 443, 438, 434), 502 => (502, 498, 497, 494), + 399 => (399, 397, 390, 388), 451 => (451, 450, 441, 435), 503 => (503, 502, 501, 500), + 400 => (400, 398, 397, 395), 452 => (452, 448, 447, 446), 504 => (504, 502, 490, 483), + 401 => (401, 399, 392, 389), 453 => (453, 449, 447, 438), 505 => (505, 500, 497, 493), + 402 => (402, 399, 398, 393), 454 => (454, 449, 445, 444), 506 => (506, 501, 494, 491), + 403 => (403, 398, 395, 394), 455 => (455, 453, 449, 444), 507 => (507, 504, 501, 494), + 404 => (404, 400, 398, 397), 456 => (456, 454, 445, 433), 508 => (508, 505, 500, 495), + 405 => (405, 398, 397, 388), 457 => (457, 454, 449, 446), 509 => (509, 506, 502, 501), + 406 => (406, 402, 397, 393), 458 => (458, 453, 448, 445), 510 => (510, 501, 500, 498), + 407 => (407, 402, 400, 398), 459 => (459, 457, 454, 447), 511 => (511, 509, 503, 501), + 408 => (408, 407, 403, 401), 460 => (460, 459, 455, 451), 512 => (512, 510, 507, 504), + 409 => (409, 406, 404, 402), 461 => (461, 460, 455, 454), 513 => (513, 505, 503, 500), + 410 => (410, 407, 406, 400), 462 => (462, 457, 451, 450), 514 => (514, 511, 509, 507), + 411 => (411, 408, 401, 399), 463 => (463, 456, 455, 452), 515 => (515, 511, 508, 501), + 412 => (412, 409, 404, 401), 464 => (464, 460, 455, 441), 516 => (516, 514, 511, 509), + 413 => (413, 407, 406, 403), 465 => (465, 463, 462, 457), 517 => (517, 515, 507, 505), + 414 => (414, 405, 401, 398), 466 => (466, 460, 455, 452), 518 => (518, 516, 515, 507), + 415 => (415, 413, 411, 406), 467 => (467, 466, 461, 456), 519 => (519, 517, 511, 507), + 416 => (416, 414, 411, 407), 468 => (468, 464, 459, 453), 520 => (520, 509, 507, 503), + 417 => (417, 416, 414, 407), 469 => (469, 467, 464, 460), 521 => (521, 519, 514, 512), + 418 => (418, 417, 415, 403), 470 => (470, 468, 462, 461), 522 => (522, 518, 509, 507), + 419 => (419, 415, 414, 404), 471 => (471, 469, 468, 465), 523 => (523, 521, 517, 510), + 420 => (420, 412, 410, 407), 472 => (472, 470, 469, 461), 524 => (524, 523, 519, 515), + 421 => (421, 419, 417, 416), 473 => (473, 470, 467, 465), 525 => (525, 524, 521, 519), + 422 => (422, 421, 416, 412), 474 => (474, 465, 463, 456), 526 => (526, 525, 521, 517), + 423 => (423, 420, 418, 414), 475 => (475, 471, 467, 466), 527 => (527, 526, 520, 518), + 424 => (424, 422, 417, 415), 476 => (476, 475, 468, 466), 528 => (528, 526, 522, 517), + 425 => (425, 422, 421, 418), 477 => (477, 470, 462, 461), 529 => (529, 528, 525, 522), + 426 => (426, 415, 414, 412), 478 => (478, 477, 474, 472), 530 => (530, 527, 523, 520), + 427 => (427, 422, 421, 416), 479 => (479, 475, 472, 470), 531 => (531, 529, 525, 519), + 428 => (428, 426, 425, 417), 480 => (480, 473, 467, 464), 532 => (532, 529, 528, 522), + 429 => (429, 422, 421, 419), 481 => (481, 480, 472, 471), 533 => (533, 531, 530, 529), + 430 => (430, 419, 417, 415), 482 => (482, 477, 476, 473), 534 => (534, 533, 529, 527), + 431 => (431, 430, 428, 426), 483 => (483, 479, 477, 474), 535 => (535, 533, 529, 527), + -- page 5 + 536 => (536, 533, 531, 529), 588 => (588, 577, 572, 571), 640 => (640, 638, 637, 626), + 537 => (537, 536, 535, 527), 589 => (589, 586, 585, 579), 641 => (641, 640, 636, 622), + 538 => (538, 537, 536, 533), 590 => (590, 588, 587, 578), 642 => (642, 636, 633, 632), + 539 => (539, 535, 534, 529), 591 => (591, 587, 585, 582), 643 => (643, 641, 640, 632), + 540 => (540, 537, 534, 529), 592 => (592, 591, 573, 568), 644 => (644, 634, 633, 632), + 541 => (541, 537, 531, 528), 593 => (593, 588, 585, 584), 645 => (645, 641, 637, 634), + 542 => (542, 540, 539, 533), 594 => (594, 586, 584, 583), 646 => (646, 635, 634, 633), + 543 => (543, 538, 536, 532), 595 => (595, 594, 593, 586), 647 => (647, 646, 643, 642), + 544 => (544, 538, 535, 531), 596 => (596, 592, 591, 590), 648 => (648, 647, 626, 625), + 545 => (545, 539, 537, 532), 597 => (597, 588, 585, 583), 649 => (649, 648, 644, 638), + 546 => (546, 545, 544, 538), 598 => (598, 597, 592, 591), 650 => (650, 644, 635, 632), + 547 => (547, 543, 540, 534), 599 => (599, 593, 591, 590), 651 => (651, 646, 638, 637), + 548 => (548, 545, 543, 538), 600 => (600, 599, 590, 589), 652 => (652, 647, 643, 641), + 549 => (549, 546, 545, 533), 601 => (601, 600, 597, 589), 653 => (653, 646, 645, 643), + 550 => (550, 546, 533, 529), 602 => (602, 596, 594, 591), 654 => (654, 649, 643, 640), + 551 => (551, 550, 547, 542), 603 => (603, 600, 599, 597), 655 => (655, 653, 639, 638), + 552 => (552, 550, 547, 532), 604 => (604, 600, 598, 589), 656 => (656, 646, 638, 637), + 553 => (553, 550, 549, 542), 605 => (605, 600, 598, 595), 657 => (657, 656, 650, 649), + 554 => (554, 551, 546, 543), 606 => (606, 602, 599, 591), 658 => (658, 651, 648, 646), + 555 => (555, 551, 546, 545), 607 => (607, 600, 598, 595), 659 => (659, 657, 655, 644), + 556 => (556, 549, 546, 540), 608 => (608, 606, 602, 585), 660 => (660, 657, 656, 648), + 557 => (557, 552, 551, 550), 609 => (609, 601, 600, 597), 661 => (661, 657, 650, 649), + 558 => (558, 553, 549, 544), 610 => (610, 602, 600, 599), 662 => (662, 659, 656, 650), + 559 => (559, 557, 552, 550), 611 => (611, 609, 607, 601), 663 => (663, 655, 652, 649), + 560 => (560, 554, 551, 549), 612 => (612, 607, 602, 598), 664 => (664, 662, 660, 649), + 561 => (561, 558, 552, 550), 613 => (613, 609, 603, 594), 665 => (665, 661, 659, 654), + 562 => (562, 560, 558, 551), 614 => (614, 613, 612, 607), 666 => (666, 664, 659, 656), + 563 => (563, 561, 554, 549), 615 => (615, 614, 609, 608), 667 => (667, 664, 660, 649), + 564 => (564, 563, 561, 558), 616 => (616, 614, 602, 597), 668 => (668, 658, 656, 651), + 565 => (565, 564, 559, 554), 617 => (617, 612, 608, 607), 669 => (669, 667, 665, 664), + 566 => (566, 564, 561, 560), 618 => (618, 615, 604, 598), 670 => (670, 669, 665, 664), + 567 => (567, 563, 557, 556), 619 => (619, 614, 611, 610), 671 => (671, 669, 665, 662), + 568 => (568, 558, 557, 551), 620 => (620, 619, 618, 611), 672 => (672, 667, 666, 661), + 569 => (569, 568, 559, 557), 621 => (621, 616, 615, 609), 673 => (673, 666, 664, 663), + 570 => (570, 563, 558, 552), 622 => (622, 612, 610, 605), 674 => (674, 671, 665, 660), + 571 => (571, 569, 566, 561), 623 => (623, 614, 613, 612), 675 => (675, 674, 672, 669), + 572 => (572, 571, 564, 560), 624 => (624, 617, 615, 612), 676 => (676, 675, 671, 664), + 573 => (573, 569, 567, 563), 625 => (625, 620, 617, 613), 677 => (677, 674, 673, 669), + 574 => (574, 569, 565, 560), 626 => (626, 623, 621, 613), 678 => (678, 675, 673, 663), + 575 => (575, 572, 570, 569), 627 => (627, 622, 617, 613), 679 => (679, 676, 667, 661), + 576 => (576, 573, 572, 563), 628 => (628, 626, 617, 616), 680 => (680, 679, 650, 645), + 577 => (577, 575, 574, 569), 629 => (629, 627, 624, 623), 681 => (681, 678, 672, 670), + 578 => (578, 562, 556, 555), 630 => (630, 628, 626, 623), 682 => (682, 681, 679, 675), + 579 => (579, 572, 570, 567), 631 => (631, 625, 623, 617), 683 => (683, 682, 677, 672), + 580 => (580, 579, 576, 574), 632 => (632, 629, 619, 613), 684 => (684, 681, 671, 666), + 581 => (581, 575, 574, 568), 633 => (633, 632, 631, 626), 685 => (685, 684, 682, 681), + 582 => (582, 579, 576, 571), 634 => (634, 631, 629, 627), 686 => (686, 684, 674, 673), + 583 => (583, 581, 577, 575), 635 => (635, 631, 625, 621), 687 => (687, 682, 675, 673), + 584 => (584, 581, 571, 570), 636 => (636, 632, 628, 623), 688 => (688, 682, 674, 669), + 585 => (585, 583, 582, 577), 637 => (637, 636, 628, 623), 689 => (689, 686, 683, 681), + 586 => (586, 584, 581, 579), 638 => (638, 637, 633, 632), 690 => (690, 687, 683, 680), + 587 => (587, 586, 581, 576), 639 => (639, 636, 635, 629), 691 => (691, 689, 685, 678), + -- page 6 + 692 => (692, 687, 686, 678), 725 => (725, 720, 719, 716), 758 => (758, 757, 746, 741), + 693 => (693, 691, 685, 678), 726 => (726, 725, 722, 721), 759 => (759, 757, 756, 750), + 694 => (694, 691, 681, 677), 727 => (727, 721, 719, 716), 760 => (760, 757, 747, 734), + 695 => (695, 694, 691, 686), 728 => (728, 726, 725, 724), 761 => (761, 760, 759, 758), + 696 => (696, 694, 686, 673), 729 => (729, 726, 724, 718), 762 => (762, 761, 755, 745), + 697 => (697, 689, 685, 681), 730 => (730, 726, 715, 711), 763 => (763, 754, 749, 747), + 698 => (698, 690, 689, 688), 731 => (731, 729, 725, 723), 764 => (764, 761, 759, 758), + 699 => (699, 698, 689, 684), 732 => (732, 729, 728, 725), 765 => (765, 760, 755, 754), + 700 => (700, 698, 695, 694), 733 => (733, 731, 726, 725), 766 => (766, 757, 747, 744), + 701 => (701, 699, 697, 685), 734 => (734, 724, 721, 720), 767 => (767, 763, 760, 759), + 702 => (702, 701, 699, 695), 735 => (735, 733, 728, 727), 768 => (768, 764, 751, 749), + 703 => (703, 702, 696, 691), 736 => (736, 730, 728, 723), 769 => (769, 763, 762, 760), + 704 => (704, 701, 699, 692), 737 => (737, 736, 733, 732), 770 => (770, 768, 765, 756), + 705 => (705, 704, 698, 697), 738 => (738, 730, 729, 727), 771 => (771, 765, 756, 754), + 706 => (706, 697, 695, 692), 739 => (739, 731, 723, 721), 772 => (772, 767, 766, 764), + 707 => (707, 702, 699, 692), 740 => (740, 737, 728, 716), 773 => (773, 767, 765, 763), + 708 => (708, 706, 704, 703), 741 => (741, 738, 733, 732), 774 => (774, 767, 760, 758), + 709 => (709, 708, 706, 705), 742 => (742, 741, 738, 730), 775 => (775, 771, 769, 768), + 710 => (710, 709, 696, 695), 743 => (743, 742, 731, 730), 776 => (776, 773, 764, 759), + 711 => (711, 704, 703, 700), 744 => (744, 743, 733, 731), 777 => (777, 776, 767, 761), + 712 => (712, 709, 708, 707), 745 => (745, 740, 738, 737), 778 => (778, 775, 762, 759), + 713 => (713, 706, 703, 696), 746 => (746, 738, 733, 728), 779 => (779, 776, 771, 769), + 714 => (714, 709, 707, 701), 747 => (747, 743, 741, 737), 780 => (780, 775, 772, 764), + 715 => (715, 714, 711, 708), 748 => (748, 744, 743, 733), 781 => (781, 779, 765, 764), + 716 => (716, 706, 705, 704), 749 => (749, 748, 743, 742), 782 => (782, 780, 779, 773), + 717 => (717, 716, 710, 701), 750 => (750, 746, 741, 734), 783 => (783, 782, 776, 773), + 718 => (718, 717, 716, 713), 751 => (751, 750, 748, 740), 784 => (784, 778, 775, 771), + 719 => (719, 711, 710, 707), 752 => (752, 749, 732, 731), 785 => (785, 780, 776, 775), + 720 => (720, 718, 712, 709), 753 => (753, 748, 745, 740), 786 => (786, 782, 780, 771), + 721 => (721, 720, 713, 712), 754 => (754, 742, 740, 735), 1024 => (1024, 1015, 1002, 1001), + 722 => (722, 721, 718, 707), 755 => (755, 754, 745, 743), 2048 => (2048, 2035, 2034, 2029), + 723 => (723, 717, 710, 707), 756 => (756, 755, 747, 740), 4096 => (4096, 4095, 4081, 4069), + 724 => (724, 719, 716, 711), 757 => (757, 756, 751, 750), others => (-1, -1, -1, -1) + ); + + + -- Compute the next state of the LFSR sequence + -- Uses the XNOR construction, so + -- "0000" is a valid state as per the usual startup state of an FPGA's registers. + -- "1111" is the unreachable/invalid/stable/locked-up state. + function lfsr ( + state : std_logic_vector; + constant permit_locked_state : boolean := false) + return std_logic_vector; + + function lfsr ( + state : unsigned; + constant permit_locked_state : boolean := false) + return unsigned; + + -- Compute the state several steps ahead. + function lfsr_advance ( + state : std_logic_vector; + constant by : natural; + constant permit_locked_state : boolean := false) + return std_logic_vector; + + function lfsr_advance ( + state : unsigned; + constant by : natural; + constant permit_locked_state : boolean := false) + return unsigned; + +end package lfsr_pkg; + +package body lfsr_pkg is + + function lfsr ( + state : std_logic_vector; + constant permit_locked_state : boolean := false + ) + return std_logic_vector is + variable current_state : std_logic_vector(state'length downto 1); + variable tap : integer; + variable bit0 : std_logic; + begin -- function lfsr + assert state'length >= 2 + report "LFSRs of length less than 2 are undefined" + severity failure; + assert xnor_taps(state'length)(0) = state'length + report "LFSR taps for length " & to_string(state'length) & " are not defined in the package." + severity failure; + assert permit_locked_state or state /= (state'range => '1') + report "lfsr state input in the invalid (locked up/stable) state of all '1's." severity warning; + current_state := state; -- convert to slv with known indicies. + bit0 := current_state(current_state'high); + for idx in 1 to 3 loop + tap := xnor_taps(state'length)(idx); + if tap > 0 then + bit0 := bit0 xor current_state(tap); + end if; + end loop; -- idx + return current_state(current_state'high-1 downto current_state'low) & not bit0; + end function lfsr; + + function lfsr ( + state : unsigned; + constant permit_locked_state : boolean := false) + return unsigned is + begin + return unsigned(lfsr(std_logic_vector(state))); + end function lfsr; + + function lfsr_advance ( + state : std_logic_vector; + constant by : natural; + constant permit_locked_state : boolean := false) + return std_logic_vector is + variable next_state : std_logic_vector(state'range); + begin -- function lfsr_advance + next_state := state; + -- should build a tree of XORs, that hopefully the compiler optimises down. + for cnt in 1 to by loop + next_state := lfsr(next_state, permit_locked_state); + end loop; -- cnt + return next_state; + end function lfsr_advance; + + function lfsr_advance ( + state : unsigned; + constant by : natural; + constant permit_locked_state : boolean := false) + return unsigned is + begin + return unsigned(lfsr_advance(std_logic_vector(state), by)); + end function lfsr_advance; + +end package body lfsr_pkg; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/misc_tools_pkg.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/misc_tools_pkg.vhd new file mode 100755 index 0000000000000000000000000000000000000000..59bd422b8f8d907d95aa64315d71d8133ced25ba --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/misc_tools_pkg.vhd @@ -0,0 +1,492 @@ +------------------------------------------------------------------------------- +-- Title : Miscellaneous Tools Package +-- Project : +------------------------------------------------------------------------------- +-- File : misc_tools_pkg.vhd +-- Author : William Kamp +-- Company : High Performance Computing Research Lab, Auckland University of Technology +-- Created : 2015-10-13 +-- Last update: 2018-07-10 +-- Platform : +-- Standard : VHDL'2008 +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2015 High Performance Computing Research Lab, Auckland University of Technology +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2015-10-13 1.0 wkamp Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.common_types_pkg.all; + +package misc_tools_pkg is + + function wired_or (slv : std_logic_vector) return std_logic; + function wired_and (slv : std_logic_vector) return std_logic; + function shift_left (slv : std_logic_vector; + constant amount : natural := 1; + constant fill : std_logic := '-') return std_logic_vector; + function shift_right (slv : std_logic_vector; + constant amount : natural := 1; + constant fill : std_logic := '-') return std_logic_vector; + + -- floor(log_b(n)) + function floor_log(val, base : positive) + return natural; + + -- ceiling(log_b(n)) + function ceil_log(val, base : positive) + return natural; + + -- floor(log2(n)) + function floor_log2(val : positive) + return natural; + + -- ceiling(log2(n)) + function ceil_log2(val : natural) + return natural; + + -- Round val up to the nearest multiple. + function round_up (val : natural; multiple: natural := 1) + return natural; + + -- Number of bits needed to represent a number n in binary + function bit_width(val : natural) + return natural; + + -- Number of bits needed to encode n items + function encoding_width(val : positive) + return natural; + + function power_of_2 (power : unsigned; + constant len : natural) + return unsigned; + + -- Returns the next power of two greater than or equal val + function ceil_pow2 (val : natural) + return natural; + + function is_pow_2 (val : natural) + return boolean; + + function maximum (constant a : natural; + constant b : natural) + return natural; + + function bit_swap (slv : std_logic_vector; + constant slice_width : natural := 1) -- size of the groups to swap. e.g swap order of bytes = 8. + return std_logic_vector; + + function byte_swap(slv : std_logic_vector) + return std_logic_vector; + + function byte_swap(slv : unsigned) + return unsigned; + + -- Convert a one-hot vector into an unsigned value. + function from_onehot(slv : std_logic_vector; + allow_zero_hot : boolean := false) + return unsigned; + + function to_onehot(val : unsigned; + constant c_width : natural) + return std_logic_vector; + + function count_ones (slv : std_logic_vector) + return unsigned; + + function count_trailing_zeros (val : std_logic_vector) + return unsigned; + + function count_leading_zeros (val : std_logic_vector) + return unsigned; + + procedure p_sum_carry ( + a : in unsigned; + b : in unsigned; + carry_in : in std_logic := '0'; + sum_out : out unsigned; + carry_out : out std_logic); + + function f_count ( + accum : signed; + start : signed := "00"; + by : signed := "01"; + reset : std_logic := '0'; + cnt : std_logic := '0'; + by_1 : std_logic := '0' + ) return signed; + + function f_count ( + accum : unsigned; + start : integer := 0; + by : integer := 1; + cnt : std_logic := '0'; + by_1 : std_logic := '0'; + reset : std_logic := '0' + ) return unsigned; + + function f_count ( + accum : unsigned; + start : unsigned := "00"; + by : unsigned := "01"; + reset : std_logic := '0'; + cnt : std_logic := '0'; + by_1 : std_logic := '0' + ) return unsigned; + +end package misc_tools_pkg; + +package body misc_tools_pkg is + + -- purpose: OR all bits together + function wired_or (slv : std_logic_vector) + return std_logic is + variable ored : std_logic := '0'; + begin -- function wired_or + if slv = (slv'range => '0') then + return '0'; + else + return '1'; + end if; + end function wired_or; + + function wired_and (slv : std_logic_vector) + return std_logic is + variable ored : std_logic := '0'; + begin -- function wired_or + if slv = (slv'range => '1') then + return '1'; + else + return '0'; + end if; + end function wired_and; + + -- purpose: shift a std_logic_vector left an <amount> and shift in bits with value <fill>. + function shift_left (slv : std_logic_vector; + constant amount : natural := 1; + constant fill : std_logic := '-') + return std_logic_vector is + begin + return slv(slv'high-amount downto slv'low) & (amount-1 downto 0 => fill); + end function shift_left; + + function shift_right (slv : std_logic_vector; + constant amount : natural := 1; + constant fill : std_logic := '-') + return std_logic_vector is + begin + return (amount-1 downto 0 => fill) & slv(slv'high downto slv'low+amount); + end function shift_right; + + function floor_log(val, base : positive) + return natural is + variable log, residual : natural; + begin + residual := val; + log := 0; + while residual > (base - 1) loop + residual := residual / base; + log := log + 1; + end loop; + return log; + end function; + + function ceil_log(val, base : positive) + return natural is + variable log, residual : natural; + begin + residual := val - 1; + log := 0; + while residual > 0 loop + residual := residual / base; + log := log + 1; + end loop; + return log; + end function; + + function floor_log2(val : positive) + return natural is + begin + return floor_log(val, 2); + end function; + + function ceil_log2(val : natural) + return natural is + begin + if val < 1 then + return 0; + end if; + return ceil_log(val, 2); + end function; + + -- Round val up to the nearest multiple. + function round_up (val : natural; multiple: natural := 1) + return natural is + begin + return ((val + multiple - 1) / multiple) * multiple; + end function; + + function bit_width(val : natural) + return natural is + begin + if val = 0 then + return 1; + else + return floor_log2(val) + 1; + end if; + end function; + + function encoding_width(val : positive) + return natural is + begin + if val = 1 then + return 1; + else + return ceil_log2(val); + end if; + end function; + + function power_of_2 (power : unsigned; + constant len : natural) + return unsigned is + variable res : unsigned(len -1 downto 0) := (others => '0'); + begin + res(to_integer(power)) := '1'; + return res; + end function power_of_2; + + -- Returns the next power of two. + function ceil_pow2 (val : natural) + return natural is + variable res : natural; + begin -- function ceil_pow2 + if val = 0 then + return 0; + end if; + res := 1; + while res < val loop + res := res * 2; + end loop; + return res; + end function ceil_pow2; + + function is_pow_2 ( + val : natural) + return boolean is + variable test : natural; + begin -- function is_pow_2 + test := val; + while test mod 2 = 0 loop + test := test/2; + end loop; + return test = 1; + end function is_pow_2; + + function maximum (constant a : natural; + constant b : natural) + return natural is + begin -- function maximum + if a > b then + return a; + else + return b; + end if; + end function maximum; + + function bit_swap (slv : std_logic_vector; + constant slice_width : natural := 1) -- size of the groups to swap. e.g swap order of bytes = 8. + return std_logic_vector is + variable out_slv : std_logic_vector(slv'range); + variable lo, hi : natural; + begin + assert slv'length mod slice_width = 0 + report "std_logic_vector input length (" & natural'image(slv'length) & ") is not a multiple of the slice_width (" & natural'image(slice_width) & ")." + severity failure; + for idx in 0 to slv'length/slice_width - 1 loop + lo := out_slv'low + idx * slice_width; + hi := slv'high - idx * slice_width; + out_slv(lo+slice_width-1 downto lo) := slv(hi downto hi-slice_width+1); + end loop; + return out_slv; + end function bit_swap; + + function byte_swap(slv : std_logic_vector) + return std_logic_vector is + begin + return bit_swap(slv, 8); + end function byte_swap; + + function byte_swap(slv : unsigned) + return unsigned is + begin + return unsigned(bit_swap(std_logic_vector(slv), 8)); + end function byte_swap; + + constant c_OHOT_MASK : slv_64_a := (0 => x"AAAAAAAA_AAAAAAAA", + 1 => x"CCCCCCCC_CCCCCCCC", + 2 => x"F0F0F0F0_F0F0F0F0", + 3 => x"FF00FF00_FF00FF00", + 4 => x"FFFF0000_FFFF0000", + 5 => x"FFFFFFFF_00000000"); + + function from_onehot(slv : std_logic_vector; + allow_zero_hot : boolean := false) + return unsigned is + variable val : unsigned(5 downto 0); + variable mask : std_logic_vector(slv'range); + begin + assert slv'length < 65 + report "misc_tools_pkg.from_onehot function currently only supports up to 64 bit vectors." + severity failure; + assert slv /= (slv'range => '0') or allow_zero_hot + report "Argument to misc_tools_pkg.from_onehot function is zero-hot." + severity error; + val := to_unsigned(0, val'length); + for pow in val'range loop + mask := c_OHOT_MASK(pow)(slv'range); + val(pow) := wired_or(slv and mask); + end loop; + return val(ceil_log2(slv'length)-1 downto 0); + end function; + + function to_onehot( + val : unsigned; + constant c_width : natural) + return std_logic_vector is + variable ohot : std_logic_vector(c_width-1 downto 0); + begin + for idx in ohot'range loop + ohot(idx) := '1' when idx = val else '0'; + end loop; + return ohot; + end function; + + function count_ones ( + slv : std_logic_vector + ) return unsigned is + variable res : unsigned(ceil_log2(slv'length+1)-1 downto 0); + variable slv_dt : std_logic_vector(slv'length-1 downto 0); + variable mid : integer; + begin + slv_dt := slv; + if slv_dt'length <= 1 then + res := unsigned(slv_dt); + else + mid := slv_dt'length / 2; + res := resize(count_ones(slv_dt(slv_dt'high downto mid)), res'length) + + resize(count_ones(slv_dt(mid-1 downto slv_dt'low)), res'length); + end if; + return res; + end function count_ones; + + function count_trailing_zeros ( + val : std_logic_vector) + return unsigned is + variable ohot : signed(val'length-1 downto 0); + variable idx : unsigned(ceil_log2(val'length)-1 downto 0); + begin -- function count_trailing_zeros + ohot := signed(val) and -signed(val); -- AND itself with its two's complement. + idx := unsigned(from_onehot(std_logic_vector(ohot), true)); + return idx; + end function count_trailing_zeros; + + function count_leading_zeros ( + val : std_logic_vector) + return unsigned is + variable rev : std_logic_vector(val'length-1 downto 0); + begin -- function count_leading_zeros + for idx in rev'range loop + rev(idx) := val(val'high - idx); + end loop; + return count_trailing_zeros(rev); + end function count_leading_zeros; + + + procedure p_sum_carry ( + a : in unsigned; + b : in unsigned; + carry_in : in std_logic := '0'; + sum_out : out unsigned; + carry_out : out std_logic) is + variable opa : unsigned(a'length+1 downto 0); + variable opb : unsigned(b'length+1 downto 0); + variable sum : unsigned(opa'range); + begin -- procedure p_sum_carry + opa := '0' & a & carry_in; + opb := '0' & b & '1'; + sum := opa + opb; + carry_out := sum(sum'high); + sum_out := sum_out(sum_out'high-1 downto 1); + end procedure p_sum_carry; + + function f_count ( + accum : signed; + start : signed := "00"; + by : signed := "01"; + reset : std_logic := '0'; + cnt : std_logic := '0'; + by_1 : std_logic := '0' + ) return signed is + -- extra bit on top for sign bit and bottom for carry-in. + variable fb : signed(accum'high + 1 downto 0); + variable incr : signed(accum'high + 1 downto 0); + variable sum : signed(accum'high + 1 downto 0); + begin + fb := resize(start, accum) & '1' when reset else accum & '1'; -- set lowest bit (half of carry_in) to '1' + incr := resize(by , accum) & '0' when cnt else to_signed(0, accum) & '0'; + incr(0) := by_1; -- use the carry-in to give an additional independent increment input. + sum := fb + incr; + return sum(accum'high + 1 downto 1); -- shift by 1 to lose the carry-in bit. + end function; + + function f_count ( + accum : unsigned; + start : integer := 0; + by : integer := 1; + cnt : std_logic := '0'; + by_1 : std_logic := '0'; + reset : std_logic := '0' + ) return unsigned is + begin + return unsigned( + f_count( + accum => signed(accum), + start => to_signed(start, accum'length), + by => to_signed(by, accum'length), + reset => reset, + cnt => cnt, + by_1 => by_1 + ) + ); + end function; + + function f_count ( + accum : unsigned; + start : unsigned := "00"; + by : unsigned := "01"; + reset : std_logic := '0'; + cnt : std_logic := '0'; + by_1 : std_logic := '0' + ) return unsigned is + begin + return unsigned( + f_count( + accum => signed(accum), + start => signed(start), + by => signed(by), + reset => reset, + cnt => cnt, + by_1 => by_1 + ) + ); + end function; + +end package body misc_tools_pkg; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/pipeline_delay_ram.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/pipeline_delay_ram.vhd new file mode 100755 index 0000000000000000000000000000000000000000..c5d5c17348280df94d7e869c95f15f866af18732 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/pipeline_delay_ram.vhd @@ -0,0 +1,166 @@ +------------------------------------------------------------------------------- +-- Title : Correlator Sample Bus Delay Line +-- Project : +------------------------------------------------------------------------------- +-- File : cmac_sample_bus_delay.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz> +-- Company : High Performance Computing Research Lab, Auckland University of Technology +-- Created : 2016-10-12 +-- Last update: 2018-07-02 +-- Platform : +-- Standard : VHDL'2008 +------------------------------------------------------------------------------- +-- Description: Delays a std_logic_vector by a constant number of cycles g_CYCLES_DELAY. +-- For g_CYCLES_DELAY < 4, this is done using using flip-flops. This should create +-- travel flops in the hyperflex architecture. +-- For g_CYCLES_DELAY >= 4, this is done using a RAM. +------------------------------------------------------------------------------- +-- Copyright (c) 2016 High Performance Computing Research Lab, Auckland University of Technology +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2016-10-12 1.0 wkamp Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library work; +use work.misc_tools_pkg.all; -- ceil_log2 + +library work; +use work.lfsr_pkg.all; -- lfsr, lfsr_advance + +entity pipeline_delay_ram is + + generic ( + g_CYCLES_DELAY : natural; + g_FORCE_USE_FLOPS : boolean := false; -- Implement the delay using only FLOPs. + g_FLOPS_BEFORE_RAM : natural := 0; -- number of input flops. + g_FLOPS_AFTER_RAM : natural := 0 -- number of output flops. + ); + + port ( + i_clk : in std_logic; + i_clk_ena : in std_logic := '1'; + i_bus : in std_logic_vector; + i_bus_vld : in std_logic := '1'; + o_bus_stop : out std_logic; + o_bus : out std_logic_vector; + o_bus_vld : out std_logic; + i_bus_stop : in std_logic := '0' + ); + +end entity pipeline_delay_ram; + +architecture rtl of pipeline_delay_ram is + + constant c_RAM_CYCLES : integer := g_CYCLES_DELAY - g_FLOPS_BEFORE_RAM - g_FLOPS_AFTER_RAM; + + type t_delay is array (natural range <>) of std_logic_vector(i_bus'range); + + signal delay_line : t_delay(g_CYCLES_DELAY downto 0); + signal delay_line_vld : std_logic_vector(g_CYCLES_DELAY downto 0); + + function f_ASRR (constant FORCE_USE_FLOPS : boolean) return string is + begin + if FORCE_USE_FLOPS then + return "off"; + end if; + return "on"; + end function; + + -- Prevent large pipelines from going into memory-based altshift_taps, since that won't take advantage of Hyper-Registers + attribute altera_attribute : string; + attribute altera_attribute of delay_line : signal is "-name AUTO_SHIFT_REGISTER_RECOGNITION " & f_ASRR(g_FORCE_USE_FLOPS); + attribute altera_attribute of delay_line_vld : signal is "-name AUTO_SHIFT_REGISTER_RECOGNITION " & f_ASRR(g_FORCE_USE_FLOPS); + +begin -- architecture rtl + + o_bus_stop <= i_bus_stop; + + -- Here we implement a zero delay. + delay_line(0) <= i_bus; + delay_line_vld(0) <= i_bus_vld; + o_bus <= delay_line(g_CYCLES_DELAY); + o_bus_vld <= delay_line_vld(g_CYCLES_DELAY) and i_clk_ena; + + -- Here delays greater than or equal to 4 using a RAM. + G_DELAY : if c_RAM_CYCLES >= 4 and not g_FORCE_USE_FLOPS generate + signal wr_addr : unsigned(ceil_log2(c_RAM_CYCLES)-1 downto 0) := (others => '0'); + signal rd_addr : unsigned(wr_addr'range) := (others => '0'); + + signal wr_data : std_logic_vector(i_bus'range); + signal wr_vld : std_logic; + signal rd_vld : std_logic; + signal rd_data : std_logic_vector(wr_data'range); + begin + P_ADDR_GEN : process (i_clk) is + begin + if rising_edge(i_clk) then + if i_clk_ena then + -- Note that in using an LFSR one address (highest address) in RAM goes unused! + wr_addr <= lfsr(wr_addr); + rd_addr <= lfsr_advance(wr_addr, 2**wr_addr'length - (c_RAM_CYCLES - 2)); + -- minus 2 for RAM latency. + + if g_FLOPS_BEFORE_RAM > 0 then + delay_line(g_FLOPS_BEFORE_RAM downto 1) <= delay_line(g_FLOPS_BEFORE_RAM-1 downto 0); + end if; + + -- data_vld delay line implemented in flops (may be converted to alt-shift-taps) + -- so that it can be used as a write_enable and read_enable for the data RAM. + -- This is done to reduce the dynamic power of the RAM by disabling the address + -- logic when it is not needed. + delay_line_vld(g_CYCLES_DELAY downto 1) <= delay_line_vld(g_CYCLES_DELAY-1 downto 0); + end if; + assert i_clk_ena report "i_clk_ena is only currently supported with g_FORCE_USE_FLOPS = true. To fix E_SDP_DATA_RAM needs a clk_enable port added." severity failure; + end if; + end process; + + wr_data <= delay_line(g_FLOPS_BEFORE_RAM); + wr_vld <= delay_line_vld(g_FLOPS_BEFORE_RAM) and i_clk_ena; + rd_vld <= delay_line_vld(g_FLOPS_BEFORE_RAM+c_RAM_CYCLES-2); -- minus 2 for RAM latency. + + E_SDP_DATA_RAM : entity work.sdp_ram + generic map ( + g_REG_OUTPUT => true) -- [boolean] + port map ( + i_clk => i_clk, -- [std_logic] + i_clk_reset => '0', -- [std_logic] + i_wr_addr => wr_addr, -- [unsigned] + i_wr_en => wr_vld, -- [std_logic] + i_wr_data => wr_data, -- [std_logic_vector] + i_rd_addr => rd_addr, -- [unsigned] + i_rd_en => rd_vld, -- [std_logic] + o_rd_data => rd_data); -- [std_logic_vector] + + delay_line(g_FLOPS_BEFORE_RAM+c_RAM_CYCLES) <= rd_data; + + P_OUT_FLOPS : process (i_clk) is + begin + if rising_edge(i_clk) then + if i_clk_ena then + if g_FLOPS_AFTER_RAM > 0 then + delay_line(g_CYCLES_DELAY downto g_FLOPS_BEFORE_RAM+c_RAM_CYCLES+1) <= + delay_line(g_CYCLES_DELAY-1 downto g_FLOPS_BEFORE_RAM+c_RAM_CYCLES); + end if; + end if; + end if; + end process; + + -- Here short delays using just flops. + elsif g_CYCLES_DELAY > 0 generate + P_DELAY : process (i_clk) is + begin + if rising_edge(i_clk) then + if i_clk_ena then + delay_line(g_CYCLES_DELAY downto 1) <= delay_line(g_CYCLES_DELAY-1 downto 0); + delay_line_vld(g_CYCLES_DELAY downto 1) <= delay_line_vld(g_CYCLES_DELAY-1 downto 0); + end if; + end if; + end process; + end generate; + +end architecture rtl; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/rdma_pkg.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/rdma_pkg.vhd new file mode 100755 index 0000000000000000000000000000000000000000..2d4fee7071a6c22bac715b655611e9da0fefaccb --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/rdma_pkg.vhd @@ -0,0 +1,327 @@ +-------------------------------------------------------------------------------- +-- Title : Remote Direct Memory Access (RDMA) package +-- Project : Square Kilometer Array +-------------------------------------------------------------------------------- +-- File : rdma_pkg.vhd +-- Author : William Kamp <william.kamp@aut.ac.nz +-- Company : High Performance Computing Research Lab, AUT +-- Created : Fri Oct 4 12:16:55 2019 +-- Last update : Fri Oct 11 12:24:27 2019 +-- Platform : +-- Standard : VHDL-2008 +-------------------------------------------------------------------------------- +-- Copyright (c) 2019 High Performance Computing Research Lab, AUT +------------------------------------------------------------------------------- +-- Description: +-------------------------------------------------------------------------------- +-- Revisions: Revisions and documentation are controlled by +-- the revision control system (RCS). The RCS should be consulted +-- on revision history. +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.eth_ip_udp_header_prepend_pkg.all; +use work.crc_pkg.all; -- f_next_crc + +package rdma_pkg is + + -- See Infiniband Specification Section 9.2: Base Transport Header + subtype t_operation is std_logic_vector(4 downto 0); + constant c_SEND_FIRST : t_operation := "00000"; + constant c_SEND_MIDDLE : t_operation := "00001"; + constant c_SEND_LAST : t_operation := "00010"; + constant c_SEND_LAST_WITH_IMMEDIATE : t_operation := "00011"; + constant c_SEND_ONLY : t_operation := "00100"; + constant c_SEND_ONLY_WITH_IMMEDIATE : t_operation := "00101"; + constant c_WRITE_FIRST : t_operation := "00110"; + constant c_WRITE_MIDDLE : t_operation := "00111"; + constant c_WRITE_LAST : t_operation := "01000"; + constant c_WRITE_LAST_WITH_IMMEDIATE : t_operation := "01001"; + constant c_WRITE_ONLY : t_operation := "01010"; + constant c_WRITE_ONLY_WITH_IMMEDIATE : t_operation := "01011"; + + subtype t_connection is std_logic_vector(2 downto 0); + constant c_RELIABLE_CONNECTION : t_connection := "000"; + constant c_UNRELIABLE_CONNECTION : t_connection := "001"; + constant c_RELIABLE_DATAGRAM : t_connection := "010"; + constant c_UNRELIABLE_DATAGRAM : t_connection := "011"; + constant c_CNP : t_connection := "100"; + constant c_EXTENDED_RELIABLE_CONNECTION : t_connection := "101"; + + constant c_RC : t_connection := c_RELIABLE_CONNECTION; + constant c_UC : t_connection := c_UNRELIABLE_CONNECTION; + constant c_RD : t_connection := c_RELIABLE_DATAGRAM; + constant c_UD : t_connection := c_UNRELIABLE_DATAGRAM; + constant c_XRC : t_connection := c_EXTENDED_RELIABLE_CONNECTION; + + type t_opcode is record + connection : t_connection; + operation : t_operation; + end record; + + type t_rdma_base_transport_header is record + OpCode : t_opcode; + SE : std_logic; + MigReq : std_logic; + PadCnt : unsigned(1 downto 0); + TVer : std_logic_vector(3 downto 0); + P_KEY : std_logic_vector(15 downto 0); + FECN : std_logic; + BECN : std_logic; + resv6 : std_logic_vector(5 downto 0); + DestQP : std_logic_vector(23 downto 0); + AckReq : std_logic; + resv7 : std_logic_vector(6 downto 0); + PSN : unsigned(23 downto 0); + end record; + + type t_RoCEv2_header is record + --pad : std_logic_vector(15 downto 0); -- align the eth hdr to end on 32b boundary. + --eth : t_eth_header; + ip : t_ip_header; + udp : t_udp_header; + bth : t_rdma_base_transport_header; + end record; + + -- autogen start decl + -------------------------------------------------- + -- Auto-generated code below. You should not edit. + -- Generated Fri Oct 11 12:24:39 2019 + -------------------------------------------------- + + type t_opcode_a is array(natural range <>) of t_opcode; + + constant T_OPCODE_ZERO : t_opcode := ( + connection => (others => '0'), + operation => (others => '0') + ); + + constant T_OPCODE_DONT_CARE : t_opcode := ( + connection => (others => '-'), + operation => (others => '-') + ); + + constant T_OPCODE_SLV_WIDTH : natural := 8; + + subtype t_opcode_slv is std_logic_vector(7 downto 0); + function to_slv (rec : t_opcode) return t_opcode_slv; + function from_slv (slv : t_opcode_slv) return t_opcode; + + type t_rdma_base_transport_header_a is array(natural range <>) of t_rdma_base_transport_header; + + constant T_RDMA_BASE_TRANSPORT_HEADER_ZERO : t_rdma_base_transport_header := ( + OpCode => T_OPCODE_ZERO, + SE => '0', + MigReq => '0', + PadCnt => (others => '0'), + TVer => (others => '0'), + P_KEY => (others => '0'), + FECN => '0', + BECN => '0', + resv6 => (others => '0'), + DestQP => (others => '0'), + AckReq => '0', + resv7 => (others => '0'), + PSN => (others => '0') + ); + + constant T_RDMA_BASE_TRANSPORT_HEADER_DONT_CARE : t_rdma_base_transport_header := ( + OpCode => T_OPCODE_ZERO, + SE => '-', + MigReq => '-', + PadCnt => (others => '-'), + TVer => (others => '-'), + P_KEY => (others => '-'), + FECN => '-', + BECN => '-', + resv6 => (others => '-'), + DestQP => (others => '-'), + AckReq => '-', + resv7 => (others => '-'), + PSN => (others => '-') + ); + + constant T_RDMA_BASE_TRANSPORT_HEADER_SLV_WIDTH : natural := 96; + + subtype t_rdma_base_transport_header_slv is std_logic_vector(95 downto 0); + function to_slv (rec : t_rdma_base_transport_header) return t_rdma_base_transport_header_slv; + function from_slv (slv : t_rdma_base_transport_header_slv) return t_rdma_base_transport_header; + + type t_RoCEv2_header_a is array(natural range <>) of t_RoCEv2_header; + + constant T_ROCEV2_HEADER_ZERO : t_RoCEv2_header := ( + ip => T_IP_HEADER_ZERO, + udp => T_UDP_HEADER_ZERO, + bth => T_RDMA_BASE_TRANSPORT_HEADER_ZERO + ); + + constant T_ROCEV2_HEADER_DONT_CARE : t_RoCEv2_header := ( + ip => T_IP_HEADER_ZERO, + udp => T_UDP_HEADER_ZERO, + bth => T_RDMA_BASE_TRANSPORT_HEADER_ZERO + ); + + constant T_ROCEV2_HEADER_SLV_WIDTH : natural := 320; + + subtype t_RoCEv2_header_slv is std_logic_vector(319 downto 0); + function to_slv (rec : t_RoCEv2_header) return t_RoCEv2_header_slv; + function from_slv (slv : t_RoCEv2_header_slv) return t_RoCEv2_header; + + ------------------------------------------------------ + -- End of Autogenerated code. You may add yours below. + ------------------------------------------------------ + -- autogen end decl + + function f_ICRC_INIT return std_logic_vector; + + -- ICRC fields replaced with 1 for the purpose of ICRC calc : Inifiniband Architecture Spec Annex17 RoCEv2, Section A17.3.3, CA17-22.c + constant c_RDMA_IP_HEADER_INVARIANT_MASK : t_ip_header := ( + version => (others => '0'), + header_len => (others => '0'), + type_of_service => (others => '1'), + total_length => (others => '0'), + identification => (others => '0'), + flags => (others => '0'), + frag_offset => (others => '0'), + ttl => (others => '1'), + protocol => (others => '0'), + header_checksum => (others => '1'), + src_addr => (others => '0'), + dst_addr => (others => '0') + ); + + constant c_RDMA_UDP_HEADER_INVARIANT_MASK : t_udp_header := ( + src_port => (others => '0'), + dst_port => (others => '0'), + length => (others => '0'), + checksum => (others => '1') + ); + + constant c_RDMA_BASE_TRANSPORT_HEADER_INVARIANT_MASK : t_rdma_base_transport_header := ( + OpCode => ( + connection => (others => '0'), + operation => (others => '0') + ), + SE => '0', + MigReq => '0', + PadCnt => (others => '0'), + TVer => (others => '0'), + P_KEY => (others => '0'), + FECN => '1', + BECN => '1', + resv6 => (others => '1'), + DestQP => (others => '0'), + AckReq => '0', + resv7 => (others => '0'), + PSN => (others => '0') + ); + + constant c_RoCEv2_HEADER_INVARIANT_MASK : t_RoCEv2_header := ( + --pad => x"0000", + --eth => T_ETH_HEADER_ZERO, + ip => c_RDMA_IP_HEADER_INVARIANT_MASK, + udp => c_RDMA_UDP_HEADER_INVARIANT_MASK, + bth => c_RDMA_BASE_TRANSPORT_HEADER_INVARIANT_MASK + ); + +end package rdma_pkg; + +package body rdma_pkg is + + -- autogen start body + -------------------------------------------------- + -- Auto-generated code below. You should not edit. + -- Generated Fri Oct 11 12:24:39 2019 + -------------------------------------------------- + + function to_slv (rec : t_opcode) return t_opcode_slv is + variable slv : std_logic_vector(7 downto 0); + begin + slv(4 downto 0) := rec.operation; + slv(7 downto 5) := rec.connection; + return slv; + end function to_slv; + + function from_slv (slv : t_opcode_slv) return t_opcode is + variable rec : t_opcode; + begin + rec.operation := slv(4 downto 0); + rec.connection := slv(7 downto 5); + return rec; + end function from_slv; + + function to_slv (rec : t_rdma_base_transport_header) return t_rdma_base_transport_header_slv is + variable slv : std_logic_vector(95 downto 0); + begin + slv(23 downto 0) := std_logic_vector(rec.PSN); + slv(30 downto 24) := rec.resv7; + slv(31) := rec.AckReq; + slv(55 downto 32) := rec.DestQP; + slv(61 downto 56) := rec.resv6; + slv(62) := rec.BECN; + slv(63) := rec.FECN; + slv(79 downto 64) := rec.P_KEY; + slv(83 downto 80) := rec.TVer; + slv(85 downto 84) := std_logic_vector(rec.PadCnt); + slv(86) := rec.MigReq; + slv(87) := rec.SE; + slv(95 downto 88) := to_slv(rec.OpCode); + return slv; + end function to_slv; + + function from_slv (slv : t_rdma_base_transport_header_slv) return t_rdma_base_transport_header is + variable rec : t_rdma_base_transport_header; + begin + rec.PSN := unsigned(slv(23 downto 0)); + rec.resv7 := slv(30 downto 24); + rec.AckReq := slv(31); + rec.DestQP := slv(55 downto 32); + rec.resv6 := slv(61 downto 56); + rec.BECN := slv(62); + rec.FECN := slv(63); + rec.P_KEY := slv(79 downto 64); + rec.TVer := slv(83 downto 80); + rec.PadCnt := unsigned(slv(85 downto 84)); + rec.MigReq := slv(86); + rec.SE := slv(87); + rec.OpCode := from_slv(slv(95 downto 88)); + return rec; + end function from_slv; + + function to_slv (rec : t_RoCEv2_header) return t_RoCEv2_header_slv is + variable slv : std_logic_vector(319 downto 0); + begin + slv(95 downto 0) := to_slv(rec.bth); + slv(159 downto 96) := to_slv(rec.udp); + slv(319 downto 160) := to_slv(rec.ip); + return slv; + end function to_slv; + + function from_slv (slv : t_RoCEv2_header_slv) return t_RoCEv2_header is + variable rec : t_RoCEv2_header; + begin + rec.bth := from_slv(slv(95 downto 0)); + rec.udp := from_slv(slv(159 downto 96)); + rec.ip := from_slv(slv(319 downto 160)); + return rec; + end function from_slv; + + ------------------------------------------------------ + -- End of Autogenerated code. You may add yours below. + ------------------------------------------------------ + -- autogen end body + + function f_ICRC_INIT return std_logic_vector is + variable crc : std_logic_vector(31 downto 0); + begin + crc := x"FFFFFFFF"; -- Initial value of the CRC: Inifiniband Architecture Spec Section 7.8.1 + -- ICRC calc starts with 64b of '1': Inifiniband Architecture Spec Annex17 RoCEv2, Section A17.3.3, CA17-22.a + crc := f_next_crc(x"FFFFFFFF", crc); + crc := f_next_crc(x"FFFFFFFF", crc); + return crc; + end function f_ICRC_INIT; + +end package body rdma_pkg; diff --git a/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/sdp_ram.vhd b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/sdp_ram.vhd new file mode 100755 index 0000000000000000000000000000000000000000..53eade3f30bf0cfbbffed4b5e9cd80a6ad66b576 --- /dev/null +++ b/applications/rdma_demo/libraries/rdma_icrc_external/src/vhdl/sdp_ram.vhd @@ -0,0 +1,66 @@ +------------------------------------------------------------------------------- +-- +-- Copyright 2023 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +------------------------------------------------------------------------------- +-- Author: R. van der Walle +-- Purpose: Wrapper for a simple dual port RAM + +library ieee; + use ieee.std_logic_1164.all; + use ieee.numeric_std.all; +library common_lib; + use common_lib.common_mem_pkg.all; + +entity sdp_ram is + generic ( + g_REG_OUTPUT : boolean := false; + g_INIT_FILE : string := "UNUSED" + ); + port ( + i_clk : in std_logic; + i_clk_reset : in std_logic; + i_wr_addr : in unsigned; + i_wr_en : in std_logic; + i_wr_data : in std_logic_vector; + i_rd_addr : in unsigned; + i_rd_en : in std_logic; + o_rd_data : out std_logic_vector + ); +end entity sdp_ram; + +architecture str of sdp_ram is + + constant c_ram : t_c_mem := (c_mem_ram_rd_latency, i_wr_addr'length, i_wr_data'length, 2**i_wr_addr'length, '0'); + +begin + u_common_ram_r_w : entity common_lib.common_ram_r_w + generic map ( + g_ram => c_ram, + g_init_file => g_INIT_FILE + ) + port map ( + rst => i_clk_reset, + clk => i_clk, + wr_en => i_wr_en, + wr_adr => std_logic_vector(i_wr_addr), + wr_dat => i_wr_data, + rd_en => i_rd_en, + rd_adr => std_logic_vector(i_rd_addr), + rd_dat => o_rd_data + ); +end str; diff --git a/libraries/io/eth/src/vhdl/eth_tester_rx.vhd b/libraries/io/eth/src/vhdl/eth_tester_rx.vhd index e64d5c042e51cbb413214b7d26899e1bfe7b6a17..13aa52024173354434c8b44a679a73664eb49eab 100644 --- a/libraries/io/eth/src/vhdl/eth_tester_rx.vhd +++ b/libraries/io/eth/src/vhdl/eth_tester_rx.vhd @@ -258,7 +258,7 @@ begin dp_rst => st_rst, dp_clk => st_clk, - ref_sync => unpacked_sosi.sync, + ref_sync => ref_sync, in_strobe_arr => in_strobe_arr, mm_rst => mm_rst,