
The core of this project is a quasi-asynchronous interconnect. Data is streamed in through an SPI interface, then the data is sent between from the TX to the RX, with an ACK signal between each transaction. After completion, data is streamed out of the SPI interface.
Instead of standard NULL convention where the TX and RX lines go low after each transaction, we instead read toggles on each line as a representation of new data. This essentially halves the switching rate of the TX-RX lanes with some minor added logic on the decoder and encoder.
As an example, observe the following transaction:
4'b0110 : X4'b1110 : 2'b114'b1100 : 2'b014'b1100 : XHere, the value 4'b0111 would be recieved on the RX side.
Connect the RX and TX sides together by tying UI[4:0] to UO[4:0].
Note that with two chips, you can instead tie the chips together.
The asyncronous interconnect is then controlled by the following steps: 0. Preform an active low reset
UIO[7]) highUI[7]UIO[6]UI[5])UO[6]) goes high, drop the CAPTURE lineUO[7]UI[6])UO[5]) is asserted, restart from step 1Note: steps 2 and 6 can be done at the same time, but step 1 must still be repeated on the next cycle.
It is also possible to instead pulse the CAPTURE line before reading the RX data.
None.
| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | RX[0] | TX[0] | DBG_ADDR[0] |
| 1 | RX[1] | TX[1] | DBG_ADDR[1] |
| 2 | RX[2] | TX[2] | DBG_ADDR[2] |
| 3 | RX[3] | TX[3] | DBG_ADDR[3] |
| 4 | TX_ACK | RX_ACK | |
| 5 | LOAD | DONE | DBG_OUT |
| 6 | RDY | VLD | SCLK |
| 7 | MOSI | MISO | CAPTURE |