Forum Discussion
Altera_Forum
Honored Contributor
18 years agoI wouldn't know any books. Probably the biggest issue with a book is that the user has specific constraints, where the most of the solutions wouldn't apply and could be skipped. Also, I've never seen a solution that someone else says they don't like and have their own methodology.
Some common ones: a) Using an asynchronous FIFO, usually Altera's megawizard. This is best for data transfers, and can usually maintain the bandwitdh of the two sides. The only issue is over/underflows need to be dealt with. (Done outside of the FIFO) b) Synchronization. This is usually a single signal(or a group of individual signals where we don't care if they are captured on different clock cycles, like pushbuttons). A common method is to double register these into the other clock domain to reduce metastability. A tight timing requirement between the two registers is recommended, but often not done. c) Handshaking - Done a lot because they are robust, but they usually require multiple clock cycles for every bit of data. If throughput isn't a concern, these work well. I don't have an example available, as I mainly do the first two. After that it gets very scenario specific. For example, if the receive side is at a higher clock rate than the data, you can oversample. If the two clocks are equivalent(guaranteed 1:1 edge ratio) over time but unkown phase relationships, then a phase-compensation FIFO will work(which is simpler than an asynchronous FIFO). I would figure out what your requirements are and go from there(or ask more questions here), rather than try to understand them all.