Marcus Harnisch <> writes:
> "Weng Tianxiang" <> writes:
>> I fully agree with your opinions
>
>> and I don't understand why you agree with all reasons stated by Kai.
>>
>> "Just make sure that you are using a PLL to extract and stabilizing
>> the receive clock."
>
> IIRC, I said I'd agree with the reasons, *not* with the conclusions
> that were drawn. Kai was pointing out (although indirectly) that the
> recovered clock is unreliable.
Yup, that was my point. I was indirect on purpose - the original
posting smelled of homework, so I thought that I'd leave something for
"the student" to figure out
As an example of problems arising from an unreliable receive clock,
I've recently debugged a problem where we saw our Ethernet switch
forwarding packets with CRC errors. After much gnashing of teeth,
pulling of hairs etc, we found that we could provoke it by injecting a
1 nsec spike on the receive clock. When the spike occurs, both the
datapath and the CRC logic double-clocks, but while the datapath
samples another 64 bit of data, the CRC logic doesn't change state
because of the logic depth is so big that no inputs to the CRC state
register had changed state -> the CRC is OK at the end of the frame.
Had the CRC checker been in the local clock domain, and checked the
data there, this error wouldn't have happened.
Kai
--
Kai Harrekilde-Petersen <khp(at)harrekilde(dot)dk>