Line 18... |
Line 18... |
-- Revision:
|
-- Revision:
|
-- Revision 0.01 - File Created
|
-- Revision 0.01 - File Created
|
-- Revision 0.02 - fixed up setting of tx_result control defaults
|
-- Revision 0.02 - fixed up setting of tx_result control defaults
|
-- Revision 0.03 - Added data_out_first
|
-- Revision 0.03 - Added data_out_first
|
-- Revision 0.04 - Added handling of broadcast address
|
-- Revision 0.04 - Added handling of broadcast address
|
|
-- Revision 0.05 - Fix cks calc when add of high bits causes another ovf
|
-- Additional Comments:
|
-- Additional Comments:
|
--
|
--
|
----------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------
|
library IEEE;
|
library IEEE;
|
use IEEE.STD_LOGIC_1164.all;
|
use IEEE.STD_LOGIC_1164.all;
|
Line 66... |
Line 67... |
SEND_ETH_HDR, -- sending the ethernet header
|
SEND_ETH_HDR, -- sending the ethernet header
|
SEND_IP_HDR, -- sending the IP header
|
SEND_IP_HDR, -- sending the IP header
|
SEND_USER_DATA -- sending the users data
|
SEND_USER_DATA -- sending the users data
|
);
|
);
|
|
|
type crc_state_type is (IDLE, TOT_LEN, ID, FLAGS, TTL, CKS, SAH, SAL, DAH, DAL, FINAL, WAIT_END);
|
type crc_state_type is (IDLE, TOT_LEN, ID, FLAGS, TTL, CKS, SAH, SAL, DAH, DAL, ADDOVF, FINAL, WAIT_END);
|
|
|
type count_mode_type is (RST, INCR, HOLD);
|
type count_mode_type is (RST, INCR, HOLD);
|
type settable_cnt_type is (RST, SET, INCR, HOLD);
|
type settable_cnt_type is (RST, SET, INCR, HOLD);
|
type set_clr_type is (SET, CLR, HOLD);
|
type set_clr_type is (SET, CLR, HOLD);
|
|
|
Line 523... |
Line 524... |
tx_hdr_cks <= std_logic_vector (unsigned(tx_hdr_cks) + unsigned(ip_tx.hdr.dst_ip_addr(31 downto 16)));
|
tx_hdr_cks <= std_logic_vector (unsigned(tx_hdr_cks) + unsigned(ip_tx.hdr.dst_ip_addr(31 downto 16)));
|
crc_state <= DAL;
|
crc_state <= DAL;
|
|
|
when DAL =>
|
when DAL =>
|
tx_hdr_cks <= std_logic_vector (unsigned(tx_hdr_cks) + unsigned(ip_tx.hdr.dst_ip_addr(15 downto 0)));
|
tx_hdr_cks <= std_logic_vector (unsigned(tx_hdr_cks) + unsigned(ip_tx.hdr.dst_ip_addr(15 downto 0)));
|
|
crc_state <= ADDOVF;
|
|
|
|
when ADDOVF =>
|
|
tx_hdr_cks <= std_logic_vector ((unsigned(tx_hdr_cks) and x"00ffff")+ unsigned(tx_hdr_cks(23 downto 16)));
|
crc_state <= FINAL;
|
crc_state <= FINAL;
|
|
|
when FINAL =>
|
when FINAL =>
|
tx_hdr_cks <= inv_if_one(std_logic_vector (unsigned(tx_hdr_cks) + unsigned(tx_hdr_cks(23 downto 16))), '1');
|
tx_hdr_cks <= inv_if_one(std_logic_vector (unsigned(tx_hdr_cks) + unsigned(tx_hdr_cks(23 downto 16))), '1');
|
crc_state <= WAIT_END;
|
crc_state <= WAIT_END;
|