RTS and CTS match the schematic, but the direction is incorrect:
CTS is output, RTS is input. Fix by setting role=dce.
Ref. https://www.intel.com/content/dam/altera-www/global/en_US/portal/dsn/42/doc-us-dsnbk-42-
5804152209-de0-user-manual.pdf
UARTResource(0,
rx="U22", tx="U21", rts="V22", cts="V21",
- attrs=Attrs(io_standard="3.3-V LVTTL")),
+ attrs=Attrs(io_standard="3.3-V LVTTL"),
+ role="dce"),
Resource("display_hd44780", 0,
Subsignal("e", Pins("E21", dir="o")),