clangformat
This commit is contained in:
parent
7ac3d0d901
commit
8c19e6f83a
@ -42,8 +42,10 @@ void MainWindow::newContext(Context *ctx)
|
|||||||
|
|
||||||
void MainWindow::createMenu() {}
|
void MainWindow::createMenu() {}
|
||||||
|
|
||||||
void MainWindow::new_proj() {
|
void MainWindow::new_proj()
|
||||||
QMessageBox::critical(0, "Error", "Creating a new project not supported in Viaduct mode, please re-start from command line.");
|
{
|
||||||
|
QMessageBox::critical(0, "Error",
|
||||||
|
"Creating a new project not supported in Viaduct mode, please re-start from command line.");
|
||||||
std::exit(1);
|
std::exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -631,7 +631,8 @@ std::vector<std::pair<IdString, std::string>> Arch::getWireAttrs(WireId wire) co
|
|||||||
bool Arch::is_spine_row(int row) const
|
bool Arch::is_spine_row(int row) const
|
||||||
{
|
{
|
||||||
for (auto &spine : chip_info->spines) {
|
for (auto &spine : chip_info->spines) {
|
||||||
if (row==spine.row) return true;
|
if (row == spine.row)
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -875,11 +875,11 @@ struct Arch : BaseArch<ArchRanges>
|
|||||||
int8_t get_pip_class(PipId pip) const { return tile_info(pip)->pip_data[pip.index].pip_type; }
|
int8_t get_pip_class(PipId pip) const { return tile_info(pip)->pip_data[pip.index].pip_type; }
|
||||||
|
|
||||||
BelId get_package_pin_bel(const std::string &pin) const;
|
BelId get_package_pin_bel(const std::string &pin) const;
|
||||||
//std::string get_bel_package_pin(BelId bel) const;
|
// std::string get_bel_package_pin(BelId bel) const;
|
||||||
//int get_pio_bel_bank(BelId bel) const;
|
// int get_pio_bel_bank(BelId bel) const;
|
||||||
// For getting GCLK, PLL, Vref, etc, pins
|
// For getting GCLK, PLL, Vref, etc, pins
|
||||||
//std::string get_pio_function_name(BelId bel) const;
|
// std::string get_pio_function_name(BelId bel) const;
|
||||||
//BelId get_pio_by_function_name(const std::string &name) const;
|
// BelId get_pio_by_function_name(const std::string &name) const;
|
||||||
|
|
||||||
PortType getBelPinType(BelId bel, IdString pin) const override;
|
PortType getBelPinType(BelId bel, IdString pin) const override;
|
||||||
|
|
||||||
@ -903,7 +903,7 @@ struct Arch : BaseArch<ArchRanges>
|
|||||||
float getDelayNS(delay_t v) const override { return v; }
|
float getDelayNS(delay_t v) const override { return v; }
|
||||||
delay_t getDelayFromNS(float ns) const override { return ns; }
|
delay_t getDelayFromNS(float ns) const override { return ns; }
|
||||||
uint32_t getDelayChecksum(delay_t v) const override { return v; }
|
uint32_t getDelayChecksum(delay_t v) const override { return v; }
|
||||||
//bool getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const override;
|
// bool getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const override;
|
||||||
|
|
||||||
// -------------------------------------------------
|
// -------------------------------------------------
|
||||||
|
|
||||||
@ -975,7 +975,6 @@ struct Arch : BaseArch<ArchRanges>
|
|||||||
mutable std::vector<TileStatus> tile_status;
|
mutable std::vector<TileStatus> tile_status;
|
||||||
|
|
||||||
// -------------------------------------------------
|
// -------------------------------------------------
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
@ -149,7 +149,8 @@ bool Arch::slices_compatible(LogicTileStatus *lts) const
|
|||||||
if (ff != nullptr) {
|
if (ff != nullptr) {
|
||||||
if (found_global_dpram) {
|
if (found_global_dpram) {
|
||||||
// Do not allow SLICEC to have FF if there is already RAMW in it
|
// Do not allow SLICEC to have FF if there is already RAMW in it
|
||||||
if (i==4 || i==5) return false;
|
if (i == 4 || i == 5)
|
||||||
|
return false;
|
||||||
CHECK_EQUAL(bool(ff->ffInfo.flags & ArchCellInfo::FF_CLKINV), global_clkinv);
|
CHECK_EQUAL(bool(ff->ffInfo.flags & ArchCellInfo::FF_CLKINV), global_clkinv);
|
||||||
CHECK_EQUAL(bool(ff->ffInfo.flags & ArchCellInfo::FF_LSRINV), global_lsrinv);
|
CHECK_EQUAL(bool(ff->ffInfo.flags & ArchCellInfo::FF_LSRINV), global_lsrinv);
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,6 @@ void config_empty_lcmxo3_2100(ChipConfig &cc)
|
|||||||
cc.tiles["PT4:CFG0"].add_unknown(5, 32);
|
cc.tiles["PT4:CFG0"].add_unknown(5, 32);
|
||||||
cc.tiles["PT4:CFG0"].add_unknown(5, 36);
|
cc.tiles["PT4:CFG0"].add_unknown(5, 36);
|
||||||
|
|
||||||
|
|
||||||
cc.tiles["PT7:CFG3"].add_unknown(5, 18);
|
cc.tiles["PT7:CFG3"].add_unknown(5, 18);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,13 +108,13 @@ struct MachXO2Bitgen
|
|||||||
std::string pio_name = "W1_" + basename;
|
std::string pio_name = "W1_" + basename;
|
||||||
if (ctx->verbose)
|
if (ctx->verbose)
|
||||||
log_info("PIO wire %s was adjusted by W1 to form Trellis name %s.\n", ctx->nameOfWire(wire),
|
log_info("PIO wire %s was adjusted by W1 to form Trellis name %s.\n", ctx->nameOfWire(wire),
|
||||||
pio_name.c_str());
|
pio_name.c_str());
|
||||||
return pio_name;
|
return pio_name;
|
||||||
} else if (wire.location.x == max_col) {
|
} else if (wire.location.x == max_col) {
|
||||||
std::string pio_name = "E1_" + basename;
|
std::string pio_name = "E1_" + basename;
|
||||||
if (ctx->verbose)
|
if (ctx->verbose)
|
||||||
log_info("PIO wire %s was adjusted by E1 to form Trellis name %s.\n", ctx->nameOfWire(wire),
|
log_info("PIO wire %s was adjusted by E1 to form Trellis name %s.\n", ctx->nameOfWire(wire),
|
||||||
pio_name.c_str());
|
pio_name.c_str());
|
||||||
return pio_name;
|
return pio_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,16 +206,13 @@ struct MachXO2Bitgen
|
|||||||
{
|
{
|
||||||
static const std::set<std::string> pio_t = {"PIC_T0", "PIC_T0_256", "PIC_TS0"};
|
static const std::set<std::string> pio_t = {"PIC_T0", "PIC_T0_256", "PIC_TS0"};
|
||||||
static const std::set<std::string> pio_b = {"PIC_B0", "PIC_B0_256", "PIC_BS0_256"};
|
static const std::set<std::string> pio_b = {"PIC_B0", "PIC_B0_256", "PIC_BS0_256"};
|
||||||
static const std::set<std::string> pio_l = {"PIC_L0", "PIC_L1", "PIC_L2", "PIC_L3", "PIC_LS0",
|
static const std::set<std::string> pio_l = {"PIC_L0", "PIC_L1", "PIC_L2", "PIC_L3",
|
||||||
"PIC_L0_VREF3", "PIC_L0_VREF4", "PIC_L0_VREF5",
|
"PIC_LS0", "PIC_L0_VREF3", "PIC_L0_VREF4", "PIC_L0_VREF5",
|
||||||
"PIC_L1_VREF3", "PIC_L1_VREF4", "PIC_L1_VREF5",
|
"PIC_L1_VREF3", "PIC_L1_VREF4", "PIC_L1_VREF5", "PIC_L2_VREF4",
|
||||||
"PIC_L2_VREF4", "PIC_L2_VREF5",
|
"PIC_L2_VREF5", "PIC_L3_VREF4", "PIC_L3_VREF5", "LLC0PIC",
|
||||||
"PIC_L3_VREF4", "PIC_L3_VREF5",
|
"LLC1PIC", "LLC0PIC_VREF3", "LLC3PIC_VREF3", "ULC3PIC"};
|
||||||
"LLC0PIC", "LLC1PIC",
|
static const std::set<std::string> pio_r = {"PIC_R0", "PIC_R1", "PIC_RS0", "PIC_R0_256", "PIC_R1_640",
|
||||||
"LLC0PIC_VREF3", "LLC3PIC_VREF3", "ULC3PIC"};
|
"PIC_RS0_256", "LRC1PIC1", "LRC1PIC2", "URC1PIC"};
|
||||||
static const std::set<std::string> pio_r = {"PIC_R0", "PIC_R1", "PIC_RS0",
|
|
||||||
"PIC_R0_256", "PIC_R1_640", "PIC_RS0_256",
|
|
||||||
"LRC1PIC1", "LRC1PIC2", "URC1PIC"};
|
|
||||||
|
|
||||||
std::string pio_name = ctx->tile_info(bel)->bel_data[bel.index].name.get();
|
std::string pio_name = ctx->tile_info(bel)->bel_data[bel.index].name.get();
|
||||||
if (bel.location.y == 0) {
|
if (bel.location.y == 0) {
|
||||||
@ -241,14 +238,17 @@ struct MachXO2Bitgen
|
|||||||
static const std::set<std::string> ebr1 = {"EBR1", "EBR1_10K"};
|
static const std::set<std::string> ebr1 = {"EBR1", "EBR1_10K"};
|
||||||
static const std::set<std::string> ebr2 = {"EBR2", "EBR2_END", "EBR2_10K", "EBR2_END_10K"};
|
static const std::set<std::string> ebr2 = {"EBR2", "EBR2_END", "EBR2_10K", "EBR2_END_10K"};
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x, ebr0));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x, ebr0));
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x+1, ebr1));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x + 1, ebr1));
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x+2, ebr2));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x + 2, ebr2));
|
||||||
static const std::set<std::string> cib_ebr0 = {"CIB_EBR0", "CIB_EBR0_10K", "CIB_EBR0_END0", "CIB_EBR0_END0_10K", "CIB_EBR0_END0_DLL3", "CIB_EBR0_END0_DLL5", "CIB_EBR0_END1", "CIB_EBR0_END2_DLL3", "CIB_EBR0_END2_DLL45"};
|
static const std::set<std::string> cib_ebr0 = {
|
||||||
|
"CIB_EBR0", "CIB_EBR0_10K", "CIB_EBR0_END0", "CIB_EBR0_END0_10K", "CIB_EBR0_END0_DLL3",
|
||||||
|
"CIB_EBR0_END0_DLL5", "CIB_EBR0_END1", "CIB_EBR0_END2_DLL3", "CIB_EBR0_END2_DLL45"};
|
||||||
static const std::set<std::string> cib_ebr1 = {"CIB_EBR1", "CIB_EBR1_10K"};
|
static const std::set<std::string> cib_ebr1 = {"CIB_EBR1", "CIB_EBR1_10K"};
|
||||||
static const std::set<std::string> cib_ebr2 = {"CIB_EBR2", "CIB_EBR2_10K", "CIB_EBR2_END0", "CIB_EBR2_END1", "CIB_EBR2_END1_10K", "CIB_EBR2_END1_SP"};
|
static const std::set<std::string> cib_ebr2 = {"CIB_EBR2", "CIB_EBR2_10K", "CIB_EBR2_END0",
|
||||||
|
"CIB_EBR2_END1", "CIB_EBR2_END1_10K", "CIB_EBR2_END1_SP"};
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x, cib_ebr0));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x, cib_ebr0));
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x+1, cib_ebr1));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x + 1, cib_ebr1));
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x+2, cib_ebr2));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y, loc.x + 2, cib_ebr2));
|
||||||
return tiles;
|
return tiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,9 +260,9 @@ struct MachXO2Bitgen
|
|||||||
Loc loc = ctx->getBelLocation(bel);
|
Loc loc = ctx->getBelLocation(bel);
|
||||||
|
|
||||||
if (name == "LPLL") {
|
if (name == "LPLL") {
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y-1, loc.x-1, "GPLL_L0"));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y - 1, loc.x - 1, "GPLL_L0"));
|
||||||
} else if (name == "RPLL") {
|
} else if (name == "RPLL") {
|
||||||
tiles.push_back(ctx->get_tile_by_type_loc(loc.y+1, loc.x-1, "GPLL_R0"));
|
tiles.push_back(ctx->get_tile_by_type_loc(loc.y + 1, loc.x - 1, "GPLL_R0"));
|
||||||
} else {
|
} else {
|
||||||
NPNR_ASSERT_FALSE_STR("bad PLL loc " + name);
|
NPNR_ASSERT_FALSE_STR("bad PLL loc " + name);
|
||||||
}
|
}
|
||||||
@ -272,7 +272,8 @@ struct MachXO2Bitgen
|
|||||||
void set_pip(ChipConfig &cc, PipId pip)
|
void set_pip(ChipConfig &cc, PipId pip)
|
||||||
{
|
{
|
||||||
std::string tile = ctx->get_pip_tilename(pip);
|
std::string tile = ctx->get_pip_tilename(pip);
|
||||||
std::string tile_type = ctx->chip_info->tiletype_names[ctx->tile_info(pip)->pip_data[pip.index].tile_type].get();
|
std::string tile_type =
|
||||||
|
ctx->chip_info->tiletype_names[ctx->tile_info(pip)->pip_data[pip.index].tile_type].get();
|
||||||
std::string source = get_trellis_wirename(pip.location, ctx->getPipSrcWire(pip));
|
std::string source = get_trellis_wirename(pip.location, ctx->getPipSrcWire(pip));
|
||||||
std::string sink = get_trellis_wirename(pip.location, ctx->getPipDstWire(pip));
|
std::string sink = get_trellis_wirename(pip.location, ctx->getPipDstWire(pip));
|
||||||
cc.tiles[tile].add_arc(sink, source);
|
cc.tiles[tile].add_arc(sink, source);
|
||||||
@ -365,7 +366,7 @@ struct MachXO2Bitgen
|
|||||||
int lut_init = int_or_default(ci->params, id_INITVAL);
|
int lut_init = int_or_default(ci->params, id_INITVAL);
|
||||||
cc.tiles[tname].add_enum(slice + ".MODE", mode);
|
cc.tiles[tname].add_enum(slice + ".MODE", mode);
|
||||||
cc.tiles[tname].add_word(slice + ".K" + lc + ".INIT",
|
cc.tiles[tname].add_word(slice + ".K" + lc + ".INIT",
|
||||||
int_to_bitvector(permute_lut(ci, used_phys_pins, lut_init), 16));
|
int_to_bitvector(permute_lut(ci, used_phys_pins, lut_init), 16));
|
||||||
if (mode == "CCU2") {
|
if (mode == "CCU2") {
|
||||||
cc.tiles[tname].add_enum(slice + ".CCU2.INJECT1_" + lc, str_or_default(ci->params, id_CCU2_INJECT1, "YES"));
|
cc.tiles[tname].add_enum(slice + ".CCU2.INJECT1_" + lc, str_or_default(ci->params, id_CCU2_INJECT1, "YES"));
|
||||||
} else {
|
} else {
|
||||||
@ -460,7 +461,7 @@ struct MachXO2Bitgen
|
|||||||
|
|
||||||
tg.config.add_word(ebr + ".WID", int_to_bitvector(int_or_default(ci->attrs, id_WID, 0), 9));
|
tg.config.add_word(ebr + ".WID", int_to_bitvector(int_or_default(ci->attrs, id_WID, 0), 9));
|
||||||
|
|
||||||
// Invert CSDECODE bits to emulate inversion muxes on CSA/CSB signals
|
// Invert CSDECODE bits to emulate inversion muxes on CSA/CSB signals
|
||||||
for (auto &port : {std::make_pair("CSA", std::ref(csd_a)), std::make_pair("CSB", std::ref(csd_b))}) {
|
for (auto &port : {std::make_pair("CSA", std::ref(csd_a)), std::make_pair("CSB", std::ref(csd_b))}) {
|
||||||
for (int bit = 0; bit < 3; bit++) {
|
for (int bit = 0; bit < 3; bit++) {
|
||||||
std::string sig = port.first + std::to_string(bit);
|
std::string sig = port.first + std::to_string(bit);
|
||||||
@ -476,7 +477,6 @@ struct MachXO2Bitgen
|
|||||||
if (!ci->ramInfo.is_pdp) {
|
if (!ci->ramInfo.is_pdp) {
|
||||||
tg.config.add_enum(ebr + ".WEAMUX", str_or_default(ci->params, id_WEAMUX, "WEA"));
|
tg.config.add_enum(ebr + ".WEAMUX", str_or_default(ci->params, id_WEAMUX, "WEA"));
|
||||||
tg.config.add_enum(ebr + ".WEBMUX", str_or_default(ci->params, id_WEBMUX, "WEB"));
|
tg.config.add_enum(ebr + ".WEBMUX", str_or_default(ci->params, id_WEBMUX, "WEB"));
|
||||||
|
|
||||||
}
|
}
|
||||||
tg.config.add_enum(ebr + ".CEAMUX", str_or_default(ci->params, id_CEAMUX, "CEA"));
|
tg.config.add_enum(ebr + ".CEAMUX", str_or_default(ci->params, id_CEAMUX, "CEA"));
|
||||||
tg.config.add_enum(ebr + ".CEBMUX", str_or_default(ci->params, id_CEBMUX, "CEB"));
|
tg.config.add_enum(ebr + ".CEBMUX", str_or_default(ci->params, id_CEBMUX, "CEB"));
|
||||||
@ -695,8 +695,8 @@ struct MachXO2Bitgen
|
|||||||
} else if (ci->type == id_EHXPLLJ) {
|
} else if (ci->type == id_EHXPLLJ) {
|
||||||
write_pll(ci);
|
write_pll(ci);
|
||||||
} else if (ci->type == id_GSR) {
|
} else if (ci->type == id_GSR) {
|
||||||
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum(
|
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum("GSR.GSRMODE",
|
||||||
"GSR.GSRMODE", str_or_default(ci->params, id_MODE, "ACTIVE_LOW"));
|
str_or_default(ci->params, id_MODE, "ACTIVE_LOW"));
|
||||||
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum("GSR.SYNCMODE",
|
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum("GSR.SYNCMODE",
|
||||||
str_or_default(ci->params, id_SYNCMODE, "ASYNC"));
|
str_or_default(ci->params, id_SYNCMODE, "ASYNC"));
|
||||||
} else if (ci->type == id_JTAGF) {
|
} else if (ci->type == id_JTAGF) {
|
||||||
@ -705,17 +705,17 @@ struct MachXO2Bitgen
|
|||||||
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum("JTAG.ER2",
|
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum("JTAG.ER2",
|
||||||
str_or_default(ci->params, id_ER2, "ENABLED"));
|
str_or_default(ci->params, id_ER2, "ENABLED"));
|
||||||
} else if (ci->type == id_TSALL) {
|
} else if (ci->type == id_TSALL) {
|
||||||
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum(
|
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum("TSALL.MODE",
|
||||||
"TSALL.MODE", str_or_default(ci->params, id_MODE, "TSALL"));
|
str_or_default(ci->params, id_MODE, "TSALL"));
|
||||||
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum(
|
cc.tiles[ctx->get_tile_by_type("CFG0")].add_enum("TSALL.TSALL",
|
||||||
"TSALL.TSALL", str_or_default(ci->params, id_TSALL, "TSALL"));
|
str_or_default(ci->params, id_TSALL, "TSALL"));
|
||||||
} else if (ci->type == id_START) {
|
} else if (ci->type == id_START) {
|
||||||
cc.tiles[ctx->get_tile_by_type("CIB_CFG0")].add_enum(
|
cc.tiles[ctx->get_tile_by_type("CIB_CFG0")].add_enum(
|
||||||
"START.STARTCLK", str_or_default(ci->params, id_STARTCLK, "STARTCLK"));
|
"START.STARTCLK", str_or_default(ci->params, id_STARTCLK, "STARTCLK"));
|
||||||
} else if (ci->type == id_CLKDIVC) {
|
} else if (ci->type == id_CLKDIVC) {
|
||||||
Loc loc = ctx->getBelLocation(ci->bel);
|
Loc loc = ctx->getBelLocation(ci->bel);
|
||||||
bool t = loc.y < 2;
|
bool t = loc.y < 2;
|
||||||
std::string clkdiv = (t ? "T": "B") + std::string("CLKDIV") + std::to_string(loc.z);
|
std::string clkdiv = (t ? "T" : "B") + std::string("CLKDIV") + std::to_string(loc.z);
|
||||||
std::string tile = ctx->get_tile_by_type(t ? "PIC_T_DUMMY_VIQ" : "PIC_B_DUMMY_VIQ_VREF");
|
std::string tile = ctx->get_tile_by_type(t ? "PIC_T_DUMMY_VIQ" : "PIC_B_DUMMY_VIQ_VREF");
|
||||||
cc.tiles[tile].add_enum(clkdiv + ".DIV", str_or_default(ci->params, id_DIV, "2.0"));
|
cc.tiles[tile].add_enum(clkdiv + ".DIV", str_or_default(ci->params, id_DIV, "2.0"));
|
||||||
cc.tiles[tile].add_enum(clkdiv + ".GSR", str_or_default(ci->params, id_GSR, "DISABLED"));
|
cc.tiles[tile].add_enum(clkdiv + ".GSR", str_or_default(ci->params, id_GSR, "DISABLED"));
|
||||||
|
@ -54,8 +54,6 @@ void dram_to_comb(Context *ctx, CellInfo *ram, CellInfo *comb, CellInfo *ramw, i
|
|||||||
void nxio_to_tr(Context *ctx, CellInfo *nxio, CellInfo *trio, std::vector<std::unique_ptr<CellInfo>> &created_cells,
|
void nxio_to_tr(Context *ctx, CellInfo *nxio, CellInfo *trio, std::vector<std::unique_ptr<CellInfo>> &created_cells,
|
||||||
pool<IdString> &todelete_cells);
|
pool<IdString> &todelete_cells);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -274,10 +274,7 @@ class MachXO2Packer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return true if an port is a top level port that provides its own IOBUF
|
// Return true if an port is a top level port that provides its own IOBUF
|
||||||
bool is_top_port(PortRef &port)
|
bool is_top_port(PortRef &port) { return false; }
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return true if a net only drives a top port
|
// Return true if a net only drives a top port
|
||||||
bool drives_top_port(NetInfo *net, PortRef &tp)
|
bool drives_top_port(NetInfo *net, PortRef &tp)
|
||||||
@ -788,14 +785,14 @@ class MachXO2Packer
|
|||||||
std::unique_ptr<CellInfo> ram_comb[4];
|
std::unique_ptr<CellInfo> ram_comb[4];
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
ram_comb[i] = create_machxo2_cell(ctx, id_TRELLIS_COMB,
|
ram_comb[i] = create_machxo2_cell(ctx, id_TRELLIS_COMB,
|
||||||
ci->name.str(ctx) + "$DPRAM_COMB" + std::to_string(i));
|
ci->name.str(ctx) + "$DPRAM_COMB" + std::to_string(i));
|
||||||
dram_to_comb(ctx, ci, ram_comb[i].get(), ramw_slice.get(), i);
|
dram_to_comb(ctx, ci, ram_comb[i].get(), ramw_slice.get(), i);
|
||||||
}
|
}
|
||||||
// Create 'block' SLICEs as a placement hint that these cells are mutually exclusive with the RAMW
|
// Create 'block' SLICEs as a placement hint that these cells are mutually exclusive with the RAMW
|
||||||
std::unique_ptr<CellInfo> ramw_block[2];
|
std::unique_ptr<CellInfo> ramw_block[2];
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
ramw_block[i] = create_machxo2_cell(ctx, id_TRELLIS_COMB,
|
ramw_block[i] = create_machxo2_cell(ctx, id_TRELLIS_COMB,
|
||||||
ci->name.str(ctx) + "$RAMW_BLOCK" + std::to_string(i));
|
ci->name.str(ctx) + "$RAMW_BLOCK" + std::to_string(i));
|
||||||
ramw_block[i]->params[id_MODE] = std::string("RAMW_BLOCK");
|
ramw_block[i]->params[id_MODE] = std::string("RAMW_BLOCK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user