A method and apparatus for facilitating the determination of a status of
an asynchronous memory (e.g., how full or empty the memory is). A write
pointer to the memory is maintained in a first clock domain; a read
pointer is maintained in a second clock domain. The pointers are
maintained in a non-binary code format promoting minimum bit transitions
as the pointers increment (e.g., Gray code). Each pointer is transmitted
to the other clock domain through synchronizers. Each synchronizer
comprises multiple sets of D flip-flops. In each clock domain, the write
pointer and read pointer values are converted to mathematically useful
formats (e.g., binary), and their difference is calculated. The
difference indicates how much space in the memory is or is not used, and
may be compared to a non-zero threshold.