nexus: Add a mapping for ODDRX2

Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
gatecat 2026-07-18 13:35:13 +02:00
parent ab65039755
commit 452e75bad6
4 changed files with 103 additions and 9 deletions

View File

@ -536,18 +536,92 @@ X(ECLKOUT)
X(IDDRX1)
X(ODDRX1)
X(IDDRX2)
X(IDDRX2DQ)
X(ODDRX2)
X(ODDRX2DQS)
X(ODDRX2DQ)
X(IDDRX4)
X(IDDRX4DQ)
X(ODDRX4)
X(ODDRX4DQ)
X(ODDRX4DQS)
X(IDDRX5)
X(ODDRX5)
X(OSHX2)
X(OSHX4)
X(TSHX2DQ)
X(TSHX2DQS)
X(TSHX4DQ)
X(TSHX4DQS)
X(TXDATA0)
X(TXDATA1)
X(TXDATA2)
X(TXDATA3)
X(TXDATA4)
X(TXDATA5)
X(TXDATA6)
X(TXDATA7)
X(TXDATA8)
X(TXDATA9)
X(TSDATA0)
X(TSDATA1)
X(TSDATA2)
X(TSDATA3)
X(RXDATA0)
X(RXDATA1)
X(RXDATA2)
X(RXDATA3)
X(RXDATA4)
X(RXDATA5)
X(RXDATA6)
X(RXDATA7)
X(RXDATA8)
X(RXDATA9)
X(INDD)
X(DOUT)
X(TOUT)
X(Q0)
X(Q1)
X(Q2)
X(Q3)
X(Q4)
X(Q5)
X(Q6)
X(Q7)
X(Q8)
X(Q9)
X(D2)
X(D3)
X(D4)
X(D5)
X(D6)
X(D7)
X(D8)
X(D9)
X(T0)
X(T1)
X(T2)
X(T3)
X(SCLK)
X(ALIGNWD)
X(DQSR90)
X(DQSW)
X(DQSW270)
X(RDPNTR0)
X(RDPNTR1)
X(RDPNTR2)
X(WRPNTR0)
X(WRPNTR1)
X(WRPNTR2)
X(LOCAL_VCC)
X(DCS)

View File

@ -681,6 +681,13 @@ struct NexusFasmWriter
write_enum(cell, "INMUX");
write_enum(cell, "OUTMUX");
if (cell->type == id_IOLOGIC) {
write_enum(cell, "IDDRXN.DDRMODE");
write_enum(cell, "ODDRXN.DDRMODE");
write_enum(cell, "MODDRXN.DDRMODE");
write_enum(cell, "MTDDRXN.DDRMODE");
}
write_cell_muxes(cell);
pop();
}

View File

@ -1303,6 +1303,18 @@ struct NexusPacker
iol_rules[id_ODDRX1].port_xform[id_D0] = id_TXDATA0;
iol_rules[id_ODDRX1].port_xform[id_D1] = id_TXDATA1;
iol_rules[id_ODDRX2].new_type = id_IOLOGIC;
iol_rules[id_ODDRX2].set_params.emplace_back(id_MODE, std::string("ODDRXN"));
iol_rules[id_ODDRX2].set_params.emplace_back(ctx->id("ODDRXN.DDRMODE"), std::string("ODDRX2"));
iol_rules[id_ODDRX2].port_xform[id_ECLK] = id_ECLK;
iol_rules[id_ODDRX2].port_xform[id_SCLK] = id_SCLKOUT;
iol_rules[id_ODDRX2].port_xform[id_RST] = id_LSROUT;
iol_rules[id_ODDRX2].port_xform[id_Q] = id_DOUT;
iol_rules[id_ODDRX2].port_xform[id_D0] = id_TXDATA0;
iol_rules[id_ODDRX2].port_xform[id_D1] = id_TXDATA1;
iol_rules[id_ODDRX2].port_xform[id_D2] = id_TXDATA2;
iol_rules[id_ODDRX2].port_xform[id_D3] = id_TXDATA3;
generic_xform(iol_rules, true);
}

View File

@ -231,15 +231,16 @@ static const dict<IdString, Arch::CellPinsData> base_cell_pin_data = {
}},
{id_IOLOGIC,
{
{id_SCLKIN, PINSTYLE_IOL_CLK},
{id_SCLKOUT, PINSTYLE_IOL_CLK},
{id_LSRIN, PINSTYLE_IOL_CELSR},
{id_LSROUT, PINSTYLE_IOL_CELSR},
{id_CEIN, PINSTYLE_IOL_CELSR},
{id_CEOUT, PINSTYLE_IOL_CELSR},
{id_TXDATA0, PINSTYLE_CIB},
{id_TXDATA1, PINSTYLE_CIB},
{id_TSDATA0, PINSTYLE_CIB},
{id_SCLKIN, PINSTYLE_IOL_CLK}, {id_SCLKOUT, PINSTYLE_IOL_CLK}, {id_LSRIN, PINSTYLE_IOL_CELSR},
{id_LSROUT, PINSTYLE_IOL_CELSR}, {id_CEIN, PINSTYLE_IOL_CELSR}, {id_CEOUT, PINSTYLE_IOL_CELSR},
{id_TXDATA0, PINSTYLE_CIB}, {id_TXDATA1, PINSTYLE_CIB}, {id_TXDATA2, PINSTYLE_CIB},
{id_TXDATA3, PINSTYLE_CIB}, {id_TXDATA4, PINSTYLE_CIB}, {id_TXDATA5, PINSTYLE_CIB},
{id_TXDATA6, PINSTYLE_CIB}, {id_TXDATA7, PINSTYLE_CIB}, {id_TXDATA8, PINSTYLE_CIB},
{id_TXDATA9, PINSTYLE_CIB},
{id_TSDATA0, PINSTYLE_CIB}, {id_TSDATA1, PINSTYLE_CIB}, {id_TSDATA2, PINSTYLE_CIB},
{id_TSDATA3, PINSTYLE_CIB},
}},
{id_CONFIG_MULTIBOOT_CORE,
{