02-02-2012 08:37 AM
I want to use a CPLD like signal router of bidirectional buses. Every bus must be able to be routed to all the other buses, just changing an internal variable.
I know that when using a bidirectional bus I need a signal for reading or writing on it. However, I need to configure the connections without using any signal that indicates the direction of the transmission. This means that if bus A is connected to bus B, if A writes anything on this bus, the CPLD knows that A is writing and B is reading, and vice versa.
Is there any solution for this problem?
02-02-2012 08:45 AM
So what you really want between bus A and B is a switch. Any other sort of buffer
will require direction information. There may be a few specialty chips that can
sense the drive direction and buffer (some I2C repeaters do this) but the circuitry
necessary for this is not available in CPLD's. You could use a CPLD to control
external switched (something like the "QuickSwitch" line of FET bus switches)
or you could look for a real crossbar switch (sometimes called crosspoint switch).
02-02-2012 08:58 AM
Yes, what I'm trying to implement is a switch between several buses.
So what I understand from your answer is that I can not cheat the CPLD anyway so it behaves the way I want, isn't it?
Ah, I forgot to say that my CPLD is the Xilinx CoolRunner XC2C256, if it is of any help.
You say that a CPLD has not the neccesary circuitry to implement this structure, could I do it on a FPGA?
Thank you in advance,
02-02-2012 09:26 AM - edited 02-02-2012 09:27 AM
"could I do it on a FPGA?"
The pin-to-pin delays are likely to be large, and you would still need to control direction somehow.
Use a QuickSwitch or proper crosspoint device. Do you hit nails in with a saw?
02-06-2012 05:48 AM
This circuit from Maxim does something like what you want for a simple interface. If you
look at the block diagram, there is a box labeled "EN CONTROL BLOCK" that controls
the various pieces of the data path drivers. This box is not well explained in the text,
but it needs to sense that a device that is being driven by the Maxim chip is trying to
drive the bus. This circuit would be very hard to reproduce in any sort of programmable