- separate RX/TX status and size register

Committed on the Free edition of March Hare Software CVSNT Server.
Upgrade to CVS Suite for more features and support:
http://march-hare.com/cvsnt/


git-svn-id: http://moon:8086/svn/vhdl/trunk@868 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
2010-04-07 15:28:23 +00:00
parent 433ff23c41
commit cfa1a3f8a2
+59 -32
View File
@@ -86,43 +86,55 @@ registers_write:
if RST_I = '1' then
rx_int_en <= '0';
tx_int_en <= '0';
tx_ctrl_in.tx_er <= '0';
tx_ctrl_in.tx_size <= (others => '0');
rx_ctrl_in.mac_addr <= (X"03", X"02", X"01", X"00", X"07", X"06");
rx_ctrl_in.promiscious <= '1';
rx_ctrl_in.promiscious <= '0';
tx_ctrl_in.Gbps_en <= '0';
rx_ctrl_in.Gbps_en <= '0';
elsif (STB_I and CYC_I and WE_I) = '1' then
case ADDR_I(5 downto 2) is
-- 0x0000
when "0000" =>
tx_ctrl_in.tx_er <= DAT_I(31);
tx_ctrl_in.reset <= DAT_I(27);
tx_ctrl_in.Gbps_en <= DAT_I(26);
tx_ctrl_in.pkt_alloc_en <= DAT_I(25);
tx_ctrl_in.pkt_commit_en <= DAT_I(24);
rx_ctrl_in.reset <= DAT_I(23);
rx_ctrl_in.Gbps_en <= DAT_I(22);
rx_ctrl_in.reset <= DAT_I(31);
rx_ctrl_in.Gbps_en <= DAT_I(30);
rx_ctrl_in.promiscious <= DAT_I(23);
rx_ctrl_in.pkt_req_en <= DAT_I(17);
rx_ctrl_in.pkt_free_en <= DAT_I(16);
tx_int_en <= DAT_I(5);
rx_int_en <= DAT_I(4);
rx_ctrl_in.promiscious <= DAT_I(3);
when "0001" =>
tx_ctrl_in.tx_size <= DAT_I(31 downto 16);
-- 0x0004
-- rx_size R/O
-- 0x0008
when "0010" =>
tx_ctrl_in.reset <= DAT_I(31);
tx_ctrl_in.Gbps_en <= DAT_I(30);
tx_ctrl_in.pkt_alloc_en <= DAT_I(17);
tx_ctrl_in.pkt_commit_en <= DAT_I(16);
tx_int_en <= DAT_I(4);
-- 0x000C
when "0011" =>
tx_ctrl_in.tx_size <= DAT_I(15 downto 0);
-- 0x0010
when "0100" =>
tx_din_vld <= '1';
tx_din <= DAT_I;
when "0100" =>
-- 0x0014
-- Gap
-- 0x0018
when "0110" =>
rx_ctrl_in.mac_addr(0) <= DAT_I(31 downto 24);
rx_ctrl_in.mac_addr(1) <= DAT_I(23 downto 16);
rx_ctrl_in.mac_addr(2) <= DAT_I(15 downto 8);
rx_ctrl_in.mac_addr(3) <= DAT_I(7 downto 0);
when "0101" =>
-- 0x001C
when "0111" =>
rx_ctrl_in.mac_addr(4) <= DAT_I(31 downto 24);
rx_ctrl_in.mac_addr(5) <= DAT_I(23 downto 16);
@@ -142,39 +154,54 @@ registers_read:
if (STB_I and CYC_I) = '1' and WE_I = '0' then
case ADDR_I(5 downto 2) is
when "0000" =>
-- 0x0000
when "0000" =>
ACK_O <= ready;
DAT_O <= (others => '0');
DAT_O(31) <= tx_ctrl_in.tx_er;
DAT_O(30) <= '0';
DAT_O(29) <= '0';
DAT_O(28) <= tx_ctrl_out.pkt_done;
DAT_O(27) <= tx_ctrl_out.reset_busy;
DAT_O(26) <= tx_ctrl_in.Gbps_en;
DAT_O(25) <= tx_ctrl_out.pkt_alloc_req;
DAT_O(24) <= tx_ctrl_out.pkt_armed;
DAT_O(23) <= rx_ctrl_out.reset_busy;
DAT_O(22) <= rx_ctrl_in.Gbps_en;
DAT_O(31) <= rx_ctrl_out.reset_busy;
DAT_O(30) <= rx_ctrl_in.Gbps_en;
DAT_O(23) <= rx_ctrl_in.promiscious;
DAT_O(19) <= rx_ctrl_out.pkt_bcast;
DAT_O(18) <= rx_ctrl_out.pkt_mac_match;
DAT_O(17) <= rx_ctrl_out.pkt_valid;
DAT_O(16) <= rx_ctrl_out.pkt_avail;
DAT_O(5) <= tx_int_en;
DAT_O(4) <= rx_int_en;
DAT_O(3) <= rx_ctrl_in.promiscious;
-- 0x0004
when "0001" =>
ACK_O <= '1';
DAT_O <= tx_ctrl_out.tx_size & rx_ctrl_out.rx_size;
DAT_O <= X"0000" & rx_ctrl_out.rx_size;
-- 0x0008
when "0010" =>
ACK_O <= ready;
DAT_O <= (others => '0');
DAT_O(31) <= tx_ctrl_out.reset_busy;
DAT_O(30) <= tx_ctrl_in.Gbps_en;
DAT_O(24) <= tx_ctrl_out.pkt_done;
DAT_O(17) <= tx_ctrl_out.pkt_alloc_req;
DAT_O(16) <= tx_ctrl_out.pkt_armed;
DAT_O(4) <= tx_int_en;
-- 0x000C
when "0011" =>
ACK_O <= '1';
DAT_O <= X"0000" & tx_ctrl_out.tx_size;
-- 0x0010
when "0100" =>
rx_ctrl_in.pkt_read_en <= '1';
when "0100" =>
-- 0x0014
-- Gap
-- 0x0018
when "0110" =>
ACK_O <= '1';
DAT_O <= rx_ctrl_in.mac_addr(0) & rx_ctrl_in.mac_addr(1) & rx_ctrl_in.mac_addr(2) & rx_ctrl_in.mac_addr(3);
when "0101" =>
-- 0x001C
when "0111" =>
ACK_O <= '1';
DAT_O <= rx_ctrl_in.mac_addr(4) & rx_ctrl_in.mac_addr(5) & X"0000";