Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
21611 Discussions

Bidirectional IOs in FPGA

Altera_Forum
Honored Contributor II
1,559 Views

Hi, 

 

In my project, I have 2 bidirectional IO buses of 32-bit width. I need to connect both of them together for 2-way data transfer. I've tried two options in VHDL: 

 

bus1 <= bus2  

 

This was mentioned in the help section of Quartus II. It mentions that we dont need to use any control signals for the direction of the IO. The tool will automatically handle this and effect the bidir transfer. I tried this option and it seems to work. The only prob is that data transfer one way is fast while the other way is slow with lots of delay ~20ns. This is not acceptable for me as I need the data at the appropriate time for latching it. 

 

I then changed some options in the tool (for max speed optimization) and now the above code snippet yields a warning stating that the transfer is only one way. Now I had to use the WE# signal to control the data flow: 

 

bus1 <= bus2 when we# = '0' else (others => 'Z'); (write transaction) 

bus2 <= bus1 when we# = '1' else (others => 'Z'); (read transaction) 

 

This synthesized without warnings or errors but the data transfer does not take place. 

 

Can anyone help me regarding this bidir data IO? I need this very urgently to finish my project. 

 

Thx
0 Kudos
4 Replies
Altera_Forum
Honored Contributor II
853 Views

It's unclear from your question which signals are pins and which are internal. Can you please clarify the design structure?

0 Kudos
Altera_Forum
Honored Contributor II
853 Views

well, the BUS1 and BUS2 are bidir IO pins. There is no other logic in between. I just need to connect them both to effect 2-way data transfer without much delay (~10ns). The WE# is also an input pin. Basically I'm trying to interface a DSP processor's SDRAM controller with a Micron SDRAM. The bidir IO are the data buses. While the other pins are the control pins. The problem lies with the data bus. I need to connect the data bus of the DSP to the SDRAM data via the FPGA. So the FPGA will have two sets of bidir IO pins - One for the DSP side and other for the SDRAM side.

0 Kudos
Altera_Forum
Honored Contributor II
853 Views

O.K. I see. Your designing something like a 245 bidirectional driver. Then I actually don't understand the reason for the delay. It must have a particulary reason from your design, e. g. available routing resources. Or the routing is influenced by additional logic connected to the bus signals. Can you verify in RTL respectively Technology Map Viewer that the compiler understands your logic right?

0 Kudos
Altera_Forum
Honored Contributor II
853 Views

Hello, 

 

additionally, I think that it's physically impossible to achieve the function without a direction signal. I overlooked this point at first sight. Please notice, that physically nothing but a BIDIR primitive can be instantiated at each pin. It has an OE input, that must be controlled somehow. How can the logic determine data direction without a control signal? 

 

Regards, 

Frank
0 Kudos
Reply