Forum Discussion

Jack_Lin's avatar
Jack_Lin
Icon for New Contributor rankNew Contributor
1 month ago
Solved

Bidirectional pin USB_RX with a pseudo-differential I/O standard must use the OEIN port of the node

I am trying to make a bidirectional differential line using Cyclone V.

In VHDL, I set USB_RX, USB_RXn as INOUT on the top level (they are assigned to a Differential SSTL-II 2.5 pair).  I used the ALTIOBUF in differential mode and crated this block:

COMPONENT DIFF_IO_BUF PORT
(
    DATAIN : IN STD_LOGIC;
    OE : IN STD_LOGIC;
    OE_B : IN STD_LOGIC;

    DATAIO : INOUT STD_LOGIC;
    DATAIO_B : INOUT STD_LOGIC;
    DATAOUT : OUT STD_LOGIC
);
END COMPONENT;

It's connected as following:

DIFF_RX : DIFF_IO_BUF
PORT MAP
(
    DATAIN => 'Z',
    OE => '0',
    OE_B => '1',

    DATAIO => USB_RX,
    DATAIO_B => USB_RXn,
    DATAOUT => iUSB_RX_I
);

iUSB_RX_I goes to internal logic.

Why am I getting this error?  I don't see any OEIN port.  I assume it means the OE and OE_B ports, but they are already connected.  How can I fix this error?

The whole error msg:
Error (21168): Bidirectional pin USB_RX with a pseudo-differential I/O standard must use the OEIN port of the node DIFF_IO_BUF:DIFF_RX|DIFF_IO_BUF_iobuf_bidir_iup:DIFF_IO_BUF_iobuf_bidir_iup_component|wire_pseudo_diffa_o

Thank you!

  • Hi Jack,

    not quite clear what you want to achieve. USB (both FS and HS) is a half-duplex protocol and involves push-pull drivers with enable signal.

    Regards Frank

6 Replies

  • FvM's avatar
    FvM
    Icon for Super Contributor rankSuper Contributor

    Hi Jack,

    not quite clear what you want to achieve. USB (both FS and HS) is a half-duplex protocol and involves push-pull drivers with enable signal.

    Regards Frank

  • FvM's avatar
    FvM
    Icon for Super Contributor rankSuper Contributor

    I see same "must use the OEIN port" error when OE is stuck to '0'. OE_B isn't used at all  when driving a differential I/O standard.

    • Jack_Lin's avatar
      Jack_Lin
      Icon for New Contributor rankNew Contributor

      Thanks.  My original idea was to build it up and set it to input/output first to make sure that it compiles before I add more logic to change the directions.  But it seems like the reason I am getting the errors is because the differential pins on Cyclone V are not bidirectional and can only get set to either input or output.  Will need to check for a different device.

  • FvM's avatar
    FvM
    Icon for Super Contributor rankSuper Contributor

    Hi Jack,

    your instantiation of DIFF_IO_BUF makes no sense. OE pins must be driven by a signal that switches direction dynamically.

    Regards Frank