- renamed signal names

- added pkt_done flag (TX idle)
- transmitter commands:
  packet alloc       : request ram for packet
  packet commit   : sends packet

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@829 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
2010-03-26 09:44:59 +00:00
parent 03cbf45996
commit 38a95c85dd
+15 -15
View File
@@ -67,9 +67,9 @@ ARCHITECTURE behavior OF emac_tx IS
signal nwords_free : word_ptr_t;
signal alloc_size : word_ptr_t;
signal alloc_en : std_logic;
signal mem_alloc_en : std_logic;
signal free_en : std_logic;
signal mem_free_en : std_logic;
signal commit_en : std_logic;
signal uncommit_en : std_logic;
@@ -127,8 +127,8 @@ ARCHITECTURE behavior OF emac_tx IS
begin
ctrl_out.tx_req <= alloc_req;
ctrl_out.pkt_alloc_req <= alloc_req;
ctrl_out.pkt_done <= cmd_fifo_empty;
mii_tx_er <= ctrl_in.tx_er;
@@ -166,7 +166,7 @@ host_state_next:
end process;
host_state:
process(host_s, alloc_req, alloc_OK, fill_rdy, din_vld)
process(host_s, alloc_req, alloc_OK, fill_rdy, din_vld, ctrl_in.pkt_commit_en)
begin
flush_en <= '0';
@@ -176,7 +176,7 @@ host_state:
fill_ptr_adv <= '0';
commit_en <= '0';
alloc_ack <= '0';
alloc_en <= '0';
mem_alloc_en <= '0';
host_sn <= host_s;
@@ -215,13 +215,13 @@ host_state:
fill_ptr_adv <= not fill_rdy and din_vld;
if alloc_req = '1' then
host_sn <= host_alloc;
elsif fill_rdy = '1' then
elsif fill_rdy = '1' or ctrl_in.pkt_commit_en = '1' then
host_sn <= host_commit;
end if;
when host_commit =>
commit_en <= '1';
alloc_en <= '1';
mem_alloc_en <= '1';
host_sn <= host_idle;
when others =>
@@ -239,7 +239,7 @@ alloc_request_logic:
if rising_edge(clk) then
if rst = '1' then
alloc_req <= '0';
elsif ctrl_in.tx_req_en = '1' and alloc_req = '0' then
elsif ctrl_in.pkt_alloc_en = '1' and alloc_req = '0' then
alloc_req <= '1';
fill_remain <= ctrl_in.tx_size(1 downto 0);
fill_size <= ctrl_in.tx_size(word_ptr_t'left+2 downto 2);
@@ -289,9 +289,9 @@ nwords_free_counter:
if rising_edge(clk) then
if flush_en = '1' then
nwords_free <= (others => '1');
elsif alloc_en = '1' then
elsif mem_alloc_en = '1' then
nwords_free <= nwords_free - fill_size;
elsif free_en = '1' then
elsif mem_free_en = '1' then
nwords_free <= nwords_free + xfer_size;
end if;
end if;
@@ -345,7 +345,7 @@ xfer_state_next:
end process;
xfer_state:
process(xfer_s, cmd_fifo_empty, xfer_odd, xfer_rdy, inter_frame_gap_rdy, alloc_en, mii_fifo_full)
process(xfer_s, cmd_fifo_empty, xfer_odd, xfer_rdy, inter_frame_gap_rdy, mem_alloc_en, mii_fifo_full)
begin
xfer_cnt_set <= '0';
@@ -354,7 +354,7 @@ xfer_state:
xfer_ptr_adv <= '0';
xfer_remain_en <= '0';
mii_fifo_we <= '0';
free_en <= '0';
mem_free_en <= '0';
uncommit_en <= '0';
xfer_sn <= xfer_s;
@@ -396,8 +396,8 @@ xfer_state:
end if;
when xfer_free =>
free_en <= not alloc_en;
if alloc_en = '0' then
mem_free_en <= not mem_alloc_en;
if mem_alloc_en = '0' then
uncommit_en <= '1';
xfer_sn <= xfer_idle;
end if;