nexus: Add other IODDR modes

Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
gatecat 2026-07-18 14:11:24 +02:00
parent 02d57cfaa1
commit 5eddc52881
2 changed files with 39 additions and 31 deletions

View File

@ -1303,30 +1303,30 @@ 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;
for (int gear : {2, 4, 5}) {
IdString otype = ctx->idf("ODDRX%d", gear);
iol_rules[otype].new_type = id_IOLOGIC;
iol_rules[otype].set_params.emplace_back(id_MODE, std::string("ODDRXN"));
iol_rules[otype].set_params.emplace_back(ctx->id("ODDRXN.DDRMODE"), otype.str(ctx));
iol_rules[otype].port_xform[id_ECLK] = id_ECLK;
iol_rules[otype].port_xform[id_SCLK] = id_SCLKOUT;
iol_rules[otype].port_xform[id_RST] = id_LSROUT;
iol_rules[otype].port_xform[id_Q] = id_DOUT;
for (int i = 0; i < 2 * gear; i++)
iol_rules[otype].port_xform[ctx->idf("D%d", i)] = ctx->idf("TXDATA%d", i);
iol_rules[id_IDDRX2].new_type = id_IOLOGIC;
iol_rules[id_IDDRX2].set_params.emplace_back(id_MODE, std::string("IDDRXN"));
iol_rules[id_IDDRX2].set_params.emplace_back(ctx->id("IDDRXN.DDRMODE"), std::string("IDDRX2"));
iol_rules[id_IDDRX2].port_xform[id_ECLK] = id_ECLK;
iol_rules[id_IDDRX2].port_xform[id_SCLK] = id_SCLKIN;
iol_rules[id_IDDRX2].port_xform[id_RST] = id_LSRIN;
iol_rules[id_IDDRX2].port_xform[id_ALIGNWD] = id_WORDALIGN;
iol_rules[id_IDDRX2].port_xform[id_D] = id_DI;
iol_rules[id_IDDRX2].port_xform[id_Q0] = id_RXDATA6;
iol_rules[id_IDDRX2].port_xform[id_Q1] = id_RXDATA7;
iol_rules[id_IDDRX2].port_xform[id_Q2] = id_RXDATA8;
iol_rules[id_IDDRX2].port_xform[id_Q3] = id_RXDATA9;
IdString itype = ctx->idf("IDDRX%d", gear);
iol_rules[itype].new_type = id_IOLOGIC;
iol_rules[itype].set_params.emplace_back(id_MODE, std::string("IDDRXN"));
iol_rules[itype].set_params.emplace_back(ctx->id("IDDRXN.DDRMODE"), itype.str(ctx));
iol_rules[itype].port_xform[id_ECLK] = id_ECLK;
iol_rules[itype].port_xform[id_SCLK] = id_SCLKIN;
iol_rules[itype].port_xform[id_RST] = id_LSRIN;
iol_rules[itype].port_xform[id_ALIGNWD] = id_WORDALIGN;
iol_rules[itype].port_xform[id_D] = id_DI;
for (int i = 0; i < 2 * gear; i++)
iol_rules[itype].port_xform[ctx->idf("Q%d", i)] = ctx->idf("RXDATA%d", (10 - 2 * gear) + i);
}
generic_xform(iol_rules, true);
}

View File

@ -230,15 +230,23 @@ 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_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_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_WORDALIGN, PINSTYLE_CIB}
{id_WORDALIGN, PINSTYLE_CIB}
}},
{id_CONFIG_MULTIBOOT_CORE,