| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
| ![../images/main/bulllet_4dots_orange.gif](http://www.asic-world.com/images/main/bulllet_4dots_orange.gif) | Handshake Signaling |
|
| In this method the system (module) A sends data to system/module B based on the handshake signals ack and req signals. The protocol for this uses the same old method that is found with 8155 chip used with 8085. |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| ![../images/tidbits/crossc1.gif](http://www.asic-world.com/images/tidbits/crossc1.gif) |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| Protocol |
|
| - Transmitter asserts the req (request) signal, asking the receiver to accept the data on the data bus.
- Receiver asserts the ack (acknowledge) signal, asserting that it has accepted the data.
|
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| ![../images/tidbits/crossc15.gif](http://www.asic-world.com/images/tidbits/crossc15.gif) |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| This method is straightforward, but it too has got loop holes: when system B samples the systems A's req line and System A samples system B's ack line, they are done with respect to their internal clock, so there will be setup and hold time violation. To avoid this we go for double or triple stage synchronizers, which increase the MTBF and thus are immune to metastability to a good extent. The figure below shows how this is done with respect to the above example. |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| ![../images/tidbits/crossc6.gif](http://www.asic-world.com/images/tidbits/crossc6.gif) |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| If we do the double or triple stage synchronizing, then the transfer rate comes down, due to the fact that a lot of clock cycles are wasted just handshaking. |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| ![../images/tidbits/crossc8.gif](http://www.asic-world.com/images/tidbits/crossc8.gif) |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| Sometimes it is good to synchronize the data also to be double sure, but normally we don't do this, as it takes a lot of logic and what we gain is very small. The figure below shows one such case (there is no difference between circuits shown for req and data, they are one and same). |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| ![../images/tidbits/crossc11.gif](http://www.asic-world.com/images/tidbits/crossc11.gif) |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
| ![../images/main/bulllet_4dots_orange.gif](http://www.asic-world.com/images/main/bulllet_4dots_orange.gif) | Asynchronous FIFO |
|
| An Asynchronous FIFO has got two interfaces, one for writing the data into the FIFO and the other for reading the data out. It has got two clocks, one for writing and the other for reading. System A writes the data in the FIFO and System B reads out the data from it. To facilitate error free operations, we have FIFO full and FIFO empty signals. These signals are generated with respect to the corresponding clock. FIFO full signal is used by system A (as when FIFO is full, we don't want system A to write data into FIFO, this data will be lost), so it will be driven by the write clock. Similarly, FIFO empty will be driven by the read clock. Here read clock means system B clock and write clock means system A clock. |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| Asynchronous FIFO is used at places when the performance is a matter, when one does not want to waste clock cycles in handshake signals, when there is a lot of system resources available. |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| ![../images/tidbits/async_fifo_crossfreq.gif](http://www.asic-world.com/images/tidbits/async_fifo_crossfreq.gif) |
| | ![space.gif](http://www.asic-world.com/images/main/space.gif)
|
|
| How to design an Asynchronous FIFO is not in the scope of this document, but what I would like to point out is that one should be careful with the generation of FIFO full and FIFO empty signals, as it may, in certain cases, cause metastability. |