
The following primitives are implemented for the GW1NZ-1 chip: * pROM - read only memory - (bitwidth: 1, 2, 4, 8, 16, 32). * pROMX9 - read only memory - (bitwidth: 9, 18, 36). * SDPB - semidual port - (bitwidth: 1, 2, 4, 8, 16, 32). * SDPX9B - semidual port - (bitwidth: 9, 18, 36). * DPB - dual port - (bitwidth: 16). * DPX9B - dual port - (bitwidth: 18). * SP - single port - (bitwidth: 1, 2, 4, 8, 16, 32). * SPX9 - single port - (bitwidth: 9, 18, 36). Also: - The creation of databases for GW1NS-2 has been removed - this was not planned to be supported in Himbaechel from the very beginning and even examples were not created in apicula for this chip due to the lack of boards with it on sale. - It is temporarily prohibited to connect DFFs and LUTs into clusters because for some reason this prevents the creation of images on lower chips (placer cannot find the placement), although without these clusters the images are quite working. Requires further research. - Added creation of ALU with mode 0 - addition. Such an element is not generated by Yosys, but it is a favorite vendor element and its support here greatly simplifies the compilation of vendor netlists. Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
53 lines
2.3 KiB
CMake
53 lines
2.3 KiB
CMake
message(STATUS "Configuring Himbaechel-Gowin uarch")
|
|
cmake_minimum_required(VERSION 3.5)
|
|
project(himbaechel-gowin-chipdb NONE)
|
|
|
|
find_package(Python3 3.5 REQUIRED COMPONENTS Interpreter)
|
|
set(ALL_HIMBAECHEL_GOWIN_DEVICES GW1N-1 GW1NZ-1 GW1N-4 GW1N-9 GW1N-9C GW1NS-4 GW2A-18 GW2A-18C)
|
|
set(HIMBAECHEL_GOWIN_DEVICES "" CACHE STRING
|
|
"Include support for these Gowin devices (available: ${ALL_HIMBAECHEL_GOWIN_DEVICES})")
|
|
if(HIMBAECHEL_GOWIN_DEVICES STREQUAL "all")
|
|
set(HIMBAECHEL_GOWIN_DEVICES ${ALL_HIMBAECHEL_GOWIN_DEVICES})
|
|
endif()
|
|
message(STATUS "Enabled Himbaechel-Gowin devices: ${HIMBAECHEL_GOWIN_DEVICES}")
|
|
|
|
if(DEFINED ENV{APYCULA_INSTALL_PREFIX})
|
|
set(apycula_default_install_prefix $ENV{APYCULA_INSTALL_PREFIX})
|
|
endif()
|
|
set(APYCULA_INSTALL_PREFIX ${apycula_default_install_prefix} CACHE STRING
|
|
"Apycula install prefix (virtualenv directory)")
|
|
if(NOT APYCULA_INSTALL_PREFIX STREQUAL "")
|
|
message(STATUS "Apycula install prefix: ${APYCULA_INSTALL_PREFIX}")
|
|
set(apycula_Python3_EXECUTABLE ${APYCULA_INSTALL_PREFIX}/bin/python)
|
|
else()
|
|
message(STATUS "Apycula install prefix: (using system Python)")
|
|
set(apycula_Python3_EXECUTABLE ${Python3_EXECUTABLE})
|
|
endif()
|
|
|
|
set(chipdb_binaries)
|
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/share/himbaechel/gowin)
|
|
foreach(device ${HIMBAECHEL_GOWIN_DEVICES})
|
|
if(NOT device IN_LIST ALL_HIMBAECHEL_GOWIN_DEVICES)
|
|
message(FATAL_ERROR "Device ${device} is not a supported Gowin device")
|
|
endif()
|
|
|
|
set(device_bba ${CMAKE_BINARY_DIR}/share/himbaechel/gowin/chipdb-${device}.bba)
|
|
set(device_bin ${CMAKE_BINARY_DIR}/share/himbaechel/gowin/chipdb-${device}.bin)
|
|
add_custom_command(
|
|
OUTPUT ${device_bin}
|
|
COMMAND ${apycula_Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/gowin_arch_gen.py -d ${device} -o ${device_bba}
|
|
COMMAND bbasm ${BBASM_ENDIAN_FLAG} ${device_bba} ${device_bin}.new
|
|
# atomically update
|
|
COMMAND ${CMAKE_COMMAND} -E rename ${device_bin}.new ${device_bin}
|
|
DEPENDS
|
|
bbasm
|
|
${CMAKE_CURRENT_SOURCE_DIR}/gowin_arch_gen.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/constids.inc
|
|
VERBATIM)
|
|
list(APPEND chipdb_binaries ${device_bin})
|
|
endforeach()
|
|
|
|
add_custom_target(chipdb-himbaechel-gowin ALL DEPENDS ${chipdb_binaries})
|
|
install(DIRECTORY ${CMAKE_BINARY_DIR}/share/himbaechel/gowin/ DESTINATION share/nextpnr/himbaechel/gowin
|
|
PATTERN "*.bba" EXCLUDE)
|