Forums VLSI Clock domain crossings: how comes that the greycode should help in such a case?

This topic contains 4 replies, has 1 voice, and was last updated by  Leprofesseur } 2 years, 8 months ago.

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #2417

    Leprofesseur }
    Keymaster

    by grey coding of correlated information bits, it make sure that only one bit is changing at a time across clock domains.

    #2418

    Leprofesseur }
    Keymaster

    but that only works when the input is counting increasingly from 0 to 3…

    I don’t understand how this should help at all in such a case (EN / RD) if the input data could still be 2 random bits (which basically would translate to 2 random greycode values?!)

    #2419

    Leprofesseur }
    Keymaster

    It’s not to get confused with EN/RD, from conceptual point of view when co-related information bits cross clock boundaries, we need to be careful, we can use different strategies depending on complexities of design, for example if you have 3 bits, you can use gray codes so that only one bit changes, otherwise if two bits are changing at the same time, then there is danger that it may latch wrong values (different arrival time via different sync flops routes in destination). By just changing one bit and keeping other bits constant, we properly latch values in receiving domain. One can use other strategies e.g. FIFO, state machine, closed-loop etc for multi-bit crossings. You may wanna watch other lectures where I discuss other clock crossing strategies. Hope that helps!

    #2420

    Leprofesseur }
    Keymaster

    could it be that EN/RD is just not a suitable example for this? eg. moving an increasing memory pointer from one clock domain to another one might be a better example (for greycode) to understand this?

    #2421

    Leprofesseur }
    Keymaster

    It seems to me that due to EN/RD you are getting confused, you said that first enable EN and then RD follows, I assume that it is consistent that when EN is enabled then after one clock RD is enabled and that is used for some handshake, that many not be a good example of gray code. Lets say another example, suppose you may wanna pass an array[2:0] across clock domains, you may wanna use gray code technique. Memory pointers are another example, I discussed this in FIFO lecture, you may wanna check that.

Viewing 5 posts - 1 through 5 (of 5 total)

You must be logged in to reply to this topic.