[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [ethmac] bug found?



Hello,
The CarrierSenseLoss is bit 0 in Tx buffer descriptor. 

Carrier Sense is a line coming from the PHY.
Normally, the crs coming from the PHY is asserted when the PHY is 
transmiting or receiving data in half duplex; in full duplex, it is only 
asserted when the PHY is receiving data.
The problem is:
When the MAC is running in full duplex, the CarrierSenseLoss bit will be 
asserted when transmitting data, because the PHY will not assert its 
CarrierSense line (and this also causes an interrupt).

I solved the problem (I think), by using in eth_top.v a new signal:

assign TxCarrierSense1 = r_FullD | CarrierSense_Tx2;

and passing that signal to eth_macstatus (  (.CarrierSense
(TxCarrierSense1) ).

Now the CarrierSenseLoss will never be asserted when working in full 
duplex.

----- Original Message ----- 
From: Illan Glasner <IGlasner@m... > 
To: "'ethmac@o... '" <ethmac@o... > 
Date: Wed, 18 Dec 2002 10:57:22 -0800 
Subject: RE: [ethmac] bug found? 

> 
> 
> 
>    Hi, 
> 
>         What does this CarrierSenseLoss used for at all? 
> 
> crs usualy is used to tell if the line is busy or not. 
> 
> assuming the above is used for the trasmite machine than in full 
> duplex you 
> usualy count ipg base on when you deasert the txen. 
> 
> btw I assume you wanted to write that in half duplex the phy asser 
> the crs 
> when trasmiting OR reciving. 
> 
> have a nice day 
> 
>    Illan 
> 
> 
> -----Original Message----- 
> From: davidmertens@f...  [mailto:davidmertens@f... ] 
> Sent: Wednesday, December 18, 2002 11:45 AM 
> To: ethmac@o...  
> Subject: [ethmac] bug found? 
> 
> 
> I think I found a bug. 
> It has something to do with the carrier sense bit in the TxBD when 
> working in full duplex. 
> 
> When using full duplex, the carrier sense line from the PHY will 
> not be 
> asserted when transmitting data, only when it is receiving data (in 
> half 
> duplex it will be asserted when sending AND receiving data). 
> In eth_macstatus.v, the last lines of the code: 
> 
> // CarrierSenseLost 
> always @ (posedge MTxClk or posedge Reset) 
> begin 
>   if(Reset) 
>     CarrierSenseLost <=#Tp 1'b0; 
>   else 
>   if((StatePreamble | (|StateData)) & ~CarrierSense & 
> ~Loopback & 
> ~Collision) 
>     CarrierSenseLost <=#Tp 1'b1; 
>   else 
>   if(TxStartFrm) 
>     CarrierSenseLost <=#Tp 1'b0; 
> end 
> 
> 
> --> shouldn't there be something like : 
> if((StatePreamble | (|StateData)) & ~CarrierSense & 
> ~Loopback & 
> ~Collision) & ~r_FullD ) 
> 
> If you don't use ~r_FullD, you always get an Tx error, because the 
> carrier sense of the PHY isn't asserted when transmitting. 
> 
> Greetings, 
> David 
> 
--
To unsubscribe from ethmac mailing list please visit http://www.opencores.org/mailinglists.shtml