Everything is synchronous except for the main clock divider. This circuit generates the 1Hz clock and the refresh clock for the LED display. There have been no problems with it that I have noticed.
The RS232 transmitter and receiver are clocked with a baud rate generator which is a synchronous programmable 16 bit divider. This divider produces a 16X baud clock.
Oh, inside the transmitter is a /16 clock prescaler that is asynchronous. The main transmitter is synchronous and operates at the baud frequency. The receiver operates at BaudX16 frequency.
The 8 bit bus output of the receiver is effectively almost static. It only changes when a new character is received. The LED display does not buffer the input buses (there are four 4 bit buses) and displays the instantaneous contents of those buses.
There is a split when it goes into the display buses. The display circuit has a 4 bit bus for each digit. There are four digits. The main 8 bit bus comes from the receiver and is named "D[7..0]" and the display branches are named "D[3..0]" and "D[7..4]". The named 4 bit buses are physically connected to the named 8 bit bus. The other two digit buses are tied to ground to produce zeros on their respective digits. Again, this works fine until I connect the transmitter.
The transmitter has an 8 bit register that gets clocked by a WR pulse. The WR pulse also triggers the transmitter circuit to begin. There doesn't seem to be a problem with the WR strobe. I have used both the 1Hz clock for this and also the RX_READY line from the receiver with the same results. Characters are being transmitted at the right time, they just aren't the correct characters.
My guess, based on the way its acting, is that somehow some of the bus is not connected. In one compile, the transmitter would echo the same character sent, but with bit 4 forced low. Why would it connect some bits, but not the others?
I can upload a screen shot or the entire design if you think it will help. It will be later this evening though.