moottii
Full Member level 2
- Joined
- Feb 22, 2012
- Messages
- 120
- Helped
- 13
- Reputation
- 26
- Reaction score
- 13
- Trophy points
- 1,298
- Activity points
- 1,962
Hi friends,
I have the VHDL code for CRC (ethernet 802.3), but I don't know how to use the code. For instance I don't know when I must set the "crc_en".
Could you please guide me?
(The code is belong to http://outputlogic.com/)
Thanks in advance
I have the VHDL code for CRC (ethernet 802.3), but I don't know how to use the code. For instance I don't know when I must set the "crc_en".
Could you please guide me?
(The code is belong to http://outputlogic.com/)
Thanks in advance
Code:
library ieee;
use ieee.std_logic_1164.all;
entity crc_tx is
port ( data_in : in std_logic_vector (3 downto 0);
crc_en , rst, clk : in std_logic;
crc_out : out std_logic_vector (3 downto 0));
end crc_tx;
architecture imp_crc of crc_tx is
signal lfsr_q: std_logic_vector (31 downto 0);
signal lfsr_c: std_logic_vector (31 downto 0);
begin
crc_out <= lfsr_q(31) & lfsr_q(30) & lfsr_q(29) & lfsr_q(28);
lfsr_c(0) <= lfsr_q(28) xor data_in(0);
lfsr_c(1) <= lfsr_q(28) xor lfsr_q(29) xor data_in(0) xor data_in(1);
lfsr_c(2) <= lfsr_q(28) xor lfsr_q(29) xor lfsr_q(30) xor data_in(0) xor data_in(1) xor data_in(2);
lfsr_c(3) <= lfsr_q(29) xor lfsr_q(30) xor lfsr_q(31) xor data_in(1) xor data_in(2) xor data_in(3);
lfsr_c(4) <= lfsr_q(0) xor lfsr_q(28) xor lfsr_q(30) xor lfsr_q(31) xor data_in(0) xor data_in(2) xor data_in(3);
lfsr_c(5) <= lfsr_q(1) xor lfsr_q(28) xor lfsr_q(29) xor lfsr_q(31) xor data_in(0) xor data_in(1) xor data_in(3);
lfsr_c(6) <= lfsr_q(2) xor lfsr_q(29) xor lfsr_q(30) xor data_in(1) xor data_in(2);
lfsr_c(7) <= lfsr_q(3) xor lfsr_q(28) xor lfsr_q(30) xor lfsr_q(31) xor data_in(0) xor data_in(2) xor data_in(3);
lfsr_c(8) <= lfsr_q(4) xor lfsr_q(28) xor lfsr_q(29) xor lfsr_q(31) xor data_in(0) xor data_in(1) xor data_in(3);
lfsr_c(9) <= lfsr_q(5) xor lfsr_q(29) xor lfsr_q(30) xor data_in(1) xor data_in(2);
lfsr_c(10) <= lfsr_q(6) xor lfsr_q(28) xor lfsr_q(30) xor lfsr_q(31) xor data_in(0) xor data_in(2) xor data_in(3);
lfsr_c(11) <= lfsr_q(7) xor lfsr_q(28) xor lfsr_q(29) xor lfsr_q(31) xor data_in(0) xor data_in(1) xor data_in(3);
lfsr_c(12) <= lfsr_q(8) xor lfsr_q(28) xor lfsr_q(29) xor lfsr_q(30) xor data_in(0) xor data_in(1) xor data_in(2);
lfsr_c(13) <= lfsr_q(9) xor lfsr_q(29) xor lfsr_q(30) xor lfsr_q(31) xor data_in(1) xor data_in(2) xor data_in(3);
lfsr_c(14) <= lfsr_q(10) xor lfsr_q(30) xor lfsr_q(31) xor data_in(2) xor data_in(3);
lfsr_c(15) <= lfsr_q(11) xor lfsr_q(31) xor data_in(3);
lfsr_c(16) <= lfsr_q(12) xor lfsr_q(28) xor data_in(0);
lfsr_c(17) <= lfsr_q(13) xor lfsr_q(29) xor data_in(1);
lfsr_c(18) <= lfsr_q(14) xor lfsr_q(30) xor data_in(2);
lfsr_c(19) <= lfsr_q(15) xor lfsr_q(31) xor data_in(3);
lfsr_c(20) <= lfsr_q(16);
lfsr_c(21) <= lfsr_q(17);
lfsr_c(22) <= lfsr_q(18) xor lfsr_q(28) xor data_in(0);
lfsr_c(23) <= lfsr_q(19) xor lfsr_q(28) xor lfsr_q(29) xor data_in(0) xor data_in(1);
lfsr_c(24) <= lfsr_q(20) xor lfsr_q(29) xor lfsr_q(30) xor data_in(1) xor data_in(2);
lfsr_c(25) <= lfsr_q(21) xor lfsr_q(30) xor lfsr_q(31) xor data_in(2) xor data_in(3);
lfsr_c(26) <= lfsr_q(22) xor lfsr_q(28) xor lfsr_q(31) xor data_in(0) xor data_in(3);
lfsr_c(27) <= lfsr_q(23) xor lfsr_q(29) xor data_in(1);
lfsr_c(28) <= lfsr_q(24) xor lfsr_q(30) xor data_in(2);
lfsr_c(29) <= lfsr_q(25) xor lfsr_q(31) xor data_in(3);
lfsr_c(30) <= lfsr_q(26);
lfsr_c(31) <= lfsr_q(27);
process (clk,rst) begin
if (rst = '1') then
lfsr_q <= (others=>'1');
elsif (clk'EVENT and clk = '1') then
if (crc_en = '1') then
lfsr_q <= lfsr_c;
else
lfsr_q <= lfsr_q(27 downto 0) & X"F";
end if;
end if;
end process;
end architecture imp_crc;