Merge remote-tracking branch 'origin' into facade
diff --git a/README.md b/README.md
index 4af0768..50455a8 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,8 @@
- CMake 3.5 or later
- Boost including boost-python
- Git
-
+ - Recent OpenOCD for device programming (`--enable-ftdi` required if building from source)
+
Clone the Project Trellis repository and download the latest database:
git clone --recursive https://github.com/SymbiFlow/prjtrellis
diff --git a/examples/README.md b/examples/README.md
index 85c770f..a379c33 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -5,7 +5,7 @@
## Disclaimer
-Project Trellis is currently **highly** experimental. Do not use it for anything mission critical like avionics, nuclear power or automatic cat feeders!
+Project Trellis is currently experimental. Do not use it for anything mission critical like avionics, nuclear power or automatic cat feeders!
Although I have not managed to destroy any FPGAs, there is a non-zero chance that the tools could produce a bitstream that destroys or degrades the FPGA. Do not
use with a development board that you cannot afford to lose!
@@ -16,18 +16,18 @@
## Included Projects
- - **tinyfpga**: morse blink example for the TinyFPGA Ex rev1 prototype with an 85k ECP5
+ - **tinyfpga_rev1/rev2**: morse blink example for the TinyFPGA Ex rev1/2 prototypes with an 85k ECP5
- **ulx3s**: "Night Rider" example for the 45k ULX3S board
- - **versa**: 14-segment display example for the ECP5 Versa Board
+ - **picorv32_ulx3s**: Small picorv32-based SoC for the 45k ULX3S board that displays prime numbers
+ on the LEDs.
+ - **versa5g**: 14-segment display example for the ECP5 Versa-5G board
+ - **picorv32_versa5g**: Small picorv32-based SoC for the ECP5 Versa-5G board that displays prime numbers
+ on the LEDs.
+ - **soc_versa5g**: Small picorv32-based SoC with RAM and UART for the ECP5 Versa-5G board
+ - **ecp5_evn**: "Night Rider" example for the ECP5 Evaluation Board
+ - **ecp5_evn_multiboot**: multiboot example for the ECP5 Evaluation Board
+ - **soc_ecp5_evn**: Small picorv32-based SoC with RAM and UART for the ECP5 Evaluation Board
-All projects include a Makefile for building (and programming in the case of the TinyFPGA example).
+All projects include a Makefile for building and programming.
-## Notes
-In all cases there are a handful of constant bits (that remain the same in all ECP5 designs), whose detailed function
-is unknown - even if the low-level purpose, such as tying an internal signal low, is known. This is why there is a
-"_empty.config" file in all examples. These files are also located in the `misc/basecfgs` folder. If you need to
-change any of the examples to a different ECP5 device, you will also need to pick the appropriate base config.
-
-IO constraints are currently specified as attributes on `TRELLIS_IO` primitives, reading IO constraint files
-is not yet implemented.
diff --git a/examples/ecp5_evn/README.md b/examples/ecp5_evn/README.md
new file mode 100644
index 0000000..fd67495
--- /dev/null
+++ b/examples/ecp5_evn/README.md
@@ -0,0 +1,6 @@
+# ECP5 Evaluation Board Example
+
+Run `make prog` to load the example to the board.
+
+You must ensure JP2 is shorted to connect the 12MHz
+FTDI clock to the FPGA.
\ No newline at end of file
diff --git a/examples/versa5g/README.md b/examples/versa5g/README.md
new file mode 100644
index 0000000..b390742
--- /dev/null
+++ b/examples/versa5g/README.md
@@ -0,0 +1,9 @@
+# ECP5 Versa-5G Demo
+
+Run `make prog` to build & load, LEDs will count and
+a message will scroll on the 14-segment display.
+
+If your Versa board is new, you will need to change
+J50 to bypass the iSPclock. Re-arrange the jumpers
+to connect pins 1-2 and 3-5 (leaving one jumper spare).
+See p19 of the Versa Board user guide.
diff --git a/libtrellis/CMakeLists.txt b/libtrellis/CMakeLists.txt
index f780213..dc49445 100644
--- a/libtrellis/CMakeLists.txt
+++ b/libtrellis/CMakeLists.txt
@@ -10,8 +10,8 @@
set(CMAKE_DEFIN)
set(link_param "")
if (STATIC_BUILD)
- set(Boost_USE_STATIC_LIBS ON)
- if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ set(Boost_USE_STATIC_LIBS ON)
+ if (NOT APPLE)
set(link_param "-static")
endif()
endif()
@@ -32,18 +32,18 @@
# Original source: https://github.com/BVLC/caffe/blob/master/cmake/Dependencies.cmake#L148
set(version ${PYTHONLIBS_VERSION_STRING})
- STRING(REGEX REPLACE "[^0-9]" "" boost_py_version ${version})
+ STRING(REGEX REPLACE "[^0-9]" "" boost_py_version "${version}")
find_package(Boost COMPONENTS "python-py${boost_py_version}" ${boost_libs})
set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
while (NOT "${version}" STREQUAL "" AND NOT Boost_PYTHON_FOUND)
- STRING(REGEX REPLACE "([0-9.]+).[0-9]+" "\\1" version ${version})
+ STRING(REGEX REPLACE "([0-9.]+).[0-9]+" "\\1" version "${version}")
- STRING(REGEX REPLACE "[^0-9]" "" boost_py_version ${version})
+ STRING(REGEX REPLACE "[^0-9]" "" boost_py_version "${version}")
find_package(Boost COMPONENTS "python-py${boost_py_version}" ${boost_libs})
set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
- STRING(REGEX MATCHALL "([0-9.]+).[0-9]+" has_more_version ${version})
+ STRING(REGEX MATCHALL "([0-9.]+).[0-9]+" has_more_version "${version}")
if ("${has_more_version}" STREQUAL "")
break()
endif ()
@@ -109,23 +109,23 @@
find_package(Boost REQUIRED COMPONENTS program_options)
get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
-if ("${LIB64}" STREQUAL "TRUE")
+if (NOT APPLE AND "${LIB64}" STREQUAL "TRUE")
set(LIBDIR "lib64")
else()
set(LIBDIR "lib")
endif()
function(setup_rpath name)
- if(APPLE)
- set_target_properties(${name} PROPERTIES
- BUILD_WITH_INSTALL_RPATH ON
- INSTALL_RPATH "@loader_path/../${LIBDIR}/trellis"
- INSTALL_NAME_DIR "@rpath")
- elseif(UNIX)
- set_target_properties(${name} PROPERTIES
- BUILD_WITH_INSTALL_RPATH ON
- INSTALL_RPATH "\$ORIGIN/../${LIBDIR}/trellis")
- endif()
+ if(APPLE)
+ set_target_properties(${name} PROPERTIES
+ BUILD_WITH_INSTALL_RPATH ON
+ INSTALL_RPATH "@loader_path/../${LIBDIR}/trellis"
+ INSTALL_NAME_DIR "@rpath")
+ elseif(UNIX)
+ set_target_properties(${name} PROPERTIES
+ BUILD_WITH_INSTALL_RPATH ON
+ INSTALL_RPATH "\$ORIGIN/../${LIBDIR}/trellis")
+ endif()
endfunction()
add_executable(ecppack ${INCLUDE_FILES} tools/ecppack.cpp)
@@ -149,7 +149,7 @@
setup_rpath(ecpmulti)
if (BUILD_SHARED)
- install(TARGETS trellis ecppack ecppll ecpunpack ecpmulti LIBRARY DESTINATION ${LIBDIR}/trellis RUNTIME DESTINATION bin)
+ install(TARGETS trellis ecppack ecppll ecpunpack ecpmulti pytrellis LIBRARY DESTINATION ${LIBDIR}/trellis RUNTIME DESTINATION bin)
else()
install(TARGETS ecppack ecpunpack ecppll ecpmulti RUNTIME DESTINATION bin)
endif()
@@ -157,6 +157,3 @@
install(DIRECTORY ../misc DESTINATION share/trellis)
install(DIRECTORY ../util/common DESTINATION share/trellis/util)
install(DIRECTORY ../timing/util DESTINATION share/trellis/timing USE_SOURCE_PERMISSIONS)
-if (BUILD_SHARED)
- install(TARGETS pytrellis DESTINATION ${LIBDIR}/trellis)
-endif()