From e45508f6c41273830312a5b88c5e25f266dc67ae Mon Sep 17 00:00:00 2001 From: David Shah Date: Wed, 20 Jun 2018 15:15:51 +0200 Subject: [PATCH 1/6] Improving timing annotator Signed-off-by: David Shah --- common/timing.cc | 18 ++++++++++++++++++ ice40/main.cc | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/common/timing.cc b/common/timing.cc index 5ffd4ea7..a4bda3bb 100644 --- a/common/timing.cc +++ b/common/timing.cc @@ -79,6 +79,14 @@ static delay_t follow_net(Context *ctx, NetInfo *net, int path_length, void assign_budget(Context *ctx, float default_clock) { log_info("Annotating ports with timing budgets\n"); + // Clear delays to a very high value first + delay_t default_slack = delay_t(1.0e12 / default_clock); + for (auto net : ctx->nets) { + for (auto &usr : net.second->users) { + usr.budget = default_slack; + } + } + // Go through all clocked drivers and set up paths for (auto cell : ctx->cells) { for (auto port : cell.second->ports) { if (port.second.type == PORT_OUT) { @@ -93,6 +101,16 @@ void assign_budget(Context *ctx, float default_clock) } } } + // Post-allocation check + for (auto net : ctx->nets) { + for (auto user : net.second->users) { + if (user.budget < 0) + log_warning("port %s.%s, connected to net '%s', has negative " + "timing budget of %fns\n", + user.cell->name.c_str(ctx), user.port.c_str(ctx), + net.first.c_str(ctx), ctx->getDelayNS(user.budget)); + } + } } NEXTPNR_NAMESPACE_END diff --git a/ice40/main.cc b/ice40/main.cc index ea7c9a66..13d8ac0b 100644 --- a/ice40/main.cc +++ b/ice40/main.cc @@ -273,7 +273,7 @@ int main(int argc, char *argv[]) if (!pack_design(&ctx) && !ctx.force) log_error("Packing design failed.\n"); - assign_budget(&ctx); + assign_budget(&ctx, 50e6); print_utilisation(&ctx); if (!vm.count("pack-only")) { From e14b8bac66bf9a65ddd709fba53aac017691f0c8 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 20 Jun 2018 14:24:16 +0200 Subject: [PATCH 2/6] put source changes for qtpropertybrowser back and make build simple --- 3rdparty/QtPropertyBrowser/.gitignore | 6 +++ 3rdparty/QtPropertyBrowser/CMakeLists.txt | 41 ------------------- 3rdparty/QtPropertyBrowser/src/CMakeLists.txt | 28 +------------ .../src/qtbuttonpropertybrowser.cpp | 2 +- .../QtPropertyBrowser/src/qteditorfactory.cpp | 2 +- .../src/qtgroupboxpropertybrowser.cpp | 2 +- .../src/qtpropertybrowser.cpp | 2 +- .../src/qtpropertymanager.cpp | 2 +- .../src/qttreepropertybrowser.cpp | 2 +- .../src/qtvariantproperty.cpp | 2 +- CMakeLists.txt | 2 + gui/gui.cmake | 36 ---------------- 12 files changed, 16 insertions(+), 111 deletions(-) diff --git a/3rdparty/QtPropertyBrowser/.gitignore b/3rdparty/QtPropertyBrowser/.gitignore index b667c89b..8472a980 100644 --- a/3rdparty/QtPropertyBrowser/.gitignore +++ b/3rdparty/QtPropertyBrowser/.gitignore @@ -29,3 +29,9 @@ # Ignores 'build' in any sub folder build/ + +src/moc_*.cpp +src/*.moc +src/qrc_*.cpp +src/*_automoc.cpp +src/*_export.h \ No newline at end of file diff --git a/3rdparty/QtPropertyBrowser/CMakeLists.txt b/3rdparty/QtPropertyBrowser/CMakeLists.txt index 1495c343..952581bc 100644 --- a/3rdparty/QtPropertyBrowser/CMakeLists.txt +++ b/3rdparty/QtPropertyBrowser/CMakeLists.txt @@ -1,17 +1,6 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11) PROJECT(QtPropertyBrowser) -########################### Misc. Configs ############################## -# Add custom cmake files folder -SET (PROJECT_CMAKE_DIR ${PROJECT_SOURCE_DIR}/cmake) -SET (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${PROJECT_CMAKE_DIR}") - -# Add custom Compile Settings and flags -INCLUDE(CompileSettings) - -# Add custom Install Settings -INCLUDE(InstallSettings) - ##################### Look for required libraries ###################### # Add QT dependencies @@ -19,33 +8,3 @@ FIND_PACKAGE(Qt5Widgets REQUIRED) ######################### Add Primary Targets ########################## ADD_SUBDIRECTORY(src) - -########################## Add the Examples ############################ -OPTION (BUILD_EXAMPLES "Build Examples" ON) -IF(BUILD_EXAMPLES) - ADD_SUBDIRECTORY(examples) -ENDIF() - -######################### Installation Stuff ########################### -INCLUDE(InstallProjectConfig) - -###################### Add uninstall target ############################ -ADD_CUSTOM_TARGET(uninstall - COMMAND ${CMAKE_COMMAND} -P ${PROJECT_CMAKE_DIR}/cmake_uninstall.cmake) - -##################### Show Configuration Summary ###################### -MESSAGE(STATUS "===============================================================") -MESSAGE(STATUS "================ Configuration Summary ======================") -MESSAGE(STATUS "Project Name: ${PROJECT_NAME}") -MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}") -MESSAGE(STATUS "Build type Flags: ${CMAKE_BUILD_TYPE_FLAGS}") -MESSAGE(STATUS "C++ compile flags: ${CMAKE_CXX_FLAGS}") -MESSAGE(STATUS "Install Path: ${CMAKE_INSTALL_PREFIX}") -MESSAGE(STATUS "Build Examples: ${BUILD_EXAMPLES}") -IF(Qt5Widgets_FOUND) - MESSAGE(STATUS "QT Version: ${Qt5Widgets_VERSION_STRING}") - MESSAGE(STATUS "QT INCLUDE DIRS: ${Qt5Widgets_INCLUDE_DIRS}") - MESSAGE(STATUS "QT COMPILE DEFS: ${Qt5Widgets_COMPILE_DEFINITIONS}") - MESSAGE(STATUS "QT DEFS: ${Qt5Widgets_DEFINITIONS}") - MESSAGE(STATUS "QT EXE FLAGS: ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") -ENDIF() diff --git a/3rdparty/QtPropertyBrowser/src/CMakeLists.txt b/3rdparty/QtPropertyBrowser/src/CMakeLists.txt index ac70956d..abee16a1 100644 --- a/3rdparty/QtPropertyBrowser/src/CMakeLists.txt +++ b/3rdparty/QtPropertyBrowser/src/CMakeLists.txt @@ -16,9 +16,6 @@ set(_SRCS qtvariantproperty.cpp ) -file(GLOB _IMPL_HDRS *.h) -file(GLOB _PUBLIC_HDRS Qt*) - set(_UI_FORMS ) @@ -31,7 +28,7 @@ QT5_ADD_RESOURCES(_QRC_SRCS ${_RESOURCES}) set(TARGET_NAME ${PROJECT_NAME}) -add_library(${TARGET_NAME} +add_library(${TARGET_NAME} STATIC ${_SRCS} ${_UI_SRCS} ${_QRC_SRCS} @@ -39,26 +36,3 @@ add_library(${TARGET_NAME} ) target_link_libraries(${TARGET_NAME} Qt5::Widgets) - -######################### Installation Stuff ########################### -include(GenerateExportHeader) -generate_export_header(${TARGET_NAME}) - -install(TARGETS ${TARGET_NAME} - EXPORT ${TARGET_NAME}Targets - RUNTIME DESTINATION ${INSTALL_BIN_DIR} - LIBRARY DESTINATION ${INSTALL_LIB_DIR} - ARCHIVE DESTINATION ${INSTALL_LIB_DIR} - INCLUDES DESTINATION ${INSTALL_INCLUDE_DIR} -) - -install( - FILES - ${_PUBLIC_HDRS} - ${_IMPL_HDRS} - DESTINATION - ${INSTALL_INCLUDE_DIR} - COMPONENT - Devel -) - diff --git a/3rdparty/QtPropertyBrowser/src/qtbuttonpropertybrowser.cpp b/3rdparty/QtPropertyBrowser/src/qtbuttonpropertybrowser.cpp index f194c76a..58cfc510 100644 --- a/3rdparty/QtPropertyBrowser/src/qtbuttonpropertybrowser.cpp +++ b/3rdparty/QtPropertyBrowser/src/qtbuttonpropertybrowser.cpp @@ -626,4 +626,4 @@ bool QtButtonPropertyBrowser::isExpanded(QtBrowserItem *item) const QT_END_NAMESPACE #endif -#include "moc_qtbuttonpropertybrowser.hpp" +#include "moc_qtbuttonpropertybrowser.cpp" diff --git a/3rdparty/QtPropertyBrowser/src/qteditorfactory.cpp b/3rdparty/QtPropertyBrowser/src/qteditorfactory.cpp index e7f7241e..a2ef86c9 100644 --- a/3rdparty/QtPropertyBrowser/src/qteditorfactory.cpp +++ b/3rdparty/QtPropertyBrowser/src/qteditorfactory.cpp @@ -2575,5 +2575,5 @@ void QtFontEditorFactory::disconnectPropertyManager(QtFontPropertyManager *manag QT_END_NAMESPACE #endif -#include "moc_qteditorfactory.hpp" +#include "moc_qteditorfactory.cpp" #include "qteditorfactory.moc" diff --git a/3rdparty/QtPropertyBrowser/src/qtgroupboxpropertybrowser.cpp b/3rdparty/QtPropertyBrowser/src/qtgroupboxpropertybrowser.cpp index 6e4d2490..caf074db 100644 --- a/3rdparty/QtPropertyBrowser/src/qtgroupboxpropertybrowser.cpp +++ b/3rdparty/QtPropertyBrowser/src/qtgroupboxpropertybrowser.cpp @@ -533,4 +533,4 @@ void QtGroupBoxPropertyBrowser::itemChanged(QtBrowserItem *item) QT_END_NAMESPACE #endif -#include "moc_qtgroupboxpropertybrowser.hpp" +#include "moc_qtgroupboxpropertybrowser.cpp" diff --git a/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp b/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp index 6ec09ac1..2449fcb8 100644 --- a/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp +++ b/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp @@ -2045,4 +2045,4 @@ void QtAbstractPropertyBrowser::setCurrentItem(QtBrowserItem *item) QT_END_NAMESPACE #endif -#include "moc_qtpropertybrowser.hpp" +#include "moc_qtpropertybrowser.cpp" diff --git a/3rdparty/QtPropertyBrowser/src/qtpropertymanager.cpp b/3rdparty/QtPropertyBrowser/src/qtpropertymanager.cpp index 6dea25a3..ef627e9c 100644 --- a/3rdparty/QtPropertyBrowser/src/qtpropertymanager.cpp +++ b/3rdparty/QtPropertyBrowser/src/qtpropertymanager.cpp @@ -6421,5 +6421,5 @@ void QtCursorPropertyManager::uninitializeProperty(QtProperty *property) QT_END_NAMESPACE #endif -#include "moc_qtpropertymanager.hpp" +#include "moc_qtpropertymanager.cpp" #include "qtpropertymanager.moc" diff --git a/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp b/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp index 4e6f16a9..9e506af3 100644 --- a/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp +++ b/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp @@ -1072,5 +1072,5 @@ void QtTreePropertyBrowser::editItem(QtBrowserItem *item) QT_END_NAMESPACE #endif -#include "moc_qttreepropertybrowser.hpp" +#include "moc_qttreepropertybrowser.cpp" #include "qttreepropertybrowser.moc" diff --git a/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp b/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp index 6145b2ab..c41730c8 100644 --- a/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp +++ b/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp @@ -2355,4 +2355,4 @@ void QtVariantEditorFactory::disconnectPropertyManager(QtVariantPropertyManager QT_END_NAMESPACE #endif -#include "moc_qtvariantproperty.hpp" +#include "moc_qtvariantproperty.cpp" diff --git a/CMakeLists.txt b/CMakeLists.txt index bd45dc78..4f2cce58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,8 @@ execute_process( add_subdirectory(3rdparty/googletest/googletest EXCLUDE_FROM_ALL) enable_testing() +add_subdirectory(3rdparty/QtPropertyBrowser) + add_definitions("-DGIT_COMMIT_HASH=${GIT_COMMIT_HASH}") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/common/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/generated/version.h diff --git a/gui/gui.cmake b/gui/gui.cmake index 08a2c0b4..65705014 100644 --- a/gui/gui.cmake +++ b/gui/gui.cmake @@ -28,39 +28,3 @@ qt5_add_resources_custom(GUI_RESOURCE_FILES gui/nextpnr.qrc) aux_source_directory(gui/ GUI_ALL_SOURCE_FILES) set(GUI_SOURCE_FILES ${GUI_ALL_SOURCE_FILES} ${GENERATED_MOC_FILES} ${GENERATED_UI_HEADERS} ${GUI_RESOURCE_FILES}) set(GUI_LIBRARY_FILES Qt5::Widgets Qt5::OpenGL ${OPENGL_LIBRARIES} QtPropertyBrowser) - - -add_library(QtPropertyBrowser STATIC "") -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qtpropertybrowser.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtpropertybrowser.hpp) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qtgroupboxpropertybrowser.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtgroupboxpropertybrowser.hpp) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qtvariantproperty.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtvariantproperty.hpp) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qtpropertymanager.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtpropertymanager.hpp) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qtbuttonpropertybrowser.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtbuttonpropertybrowser.hpp) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qteditorfactory.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qteditorfactory.hpp) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qttreepropertybrowser.hpp) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qtpropertybrowserutils_p.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtpropertybrowserutils_p.cpp) - -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qtpropertymanager.cpp ${CMAKE_CURRENT_BINARY_DIR}/generated/qtpropertymanager.moc) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp ${CMAKE_CURRENT_BINARY_DIR}/generated/qttreepropertybrowser.moc) -qt5_generate_moc(3rdparty/QtPropertyBrowser/src/qteditorfactory.cpp ${CMAKE_CURRENT_BINARY_DIR}/generated/qteditorfactory.moc) - -set(QTPB_GENERATED_MOC_FILES - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtpropertybrowser.hpp - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtgroupboxpropertybrowser.hpp - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtvariantproperty.hpp - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtpropertymanager.hpp - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtbuttonpropertybrowser.hpp - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qteditorfactory.hpp - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qttreepropertybrowser.hpp - ${CMAKE_CURRENT_BINARY_DIR}/generated/qtpropertymanager.moc - ${CMAKE_CURRENT_BINARY_DIR}/generated/qttreepropertybrowser.moc - ${CMAKE_CURRENT_BINARY_DIR}/generated/qteditorfactory.moc - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_qtpropertybrowserutils_p.cpp -) - -qt5_add_resources_custom(QTPB_RESOURCE_FILES 3rdparty/QtPropertyBrowser/src/qtpropertybrowser.qrc) -aux_source_directory(3rdparty/QtPropertyBrowser/src/ QTPROPBROWSER_SRC_ALL) -target_sources(QtPropertyBrowser PRIVATE ${QTPROPBROWSER_SRC_ALL} ${QTPB_GENERATED_MOC_FILES} ${QTPB_RESOURCE_FILES}) -target_include_directories(QtPropertyBrowser PRIVATE 3rdparty/QtPropertyBrowser/src generated) -target_link_libraries(QtPropertyBrowser PRIVATE Qt5::Core Qt5::Widgets) - From 36c16cd28e20b362a6185ce52525c98fc187ecf3 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 20 Jun 2018 16:13:49 +0200 Subject: [PATCH 3/6] Cleanup of cmake files for easier development --- 3rdparty/QtPropertyBrowser/src/CMakeLists.txt | 1 - CMakeLists.txt | 14 +++-- gui/CMakeLists.txt | 15 +++++ gui/Qt5Customizations.cmake | 60 ------------------- gui/gui.cmake | 30 ---------- gui/mainwindow.cc | 2 + 6 files changed, 27 insertions(+), 95 deletions(-) create mode 100644 gui/CMakeLists.txt delete mode 100644 gui/Qt5Customizations.cmake delete mode 100644 gui/gui.cmake diff --git a/3rdparty/QtPropertyBrowser/src/CMakeLists.txt b/3rdparty/QtPropertyBrowser/src/CMakeLists.txt index abee16a1..a312a10d 100644 --- a/3rdparty/QtPropertyBrowser/src/CMakeLists.txt +++ b/3rdparty/QtPropertyBrowser/src/CMakeLists.txt @@ -32,7 +32,6 @@ add_library(${TARGET_NAME} STATIC ${_SRCS} ${_UI_SRCS} ${_QRC_SRCS} - ${_IMPL_HDRS} ) target_link_libraries(${TARGET_NAME} Qt5::Widgets) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f2cce58..be2edb62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,10 @@ find_package(PythonLibs 3.5 REQUIRED) find_package(Boost REQUIRED COMPONENTS ${boost_libs}) +# Find the Qt5 libraries +find_package(Qt5 COMPONENTS Core Widgets OpenGL REQUIRED) +find_package(OpenGL REQUIRED) + # Get the latest abbreviated commit hash of the working branch execute_process( COMMAND git log -1 --format=%h @@ -74,7 +78,6 @@ endif () if (NOT Boost_PYTHON_FOUND ) message( FATAL_ERROR "No version of Boost::Python 3.x could be found.") endif () -include(gui/gui.cmake) include_directories(common/ gui/ frontend/json ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS} 3rdparty/QtPropertyBrowser/src) aux_source_directory(common/ COMMON_SRC_FILES) @@ -90,8 +93,11 @@ foreach (family ${FAMILIES}) string(TOUPPER ${family} ufamily) aux_source_directory(${family}/ ${ufamily}_FILES) aux_source_directory(tests/${family}/ ${ufamily}_TEST_FILES) + + add_subdirectory(gui generated/gui/${family}) + # Add the CLI binary target - add_executable(nextpnr-${family} ${COMMON_FILES} ${${ufamily}_FILES} ${GUI_SOURCE_FILES}) + add_executable(nextpnr-${family} ${COMMON_FILES} ${${ufamily}_FILES} ) install(TARGETS nextpnr-${family} RUNTIME DESTINATION bin) target_compile_definitions(nextpnr-${family} PRIVATE MAIN_EXECUTABLE) @@ -109,9 +115,9 @@ foreach (family ${FAMILIES}) include(${family}/family.cmake) foreach (target ${family_targets}) # Include family-specific source files to all family targets and set defines appropriately - target_include_directories(${target} PRIVATE ${family}/) + target_include_directories(${target} PRIVATE ${family}/ generated/) target_compile_definitions(${target} PRIVATE NEXTPNR_NAMESPACE=nextpnr_${family} ARCH_${ufamily} ARCHNAME=${family} QT_NO_KEYWORDS) - target_link_libraries(${target} LINK_PUBLIC ${Boost_LIBRARIES} ${PYTHON_LIBRARIES} ${GUI_LIBRARY_FILES}) + target_link_libraries(${target} LINK_PUBLIC gui_${family} ${Boost_LIBRARIES} ${PYTHON_LIBRARIES} ${GUI_LIBRARY_FILES_${ufamily}}) endforeach (target) endforeach (family) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt new file mode 100644 index 00000000..5db86a9b --- /dev/null +++ b/gui/CMakeLists.txt @@ -0,0 +1,15 @@ +set(CMAKE_AUTOMOC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +aux_source_directory(. GUI_SOURCE_FILES) +set(_RESOURCES nextpnr.qrc) + +qt5_add_resources(GUI_RESOURCE_FILES ${_RESOURCES}) + +set(GUI_LIBRARY_FILES_${ufamily} Qt5::Widgets Qt5::OpenGL ${OPENGL_LIBRARIES} QtPropertyBrowser PARENT_SCOPE) + +add_library(gui_${family} STATIC ${GUI_SOURCE_FILES} ${GUI_RESOURCE_FILES}) + +target_include_directories(gui_${family} PRIVATE ../${family}/) +target_compile_definitions(gui_${family} PRIVATE NEXTPNR_NAMESPACE=nextpnr_${family} ARCH_${ufamily} ARCHNAME=${family} QT_NO_KEYWORDS) +target_link_libraries(gui_${family} Qt5::Widgets) diff --git a/gui/Qt5Customizations.cmake b/gui/Qt5Customizations.cmake deleted file mode 100644 index 39d3a644..00000000 --- a/gui/Qt5Customizations.cmake +++ /dev/null @@ -1,60 +0,0 @@ -include(CMakeParseArguments) - -# qt5_wrap_ui_custom(outfiles inputfile ... ) - -function(QT5_WRAP_UI_CUSTOM outfiles ) - set(options) - set(oneValueArgs) - set(multiValueArgs OPTIONS) - - cmake_parse_arguments(_WRAP_UI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - set(ui_files ${_WRAP_UI_UNPARSED_ARGUMENTS}) - set(ui_options ${_WRAP_UI_OPTIONS}) - - foreach(it ${ui_files}) - get_filename_component(outfile ${it} NAME_WE) - get_filename_component(infile ${it} ABSOLUTE) - set(outfile ${CMAKE_CURRENT_BINARY_DIR}/generated/ui_${outfile}.h) - add_custom_command(OUTPUT ${outfile} - COMMAND ${Qt5Widgets_UIC_EXECUTABLE} - ARGS ${ui_options} -o ${outfile} ${infile} - MAIN_DEPENDENCY ${infile} VERBATIM) - list(APPEND ${outfiles} ${outfile}) - endforeach() - set(${outfiles} ${${outfiles}} PARENT_SCOPE) -endfunction() - -# qt5_add_resources_custom(outfiles inputfile ... ) - -function(QT5_ADD_RESOURCES_CUSTOM outfiles ) - - set(options) - set(oneValueArgs) - set(multiValueArgs OPTIONS) - - cmake_parse_arguments(_RCC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - set(rcc_files ${_RCC_UNPARSED_ARGUMENTS}) - set(rcc_options ${_RCC_OPTIONS}) - - if("${rcc_options}" MATCHES "-binary") - message(WARNING "Use qt5_add_binary_resources for binary option") - endif() - - foreach(it ${rcc_files}) - get_filename_component(outfilename ${it} NAME_WE) - get_filename_component(infile ${it} ABSOLUTE) - set(outfile ${CMAKE_CURRENT_BINARY_DIR}/generated/qrc_${outfilename}.cc) - - _QT5_PARSE_QRC_FILE(${infile} _out_depends _rc_depends) - - add_custom_command(OUTPUT ${outfile} - COMMAND ${Qt5Core_RCC_EXECUTABLE} - ARGS ${rcc_options} --name ${outfilename} --output ${outfile} ${infile} - MAIN_DEPENDENCY ${infile} - DEPENDS ${_rc_depends} "${out_depends}" VERBATIM) - list(APPEND ${outfiles} ${outfile}) - endforeach() - set(${outfiles} ${${outfiles}} PARENT_SCOPE) -endfunction() \ No newline at end of file diff --git a/gui/gui.cmake b/gui/gui.cmake deleted file mode 100644 index 65705014..00000000 --- a/gui/gui.cmake +++ /dev/null @@ -1,30 +0,0 @@ -# Find the Qt5 libraries -find_package(Qt5 COMPONENTS Core Widgets OpenGL REQUIRED) -find_package(OpenGL REQUIRED) - -include( gui/Qt5Customizations.cmake ) - -# Find includes in corresponding build directories -include_directories(${CMAKE_CURRENT_BINARY_DIR}/generated) - -qt5_generate_moc(gui/mainwindow.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_mainwindow.cc) -qt5_generate_moc(gui/fpgaviewwidget.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_fpgaviewwidget.cc) -qt5_generate_moc(gui/pythontab.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_pythontab.cc) -qt5_generate_moc(gui/infotab.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_infotab.cc) -qt5_generate_moc(gui/designwidget.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_designwidget.cc) -qt5_generate_moc(gui/line_editor.h ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_line_editor.cc) - -set(GENERATED_MOC_FILES - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_mainwindow.cc - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_fpgaviewwidget.cc - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_pythontab.cc - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_infotab.cc - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_designwidget.cc - ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_line_editor.cc -) - -qt5_add_resources_custom(GUI_RESOURCE_FILES gui/nextpnr.qrc) - -aux_source_directory(gui/ GUI_ALL_SOURCE_FILES) -set(GUI_SOURCE_FILES ${GUI_ALL_SOURCE_FILES} ${GENERATED_MOC_FILES} ${GENERATED_UI_HEADERS} ${GUI_RESOURCE_FILES}) -set(GUI_LIBRARY_FILES Qt5::Widgets Qt5::OpenGL ${OPENGL_LIBRARIES} QtPropertyBrowser) diff --git a/gui/mainwindow.cc b/gui/mainwindow.cc index 087c54ba..91232390 100644 --- a/gui/mainwindow.cc +++ b/gui/mainwindow.cc @@ -25,6 +25,8 @@ MainWindow::MainWindow(Context *_ctx, QWidget *parent) : QMainWindow(parent), ctx(_ctx) { + Q_INIT_RESOURCE(nextpnr); + log_files.clear(); log_streams.clear(); log_write_function = [this](std::string text) { info->info(text); }; From 15c5c9c42549f61679a6a145d41f0d84208d457d Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 20 Jun 2018 16:23:07 +0200 Subject: [PATCH 4/6] put some files back and place generated files in special folder for deps --- 3rdparty/QtPropertyBrowser/.gitignore | 6 ------ CMakeLists.txt | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/3rdparty/QtPropertyBrowser/.gitignore b/3rdparty/QtPropertyBrowser/.gitignore index 8472a980..b667c89b 100644 --- a/3rdparty/QtPropertyBrowser/.gitignore +++ b/3rdparty/QtPropertyBrowser/.gitignore @@ -29,9 +29,3 @@ # Ignores 'build' in any sub folder build/ - -src/moc_*.cpp -src/*.moc -src/qrc_*.cpp -src/*_automoc.cpp -src/*_export.h \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index be2edb62..ac58f169 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,10 +27,10 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) -add_subdirectory(3rdparty/googletest/googletest EXCLUDE_FROM_ALL) +add_subdirectory(3rdparty/googletest/googletest generated/3rdparty/googletest EXCLUDE_FROM_ALL) enable_testing() -add_subdirectory(3rdparty/QtPropertyBrowser) +add_subdirectory(3rdparty/QtPropertyBrowser generated/3rdparty/QtPropertyBrowser) add_definitions("-DGIT_COMMIT_HASH=${GIT_COMMIT_HASH}") configure_file( From 4fc962504028f581cc1db9ada5770900d8dacae2 Mon Sep 17 00:00:00 2001 From: David Shah Date: Wed, 20 Jun 2018 17:08:57 +0200 Subject: [PATCH 5/6] WIP: adding timing budget to placer Signed-off-by: David Shah --- common/place_sa.cc | 9 +++++---- common/timing.cc | 7 +++++++ ice40/arch.cc | 2 +- ice40/main.cc | 12 ++++++++++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/common/place_sa.cc b/common/place_sa.cc index 0a60adc8..485ddc88 100644 --- a/common/place_sa.cc +++ b/common/place_sa.cc @@ -314,7 +314,9 @@ class SAPlacer load_cell->bel, ctx->portPinFromId(load.port)); // wirelength += std::abs(load_x - driver_x) + std::abs(load_y - // driver_y); - wirelength += ctx->estimateDelay(drv_wire, user_wire); + delay_t raw_wl = ctx->estimateDelay(drv_wire, user_wire); + wirelength += 100 * (ctx->getDelayNS(raw_wl) / ctx->getDelayNS(load.budget)); + // wirelength += pow(ctx->estimateDelay(drv_wire, user_wire), 2.0); } return wirelength; } @@ -376,9 +378,8 @@ class SAPlacer delta = new_wirelength - curr_wirelength; n_move++; // SA acceptance criterea - if (delta < 0 || - (temp > 1e-6 && - (ctx->rng() / float(0x3fffffff)) <= std::exp(-delta / temp))) { + if (delta < 0 || (temp > 1e-6 && (ctx->rng() / float(0x3fffffff)) <= + std::exp(-delta / temp))) { n_accept++; if (delta < 0) improved = true; diff --git a/common/timing.cc b/common/timing.cc index a4bda3bb..8da26077 100644 --- a/common/timing.cc +++ b/common/timing.cc @@ -101,6 +101,8 @@ void assign_budget(Context *ctx, float default_clock) } } } + const bool debug = true; + // Post-allocation check for (auto net : ctx->nets) { for (auto user : net.second->users) { @@ -109,6 +111,11 @@ void assign_budget(Context *ctx, float default_clock) "timing budget of %fns\n", user.cell->name.c_str(ctx), user.port.c_str(ctx), net.first.c_str(ctx), ctx->getDelayNS(user.budget)); + if (debug) + log_warning("port %s.%s, connected to net '%s', has " + "timing budget of %fns\n", + user.cell->name.c_str(ctx), user.port.c_str(ctx), + net.first.c_str(ctx), ctx->getDelayNS(user.budget)); } } } diff --git a/ice40/arch.cc b/ice40/arch.cc index fd93a91d..d7673dd0 100644 --- a/ice40/arch.cc +++ b/ice40/arch.cc @@ -313,7 +313,7 @@ delay_t Arch::estimateDelay(WireId src, WireId dst) const delay_t x2 = chip_info->wire_data[dst.index].x; delay_t y2 = chip_info->wire_data[dst.index].y; - return fabsf(x1 - x2) + fabsf(y1 - y2); + return delay_t(50 * (fabsf(x1 - x2) + fabsf(y1 - y2))); } // ----------------------------------------------------------------------- diff --git a/ice40/main.cc b/ice40/main.cc index 13d8ac0b..d83018ef 100644 --- a/ice40/main.cc +++ b/ice40/main.cc @@ -224,8 +224,16 @@ int main(int argc, char *argv[]) if (vm.count("tmfuzz")) { std::vector src_wires, dst_wires; - for (auto w : ctx.getWires()) - src_wires.push_back(w); + /*for (auto w : ctx.getWires()) + src_wires.push_back(w);*/ + for (auto b : ctx.getBels()) { + if (ctx.getBelType(b) == TYPE_ICESTORM_LC) { + src_wires.push_back(ctx.getWireBelPin(b, PIN_O)); + } + if (ctx.getBelType(b) == TYPE_SB_IO) { + src_wires.push_back(ctx.getWireBelPin(b, PIN_D_IN_0)); + } + } for (auto b : ctx.getBels()) { if (ctx.getBelType(b) == TYPE_ICESTORM_LC) { From c515e5da2df1003addc02ffa606f5bda1cf1f475 Mon Sep 17 00:00:00 2001 From: David Shah Date: Wed, 20 Jun 2018 17:54:07 +0200 Subject: [PATCH 6/6] Improving placement timing heuristic Signed-off-by: David Shah --- common/place_sa.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/place_sa.cc b/common/place_sa.cc index 485ddc88..2b8b960b 100644 --- a/common/place_sa.cc +++ b/common/place_sa.cc @@ -315,7 +315,10 @@ class SAPlacer // wirelength += std::abs(load_x - driver_x) + std::abs(load_y - // driver_y); delay_t raw_wl = ctx->estimateDelay(drv_wire, user_wire); - wirelength += 100 * (ctx->getDelayNS(raw_wl) / ctx->getDelayNS(load.budget)); + wirelength += pow(1.3, (ctx->getDelayNS(raw_wl) - + ctx->getDelayNS(load.budget)) / + 10) + + ctx->getDelayNS(raw_wl); // wirelength += pow(ctx->estimateDelay(drv_wire, user_wire), 2.0); } return wirelength;