nexus: EBR fixes
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
parent
27ecaf3e88
commit
e8e6316f88
@ -796,6 +796,7 @@ enum CellPinStyle
|
||||
PINSTYLE_PU = 0x4022, // signals that float high and default high
|
||||
PINSTYLE_T = 0x4027, // PIO 'T' signal
|
||||
|
||||
PINSTYLE_ADLSB = 0x4017, // special case of the EBR address MSBs
|
||||
PINSTYLE_INV_PD = 0x0017, // invertible, pull down by default
|
||||
PINSTYLE_INV_PU = 0x4027, // invertible, pull up by default
|
||||
|
||||
|
@ -203,3 +203,5 @@ X(CLKR)
|
||||
X(CEW)
|
||||
X(CER)
|
||||
X(RST)
|
||||
|
||||
X(WEAMUX)
|
||||
|
@ -388,6 +388,7 @@ struct NexusFasmWriter
|
||||
std::string mode = str_or_default(cell->params, id_MODE, "");
|
||||
|
||||
write_bit(stringf("MODE.%s_MODE", mode.c_str()));
|
||||
write_enum(cell, "INIT_DATA", "STATIC");
|
||||
write_enum(cell, "GSR", "DISABLED");
|
||||
|
||||
write_int_vector("WID[10:0]", wid, 11);
|
||||
@ -395,8 +396,8 @@ struct NexusFasmWriter
|
||||
push(stringf("%s_MODE", mode.c_str()));
|
||||
|
||||
if (mode == "DP16K") {
|
||||
write_int_vector_param(cell, "CSDECODE_A", 7, 3);
|
||||
write_int_vector_param(cell, "CSDECODE_B", 7, 3);
|
||||
write_int_vector_param(cell, "CSDECODE_A", 7, 3, true);
|
||||
write_int_vector_param(cell, "CSDECODE_B", 7, 3, true);
|
||||
write_enum(cell, "ASYNC_RST_RELEASE_A");
|
||||
write_enum(cell, "ASYNC_RST_RELEASE_B");
|
||||
write_enum(cell, "DATA_WIDTH_A");
|
||||
@ -406,8 +407,8 @@ struct NexusFasmWriter
|
||||
write_enum(cell, "RESETMODE_A");
|
||||
write_enum(cell, "RESETMODE_B");
|
||||
} else if (mode == "PDP16K" || mode == "PDPSC16K") {
|
||||
write_int_vector_param(cell, "CSDECODE_W", 7, 3);
|
||||
write_int_vector_param(cell, "CSDECODE_R", 7, 3);
|
||||
write_int_vector_param(cell, "CSDECODE_W", 7, 3, true);
|
||||
write_int_vector_param(cell, "CSDECODE_R", 7, 3, true);
|
||||
write_enum(cell, "ASYNC_RST_RELEASE");
|
||||
write_enum(cell, "DATA_WIDTH_W");
|
||||
write_enum(cell, "DATA_WIDTH_R");
|
||||
|
@ -1023,6 +1023,7 @@ struct NexusPacker
|
||||
// Pseudo dual port
|
||||
bram_rules[id_PDP16K_MODE].new_type = id_OXIDE_EBR;
|
||||
bram_rules[id_PDP16K_MODE].set_params.emplace_back(id_MODE, std::string("PDP16K"));
|
||||
bram_rules[id_PDP16K_MODE].set_params.emplace_back(id_WEAMUX, std::string("1"));
|
||||
bram_rules[id_PDP16K_MODE].parse_params.emplace_back(id_CSDECODE_R, id_CSDECODE_R, 3, 7);
|
||||
bram_rules[id_PDP16K_MODE].parse_params.emplace_back(id_CSDECODE_W, id_CSDECODE_W, 3, 7);
|
||||
bram_rules[id_PDP16K_MODE].port_xform[id_CLKW] = id_CLKA;
|
||||
@ -1043,6 +1044,7 @@ struct NexusPacker
|
||||
bram_rules[id_PDPSC16K_MODE] = bram_rules[id_PDP16K_MODE];
|
||||
bram_rules[id_PDPSC16K_MODE].set_params.clear();
|
||||
bram_rules[id_PDPSC16K_MODE].set_params.emplace_back(id_MODE, std::string("PDPSC16K"));
|
||||
bram_rules[id_PDPSC16K_MODE].set_params.emplace_back(id_WEAMUX, std::string("1"));
|
||||
bram_rules[id_PDPSC16K_MODE].port_multixform[id_CLK] = {id_CLKA, id_CLKB};
|
||||
|
||||
log_info("Packing BRAM...\n");
|
||||
|
@ -64,14 +64,13 @@ static const std::unordered_map<IdString, Arch::CellPinsData> base_cell_pin_data
|
||||
{id_B, PINSTYLE_DEDI},
|
||||
{{}, PINSTYLE_PU},
|
||||
}},
|
||||
{id_OXIDE_EBR, {{id_CLKA, PINSTYLE_CLK}, {id_CLKB, PINSTYLE_CLK}, {id_CEA, PINSTYLE_CE},
|
||||
{id_CEB, PINSTYLE_CE}, {id_CSA0, PINSTYLE_PU}, {id_CSA1, PINSTYLE_PU},
|
||||
{id_CSA2, PINSTYLE_PU}, {id_CSB0, PINSTYLE_PU}, {id_CSB1, PINSTYLE_PU},
|
||||
{id_CSB2, PINSTYLE_PU}, {id_ADA0, PINSTYLE_INV_PD}, {id_ADA1, PINSTYLE_INV_PD},
|
||||
{id_ADA2, PINSTYLE_INV_PD}, {id_ADA2, PINSTYLE_INV_PD}, {id_ADA3, PINSTYLE_INV_PD},
|
||||
{id_ADB0, PINSTYLE_INV_PD}, {id_ADB1, PINSTYLE_INV_PD}, {id_WEA, PINSTYLE_INV_PD},
|
||||
{id_WEB, PINSTYLE_INV_PD}, {id_RSTA, PINSTYLE_INV_PD}, {id_RSTB, PINSTYLE_INV_PD},
|
||||
{{}, PINSTYLE_CIB}}},
|
||||
{id_OXIDE_EBR,
|
||||
{{id_CLKA, PINSTYLE_CLK}, {id_CLKB, PINSTYLE_CLK}, {id_CEA, PINSTYLE_CE}, {id_CEB, PINSTYLE_CE},
|
||||
{id_CSA0, PINSTYLE_PU}, {id_CSA1, PINSTYLE_PU}, {id_CSA2, PINSTYLE_PU}, {id_CSB0, PINSTYLE_PU},
|
||||
{id_CSB1, PINSTYLE_PU}, {id_CSB2, PINSTYLE_PU}, {id_ADA0, PINSTYLE_ADLSB}, {id_ADA1, PINSTYLE_ADLSB},
|
||||
{id_ADA2, PINSTYLE_ADLSB}, {id_ADA2, PINSTYLE_ADLSB}, {id_ADA3, PINSTYLE_ADLSB}, {id_ADB0, PINSTYLE_ADLSB},
|
||||
{id_ADB1, PINSTYLE_ADLSB}, {id_WEA, PINSTYLE_INV_PD}, {id_WEB, PINSTYLE_INV_PD}, {id_RSTA, PINSTYLE_INV_PD},
|
||||
{id_RSTB, PINSTYLE_INV_PD}, {{}, PINSTYLE_CIB}}},
|
||||
{id_OSC_CORE,
|
||||
{
|
||||
{id_HFOUTEN, PINSTYLE_PU},
|
||||
|
Loading…
Reference in New Issue
Block a user