Forum Discussion

Robert_H_Intel's avatar
Robert_H_Intel
Icon for New Contributor rankNew Contributor
4 years ago

IO_OBUF polarity not matching RTL

I am working on a design using an Agilex F-series part (AGFB014R24B2E3V) and am having issues with tri-stated outputs. The RTL in question is:

assign TRIG[0] = (lb_enable_dd) ? clk_fast : 1'bz;

When I test my board, I found it to be inverted. If I set lb_enable_dd high, it was hi-z, low gave me clk_fast on my TRIG[0] output. When I opened the Technology Map View (post-fit) I noticed the IO_OBUF primitive had a inverter on the OE input that didn't seem to be compensated for in compile.

Things I have tried:

- Tested both 21.2 and 21.3 versions of the tools.

- Switching to a non-tristating output. This works as expected, no polarity issues.

assign TRIG[0] = (lb_enable_dd) ? clk_fast : 1'b0;

- Tried generating the buffer using the GPIO Intel FPGA IP core from the library.

trig_out trig_out (
.din ({lb_rxclk_det[0], clk_fast, lb_enable_dd, clk_fast}),
.oe ({4{lb_enable_dd}}),
.pad_out (TRIG[3:0])
);

Same inverter present on the IO_OBUF. Even when I open the datasheet for that IP core it says OE should be active high.

Thoughts?

24 Replies