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?