UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Visitor ksg03034
Visitor
914 Views
Registered: ‎06-06-2018

Spartan-3e bidirectional differential I/O with diff_term

I am attempting to implement a bidirectional differential I/O in a Spartan-3e with the diff_term active.  I'm using ISE_DS version 14.7/a.

I have tried a lot of different configurations:

- IOBUFDS, as well as paired IBUFDS/OBUFTDS with LVDS_25 IOSTANDARD - the tools claim they can't support bidirectional LVDS (seems odd, the resources are there and other families, e.g. V5, allow it).

- IOBUFDS with BLVDS_25 IOSTANDARD - works, but won't allow the diff_term, even when inserted using FPGA Editor (Bitgen complains with an incompatibility code of 28 - there's a useful error message :-).

- Paired IBUFDS/OBUFTDS with DIFF_SSTL2_I IOSTANDARD, works but again, won't allow the diff_term.  I had high hopes for this one.  Oddlly, I can specify a pullup and pulldown on the individual I/Os, and they show up in FPGA Editor and Bitgen is happy. But with or without the Pullup/Pulldown, Bitgen will not accept the diff_term.

To me, this smells of a tool bug, since I can't imagine an actual incompatibility between a legitimate bidirectional differential I/O and the differential termination intended for that receiver.  That said, I've been wrong before - anyone out there have information to share?

 

Tags (2)
0 Kudos
3 Replies
Xilinx Employee
Xilinx Employee
861 Views
Registered: ‎06-30-2010

Re: Spartan-3e bidirectional differential I/O with diff_term

can you share the errors you are getting?

from memory, some IOs do not support bidirectional so that could be the issue you have them LOc'ed to an incompatible pin.
-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
0 Kudos
Moderator
Moderator
845 Views
Registered: ‎07-23-2015

Re: Spartan-3e bidirectional differential I/O with diff_term

@ksg03034 


I am attempting to implement a bidirectional differential I/O in a Spartan-3e with the diff_term active.  I'm using ISE_DS version 14.7/a.

 


Unfortunately you can't. DIFF_TERM is only supported for  LVDS, mini-LVDS, and RSDS in Spartan-3e and they don't support Bidirectional signalling. Page#17 of DS312

 

BLVDS_25 supports Bidirectional, however no DIFF_TERM support. 

Your best bet is to use BLVDS_25 with external termination. 


- IOBUFDS, as well as paired IBUFDS/OBUFTDS with LVDS_25 IOSTANDARD - the tools claim they can't support bidirectional LVDS (seems odd, the resources are there and other families, e.g. V5, allow it). 


Even V5 has no support for LVDS in Bidirectional mode :) Check Page#295 from UG190 which shows LVDS has only IBUFDS/OBUFDS as Primitive support. There is no IOBUFDS. 

- Giri
--------------------------------------------------------------------------------------------------------------------
There's no such thing as a stupid question. Feel free to ask but do a quick search to make sure it ain't already answered.
Keep conversing, give Kudos and Accept Solution when you get one.
-----------------------------------------------------------------------------------------------------------------------
0 Kudos
Visitor ksg03034
Visitor
839 Views
Registered: ‎06-06-2018

Re: Spartan-3e bidirectional differential I/O with diff_term

Thanks for the responses!

 

JHESLIP, the pins are full-function pins, they work fine for LVDS in or out, just not both.  The errors I get vary depending on which protocols I try to use, but generally complain that the IOSTANDARD is not compatible with bidirectional I/Os.  Note that BLVDS does not give any errors, and would normally be my choice, but I am working with an existing board that does not have the required 165/140/165 resistor network.  As far as I can tell, none of the 2.5V differential protocols are compatible with DIFF_TERM, at least as far as the tools are concerned.

 

GNARAHAR, I am aware that the tools don't want to let me do it, I was hoping for a workaround, since I'm fairly certain there is no physical reason I couldn't have an OBUFTDS with MINI_LVDS_25 and an IBUDS with LVDS and DIFF_TERM.  On V5, I was able to instantiate an IBUFDS with LVDS_25 and DIFF_TERM, as well as an OBUFTDS with LVDSEXT_25 and go through the build all the way through Bitgen.  The only issue was that the tools apparently ignored the LVDSEXT attribute, FPGA Editor shows both directions as LVDS.  If I use FPGA Editor to change the IOB output property to LVDSEXT_25, Bitgen still runs, but gives a warning that this is an unsupported configuration.  I haven't actually tested the result in the lab, so I can't swear it worked (and I'm not sure how I would effectively differentiate LVDS from LVDSEXT), but I did get a .bit file.

 

0 Kudos