himbaechel/xilinx: do not set OUT_DIFF for TMDS_33 outputs

TMDS_33 differential outputs use the Y0 current-mode driver alone
(TMDS_33.OUT plus DRIVE.I_FIXED, with the Y1 pad set IN_ONLY). Vivado
bitstreams for the same design do not set the tile OUT_DIFF feature
for TMDS pairs, and setting it disables the driver stage entirely: on
hardware the attached HDMI monitor reports no transmitter present.

Emit OUT_DIFF only for non-TMDS differential outputs (e.g. LVDS_25),
matching Vivado.

Hardware-verified on xc7a100t (QMTech Wukong): 640x480 DVI output via
an onboard HDMI connector, dead without this change, working with it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joris van Zwieten 2026-07-30 15:37:16 +02:00
parent 68c1acd80a
commit 0690ca7f16
1 changed files with 5 additions and 1 deletions

View File

@ -1004,7 +1004,11 @@ struct FasmBackend
else
inv = uarch->get_site_bel(pad_bel_site, ctx->id("IOB33S.O_ININV"));
if (inv != BelId() && ctx->getBoundBelCell(inv) != nullptr)
// TMDS_33 outputs are driven by the Y0 current-mode driver alone
// (TMDS_33.OUT + DRIVE.I_FIXED, Y1 IN_ONLY); Vivado does not set
// OUT_DIFF for them and setting it disables the driver stage
// (hardware-verified: monitor reports "no transmitter present").
if (inv != BelId() && ctx->getBoundBelCell(inv) != nullptr && !is_tmds33)
write_bit("OUT_DIFF");
if (is_stepdown && !is_sing)