In this case, I wouldn't push the data into the array. Rather, I would describe this situation differently. I would simply fan out "dest" to all transmitters. This way the transmitter would detect if the data is his by comparing "dest" to the transmitter's number and acting accordingly.
Once again, great idea. I actually sat down to implement this and then I realized a complication.
The serial transmitters take a lot of time to send a byte, there needs to be a way to stall the FIFO when it has a byte for a port that is busy.
The solution I see to this involves 2 composite (or'd) signals back from the serial transmitters.
One signal, valid_addr, indicates that a transmitter has recognized it's address . If no transmitter sets this high, then the distributor process should discard the byte and move on.
If valid_addr goes is high (1 cycle later than the addr is put on the bus), then the distributor process will wait for the second composite signal, ack, to go high, meaning that the transmitter has finished transmitting it's last byte and accepted the new one.
Individual transmitter fifos don't fundamentally alter the situation.
This scheme makes the fifo run at half speed, best case. In most situations, with few and slow transmitters, this will not be a practical issue.
I'm curious if anyone has any thoughts on my proposed method for handling busy transmitters
But for now I have gone back to my original concept of having the distributor process choose the recipient, but with range checking on the index.