From 3407d7638313ec6bb989088c81a30f99e8ec94b1 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sat, 23 Jun 2018 16:55:13 +0200 Subject: [PATCH] added PCF load --- gui/ice40/mainwindow.cc | 44 +++++++++++++++++++++++++++---- gui/ice40/mainwindow.h | 7 +++-- gui/ice40/nextpnr.qrc | 1 + gui/ice40/resources/open_pcf.png | Bin 0 -> 1984 bytes gui/ice40/worker.cc | 14 ++++++++++ gui/ice40/worker.h | 4 +++ 6 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 gui/ice40/resources/open_pcf.png diff --git a/gui/ice40/mainwindow.cc b/gui/ice40/mainwindow.cc index c8df0677..34769abe 100644 --- a/gui/ice40/mainwindow.cc +++ b/gui/ice40/mainwindow.cc @@ -47,6 +47,7 @@ MainWindow::MainWindow(Context *_ctx, QWidget *parent) : BaseMainWindow(_ctx, pa connect(task, SIGNAL(log(std::string)), this, SLOT(writeInfo(std::string))); connect(task, SIGNAL(loadfile_finished(bool)), this, SLOT(loadfile_finished(bool))); + connect(task, SIGNAL(loadpcf_finished(bool)), this, SLOT(loadpcf_finished(bool))); connect(task, SIGNAL(pack_finished(bool)), this, SLOT(pack_finished(bool))); connect(task, SIGNAL(budget_finish(bool)), this, SLOT(budget_finish(bool))); connect(task, SIGNAL(place_finished(bool)), this, SLOT(place_finished(bool))); @@ -56,9 +57,6 @@ MainWindow::MainWindow(Context *_ctx, QWidget *parent) : BaseMainWindow(_ctx, pa connect(task, SIGNAL(taskStarted()), this, SLOT(taskStarted())); connect(task, SIGNAL(taskPaused()), this, SLOT(taskPaused())); - connect(this, SIGNAL(budget(double)), task, SIGNAL(budget(double))); - connect(this, SIGNAL(place(bool)), task, SIGNAL(place(bool))); - createMenu(); } @@ -69,6 +67,14 @@ void MainWindow::createMenu() QMenu *menu_Design = new QMenu("&Design", menuBar); menuBar->addAction(menu_Design->menuAction()); + actionLoadPCF = new QAction("Open PCF", this); + QIcon iconLoadPCF; + iconLoadPCF.addFile(QStringLiteral(":/icons/resources/open_pcf.png")); + actionLoadPCF->setIcon(iconLoadPCF); + actionLoadPCF->setStatusTip("Open PCF file"); + connect(actionLoadPCF, SIGNAL(triggered()), this, SLOT(open_pcf())); + actionLoadPCF->setEnabled(false); + actionPack = new QAction("Pack", this); QIcon iconPack; iconPack.addFile(QStringLiteral(":/icons/resources/pack.png")); @@ -104,11 +110,13 @@ void MainWindow::createMenu() QToolBar *taskFPGABar = new QToolBar(); addToolBar(Qt::TopToolBarArea, taskFPGABar); + taskFPGABar->addAction(actionLoadPCF); taskFPGABar->addAction(actionPack); taskFPGABar->addAction(actionAssignBudget); taskFPGABar->addAction(actionPlace); taskFPGABar->addAction(actionRoute); + menu_Design->addAction(actionLoadPCF); menu_Design->addAction(actionPack); menu_Design->addAction(actionAssignBudget); menu_Design->addAction(actionPlace); @@ -159,10 +167,23 @@ void MainWindow::open() } } +void MainWindow::open_pcf() +{ + QString fileName = QFileDialog::getOpenFileName(this, QString(), QString(), QString("*.pcf")); + if (!fileName.isEmpty()) { + tabWidget->setCurrentWidget(info); + + std::string fn = fileName.toStdString(); + disableActions(); + Q_EMIT task->loadpcf(fn); + } +} + bool MainWindow::save() { return false; } void MainWindow::disableActions() { + actionLoadPCF->setEnabled(false); actionPack->setEnabled(false); actionAssignBudget->setEnabled(false); actionPlace->setEnabled(false); @@ -178,11 +199,24 @@ void MainWindow::loadfile_finished(bool status) disableActions(); if (status) { log("Loading design successful.\n"); + actionLoadPCF->setEnabled(true); actionPack->setEnabled(true); } else { log("Loading design failed.\n"); } } + +void MainWindow::loadpcf_finished(bool status) +{ + disableActions(); + if (status) { + log("Loading PCF successful.\n"); + actionPack->setEnabled(true); + } else { + log("Loading PCF failed.\n"); + } +} + void MainWindow::pack_finished(bool status) { disableActions(); @@ -252,10 +286,10 @@ void MainWindow::budget() if (ok) { freq *= 1e6; timing_driven = true; - Q_EMIT budget(freq); + Q_EMIT task->budget(freq); } } -void MainWindow::place() { Q_EMIT place(timing_driven); } +void MainWindow::place() { Q_EMIT task->place(timing_driven); } NEXTPNR_NAMESPACE_END \ No newline at end of file diff --git a/gui/ice40/mainwindow.h b/gui/ice40/mainwindow.h index 9857adf8..66814d32 100644 --- a/gui/ice40/mainwindow.h +++ b/gui/ice40/mainwindow.h @@ -36,18 +36,16 @@ class MainWindow : public BaseMainWindow public: void createMenu(); - Q_SIGNALS: - void budget(double freq); - void place(bool timing_driven); - protected Q_SLOTS: virtual void open(); virtual bool save(); + void open_pcf(); void budget(); void place(); void loadfile_finished(bool status); + void loadpcf_finished(bool status); void pack_finished(bool status); void budget_finish(bool status); void place_finished(bool status); @@ -61,6 +59,7 @@ class MainWindow : public BaseMainWindow void disableActions(); TaskManager *task; + QAction *actionLoadPCF; QAction *actionPack; QAction *actionAssignBudget; QAction *actionPlace; diff --git a/gui/ice40/nextpnr.qrc b/gui/ice40/nextpnr.qrc index 33f72ad8..4a73d791 100644 --- a/gui/ice40/nextpnr.qrc +++ b/gui/ice40/nextpnr.qrc @@ -7,5 +7,6 @@ resources/place.png resources/route.png resources/time_add.png + resources/open_pcf.png diff --git a/gui/ice40/resources/open_pcf.png b/gui/ice40/resources/open_pcf.png new file mode 100644 index 0000000000000000000000000000000000000000..093dec390d13f60e8d5ace3f68b4b8e83361b0fa GIT binary patch literal 1984 zcmV;x2S50UP)E<2Te&t zK~z}7#g}Vr99I>`e|Khg_TkssUMKb@O`ODWnS`-I=*_4xpPNz&+nf5Kj)r-|8rCS^@m?k85}YMG@${XDkaMDic|r)Zvg7+D%X;0 z*_U?GpG_naJ8j$U)S?#m}%Tm8Y_(r zogbR-Kij`3Imxx>+ErUa8|}^QY+k#WVz$^f&Ga^zm2=E92j~wE@Th9!CiAr)*Iv`7 z^cDKKzyPO4W=9qWYlDT{%3Q`tIV|c$np>I~u}4;Ufw!Ik-Udqdf=JvwaN%fXb<*aS zw#}Y9$BjV$p#1cymuo)({vNv)`HTE%YJBRCC)A1OcJ1BO+1%JnXhPC$Y1|%nchD1j zhCz-3W6Nztod=%zd~#^TgHJ!)x$QYx*F8aN_v5s#JwR*WG1@Xy+qbNl%m3!}@I*Y} z95Bx;!>;cRFElS4Xzy%ys;0_#WgKIS6;y&8mv{%527(V1;m|7?S^tS&fC)i-kQ!oK zlrDik!_~KbPSKScNn4dIix3qptK?#T^LkM5c0SUaY)x`);Tqn8hdNc%hrHzEo=2?m z{;$^d$Iz8~ZUF$nG>C?<1l~N#pNGmcVouQ03&85TKQRWr)BxX`7{^IBfdXYIltrQ` zrB^9Q0_;;yD_f4qu~-w~@&L6_@Jmp>frQ7Sv8CM;z{H(9#w-Jy(%|1L;l*;ZlQ!P! z6tDinN0=WeI4VVB*^#B4?h7k9+x1U3ac!Ria?np6lUjjkRgEk=+g0d8r zW0C00a5`mytw^<+j@oOrv%sb}GU@@0Au?{_$pe9kAijXV$XKT@J-2b`ElY6!%A77cP&FuVgZGRm=s0C^Q zUbJFe6?{ohb(&Ef+iC83635CS%3viL5Tki`^u{Q-B4PkKcf%dsNE#t@VP z^21H+?e4So?_Hbe>#k%5PQF|QcGUrRB?DEVRu&dK8_9p1_6HA=&wnKLdo>PE9fc}3 zZEZOYZr{z;#tppi?(aA?aups*VmmgW7s7~Un_FP>c8lKb3QjP@=_^!$u6hjsXU;?W z`i*pK{{oGL-C!pntboyxaeOclgaA%LShGUNrPHix`xvJ$w(*1hGYsd-=&WMh2yAJc zVN0RN%9LVZrp%>Ldj`UVI)F@zg{1-tJD(+$>jhl_QwA}J1SknWf(XR8sIUm(Jhq;p z)n25bvqV>Ffz2IV{Oa-yCx;i=<7C;o(V=^Fl1vIFs)h^KWfGXF1F#)MBAq7HkOzMX z5l|SAa4Fs(EJ84i1QRH;h)6B+2qDR2NJo2y#s-Ugn_}N^7F&mGTx-$RBA`R&7eak* z(2N6fbpT?7R8s*G0-hTi2Si84f-zJu1Ez{XgM_F!DF_B722@BkEp&I;_ za1xqYRWp1ubb&>nSg!$X$hH+AEQ2mb;k5G5?PRzri}_X`)~C7<*N5jX!0`zv2C%6S zj&6ZXZ{EuDIY9b1AQFOQsJQ{xZps2s1S<7m7#PycD?!g8Qb7f!$oSPKAPnK;6zcF< zzkU=f4L=%=q61){4?&|uqX$A?mNSr23yo57y}Zwk@V zC_ssi5drkAXE{EB{C)?jRe@OW?FS-_0Q3#qI%?(J)ltY=A+<`#`C*v^W|#GVvJyBM z2daahXHiQhPVcMHgoQMGw-*r~kT@z7iVzWvL?<*d&=cuKG)h8*5VU5oY|PoKkpSyF zaPGy_1}D>i#T??_1S~|UXu`{T;uBC%2qGRFXoVv~$Ttc|piw`Ygu^T1W$P$Uh(-|! z)%QY1CyZP3DFF+BZ@n)Idgi0)YzoX&yfPnU{Kzxn$CnpXV-g_Gc0rRuJ#`uN>G$A# z6%}hBx<@BhB*2hbMKd%m#n`yJOg$ivWf~Gu1c*VYcmpnM1LL7E2!b+E&a^THIott< z^U)R3KnKuxAAg7|af$B!CqJ?Gt^E@uhU5Nv S4#u|t0000