From a0e79c993fd4b6886d997a814582c1b64c929355 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sat, 3 Nov 2018 09:39:43 +0100 Subject: Added LPF support and all chip models available for select --- gui/ecp5/mainwindow.cc | 51 +++++++++++++++++++++++++++++++++++----- gui/ecp5/mainwindow.h | 4 ++++ gui/ecp5/nextpnr.qrc | 1 + gui/ecp5/resources/open_lpf.png | Bin 0 -> 1928 bytes 4 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 gui/ecp5/resources/open_lpf.png diff --git a/gui/ecp5/mainwindow.cc b/gui/ecp5/mainwindow.cc index b3c53849..aa2911ea 100644 --- a/gui/ecp5/mainwindow.cc +++ b/gui/ecp5/mainwindow.cc @@ -20,6 +20,7 @@ #include "mainwindow.h" #include "bitstream.h" #include "log.h" +#include #include #include @@ -53,6 +54,12 @@ void MainWindow::newContext(Context *ctx) void MainWindow::createMenu() { // Add arch specific actions + actionLoadLPF = new QAction("Open LPF", this); + actionLoadLPF->setIcon(QIcon(":/icons/resources/open_lpf.png")); + actionLoadLPF->setStatusTip("Open LPF file"); + actionLoadLPF->setEnabled(false); + connect(actionLoadLPF, &QAction::triggered, this, &MainWindow::open_lpf); + actionLoadBase = new QAction("Open Base Config", this); actionLoadBase->setIcon(QIcon(":/icons/resources/open_base.png")); actionLoadBase->setStatusTip("Open Base Config file"); @@ -67,10 +74,12 @@ void MainWindow::createMenu() // Add actions in menus mainActionBar->addSeparator(); + mainActionBar->addAction(actionLoadLPF); mainActionBar->addAction(actionLoadBase); mainActionBar->addAction(actionSaveConfig); menuDesign->addSeparator(); + menuDesign->addAction(actionLoadLPF); menuDesign->addAction(actionLoadBase); menuDesign->addAction(actionSaveConfig); } @@ -81,11 +90,11 @@ static QStringList getSupportedPackages(ArchArgs::ArchArgsTypes chip) { QStringList packages; const ChipInfoPOD *chip_info; - if (chip == ArchArgs::LFE5U_25F) { + if (chip == ArchArgs::LFE5U_25F || chip == ArchArgs::LFE5UM_25F || chip == ArchArgs::LFE5UM5G_25F) { chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_25k)); - } else if (chip == ArchArgs::LFE5U_45F) { + } else if (chip == ArchArgs::LFE5U_45F || chip == ArchArgs::LFE5UM_45F || chip == ArchArgs::LFE5UM5G_45F) { chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_45k)); - } else if (chip == ArchArgs::LFE5U_85F) { + } else if (chip == ArchArgs::LFE5U_85F || chip == ArchArgs::LFE5UM_85F || chip == ArchArgs::LFE5UM5G_85F) { chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_85k)); } else { log_error("Unsupported ECP5 chip type.\n"); @@ -100,9 +109,15 @@ static QStringList getSupportedPackages(ArchArgs::ArchArgsTypes chip) void MainWindow::new_proj() { QMap arch; - arch.insert("Lattice ECP5 25K", ArchArgs::LFE5U_25F); - arch.insert("Lattice ECP5 45K", ArchArgs::LFE5U_45F); - arch.insert("Lattice ECP5 85K", ArchArgs::LFE5U_85F); + arch.insert("Lattice ECP5 LFE5U-25F", ArchArgs::LFE5U_25F); + arch.insert("Lattice ECP5 LFE5U-45F", ArchArgs::LFE5U_45F); + arch.insert("Lattice ECP5 LFE5U-85F", ArchArgs::LFE5U_85F); + arch.insert("Lattice ECP5 LFE5UM-25F", ArchArgs::LFE5UM_25F); + arch.insert("Lattice ECP5 LFE5UM-45F", ArchArgs::LFE5UM_45F); + arch.insert("Lattice ECP5 LFE5UM-85F", ArchArgs::LFE5UM_85F); + arch.insert("Lattice ECP5 LFE5UM5G-25F", ArchArgs::LFE5UM5G_25F); + arch.insert("Lattice ECP5 LFE5UM5G-45F", ArchArgs::LFE5UM5G_45F); + arch.insert("Lattice ECP5 LFE5UM5G-85F", ArchArgs::LFE5UM5G_85F); bool ok; QString item = QInputDialog::getItem(this, "Select new context", "Chip:", arch.keys(), 0, false, &ok); if (ok && !item.isEmpty()) { @@ -131,6 +146,21 @@ void MainWindow::load_base_config(std::string filename) actionSaveConfig->setEnabled(true); } +void MainWindow::open_lpf() +{ + QString fileName = QFileDialog::getOpenFileName(this, QString("Open LPF"), QString(), QString("*.lpf")); + if (!fileName.isEmpty()) { + std::ifstream in(fileName.toStdString()); + if (ctx->applyLPF(fileName.toStdString(), in)) { + log("Loading LPF successful.\n"); + actionPack->setEnabled(true); + } else { + actionLoadLPF->setEnabled(true); + log("Loading LPF failed.\n"); + } + } +} + void MainWindow::open_base() { QString fileName = QFileDialog::getOpenFileName(this, QString("Open Base Config"), QString(), QString("*.config")); @@ -152,10 +182,19 @@ void MainWindow::save_config() void MainWindow::onDisableActions() { + actionLoadLPF->setEnabled(false); actionLoadBase->setEnabled(false); actionSaveConfig->setEnabled(false); } +void MainWindow::onJsonLoaded() { actionLoadLPF->setEnabled(true); } + void MainWindow::onRouteFinished() { actionLoadBase->setEnabled(true); } +void MainWindow::onProjectLoaded() +{ + if (ctx->settings.find(ctx->id("input/lpf")) != ctx->settings.end()) + actionLoadLPF->setEnabled(false); +} + NEXTPNR_NAMESPACE_END diff --git a/gui/ecp5/mainwindow.h b/gui/ecp5/mainwindow.h index f85c2abc..f67f7a81 100644 --- a/gui/ecp5/mainwindow.h +++ b/gui/ecp5/mainwindow.h @@ -38,15 +38,19 @@ class MainWindow : public BaseMainWindow protected: void onDisableActions() override; + void onJsonLoaded() override; void onRouteFinished() override; + void onProjectLoaded() override; protected Q_SLOTS: virtual void new_proj(); void newContext(Context *ctx); + void open_lpf(); void open_base(); void save_config(); private: + QAction *actionLoadLPF; QAction *actionLoadBase; QAction *actionSaveConfig; diff --git a/gui/ecp5/nextpnr.qrc b/gui/ecp5/nextpnr.qrc index 09f96d74..ca7e5b1a 100644 --- a/gui/ecp5/nextpnr.qrc +++ b/gui/ecp5/nextpnr.qrc @@ -1,5 +1,6 @@ + resources/open_lpf.png resources/open_base.png resources/save_config.png diff --git a/gui/ecp5/resources/open_lpf.png b/gui/ecp5/resources/open_lpf.png new file mode 100644 index 00000000..10772fc6 Binary files /dev/null and b/gui/ecp5/resources/open_lpf.png differ -- cgit v1.2.3