fpga_interchange: cmake: generate only one device family

Signed-off-by: Alessandro Comodi <acomodi@antmicro.com>
This commit is contained in:
Alessandro Comodi 2021-03-12 16:37:00 +01:00
parent 77ffdd7fd4
commit 490fdb0a1c
9 changed files with 72 additions and 49 deletions

View File

@ -1,6 +1,6 @@
function(create_rapidwright_device_db) function(create_rapidwright_device_db)
set(options) set(options)
set(oneValueArgs part) set(oneValueArgs device part)
set(multiValueArgs) set(multiValueArgs)
cmake_parse_arguments( cmake_parse_arguments(
@ -11,6 +11,7 @@ function(create_rapidwright_device_db)
${ARGN} ${ARGN}
) )
set(device ${create_rapidwright_device_db_device})
set(part ${create_rapidwright_device_db_part}) set(part ${create_rapidwright_device_db_part})
set(rapidwright_device_db ${CMAKE_CURRENT_BINARY_DIR}/${part}.device) set(rapidwright_device_db ${CMAKE_CURRENT_BINARY_DIR}/${part}.device)
add_custom_command( add_custom_command(
@ -24,35 +25,32 @@ function(create_rapidwright_device_db)
${RAPIDWRIGHT_PATH}/scripts/invoke_rapidwright.sh ${RAPIDWRIGHT_PATH}/scripts/invoke_rapidwright.sh
) )
add_custom_target(rapidwright-${part}-device DEPENDS ${rapidwright_device_db}) add_custom_target(rapidwright-${device}-device DEPENDS ${rapidwright_device_db})
set_property(TARGET rapidwright-${part}-device PROPERTY LOCATION ${rapidwright_device_db}) set_property(TARGET rapidwright-${device}-device PROPERTY LOCATION ${rapidwright_device_db})
endfunction() endfunction()
function(generate_chipdb) function(create_patched_device_db)
set(options) set(options)
set(oneValueArgs part) set(oneValueArgs device)
set(multiValueArgs) set(multiValueArgs)
cmake_parse_arguments( cmake_parse_arguments(
generate_chipdb create_patched_device_db
"${options}" "${options}"
"${oneValueArgs}" "${oneValueArgs}"
"${multiValueArgs}" "${multiValueArgs}"
${ARGN} ${ARGN}
) )
set(part ${generate_chipdb_part}) set(device ${create_patched_device_db_device})
create_rapidwright_device_db(part ${part}) get_property(rapidwright_device_loc TARGET rapidwright-${device}-device PROPERTY LOCATION)
set(rapidwright_device_target rapidwright-${part}-device) set(constraints_device ${CMAKE_CURRENT_BINARY_DIR}/${device}_constraints.device)
get_property(rapidwright_device_loc TARGET ${rapidwright_device_target} PROPERTY LOCATION)
set(constraints_device ${CMAKE_CURRENT_BINARY_DIR}/${part}_constraints.device)
add_custom_command( add_custom_command(
OUTPUT ${constraints_device} OUTPUT ${constraints_device}
COMMAND COMMAND
python3 -mfpga_interchange.patch ${PYTHON_EXECUTABLE} -mfpga_interchange.patch
--schema_dir ${INTERCHANGE_SCHEMA_PATH} --schema_dir ${INTERCHANGE_SCHEMA_PATH}
--schema device --schema device
--patch_path constraints --patch_path constraints
@ -61,16 +59,16 @@ function(generate_chipdb)
${PYTHON_INTERCHANGE_PATH}/test_data/series7_constraints.yaml ${PYTHON_INTERCHANGE_PATH}/test_data/series7_constraints.yaml
${constraints_device} ${constraints_device}
DEPENDS DEPENDS
${rapidwright_device_target} rapidwright-${device}-device
) )
add_custom_target(constraints-${part}-device DEPENDS ${constraints_device}) add_custom_target(constraints-${device}-device DEPENDS ${constraints_device})
set(constraints_luts_device ${CMAKE_CURRENT_BINARY_DIR}/${part}_constraints_luts.device) set(constraints_luts_device ${CMAKE_CURRENT_BINARY_DIR}/${device}_constraints_luts.device)
add_custom_command( add_custom_command(
OUTPUT ${constraints_luts_device} OUTPUT ${constraints_luts_device}
COMMAND COMMAND
python3 -mfpga_interchange.patch ${PYTHON_EXECUTABLE} -mfpga_interchange.patch
--schema_dir ${INTERCHANGE_SCHEMA_PATH} --schema_dir ${INTERCHANGE_SCHEMA_PATH}
--schema device --schema device
--patch_path lutDefinitions --patch_path lutDefinitions
@ -82,26 +80,50 @@ function(generate_chipdb)
${constraints_device} ${constraints_device}
) )
add_custom_target(constraints-luts-${part}-device DEPENDS ${constraints_luts_device}) add_custom_target(constraints-luts-${device}-device DEPENDS ${constraints_luts_device})
set_property(TARGET constraints-luts-${part}-device PROPERTY LOCATION ${constraints_luts_device}) set_property(TARGET constraints-luts-${device}-device PROPERTY LOCATION ${constraints_luts_device})
endfunction()
set(chipdb_bba ${chipdb_dir}/chipdb-${part}.bba) function(generate_chipdb)
set(options)
set(oneValueArgs device part)
set(multiValueArgs)
cmake_parse_arguments(
generate_chipdb
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
${ARGN}
)
set(device ${generate_chipdb_device})
set(part ${generate_chipdb_part})
create_rapidwright_device_db(
device ${device}
part ${part}
)
create_patched_device_db(device ${device})
get_property(constrained_luts_device_loc TARGET constraints-luts-${device}-device PROPERTY LOCATION)
set(chipdb_bba ${chipdb_dir}/chipdb-${device}.bba)
add_custom_command( add_custom_command(
OUTPUT ${chipdb_bba} OUTPUT ${chipdb_bba}
COMMAND COMMAND
python3 -mfpga_interchange.nextpnr_emit ${PYTHON_EXECUTABLE} -mfpga_interchange.nextpnr_emit
--schema_dir ${INTERCHANGE_SCHEMA_PATH} --schema_dir ${INTERCHANGE_SCHEMA_PATH}
--output_dir ${chipdb_dir} --output_dir ${CMAKE_CURRENT_BINARY_DIR}
--bel_bucket_seeds ${PYTHON_INTERCHANGE_PATH}/test_data/series7_bel_buckets.yaml --bel_bucket_seeds ${PYTHON_INTERCHANGE_PATH}/test_data/series7_bel_buckets.yaml
--device ${constraints_luts_device} --device ${constrained_luts_device_loc}
COMMAND COMMAND
mv ${chipdb_dir}/chipdb.bba ${chipdb_bba} mv ${CMAKE_CURRENT_BINARY_DIR}/chipdb.bba ${chipdb_bba}
DEPENDS DEPENDS
${constraints_luts_device} constraints-luts-${device}-device
) )
add_custom_target(chipdb-${part}-bba DEPENDS ${chipdb_bba}) add_custom_target(chipdb-${device}-bba DEPENDS ${chipdb_bba})
add_dependencies(chipdb-${family}-bbas chipdb-${part}-bba) add_dependencies(chipdb-${family}-bbas chipdb-${device}-bba)
endfunction() endfunction()
set(chipdb_dir ${CMAKE_CURRENT_BINARY_DIR}/${family}/chipdb) set(chipdb_dir ${CMAKE_CURRENT_BINARY_DIR}/${family}/chipdb)

View File

@ -1 +1,4 @@
add_subdirectory(xc7a35t) generate_chipdb(
device xc7a50t
part xc7a50tfgg484-1
)

View File

@ -1,2 +0,0 @@
generate_chipdb(part xc7a35tcsg324-1)
generate_chipdb(part xc7a35tcpg236-1)

View File

@ -2,8 +2,8 @@ function(add_interchange_test)
# ~~~ # ~~~
# add_interchange_test( # add_interchange_test(
# name <name> # name <name>
# part <part> # device <common device>
# part <package> # package <package>
# tcl <tcl> # tcl <tcl>
# xdc <xdc> # xdc <xdc>
# top <top name> # top <top name>
@ -12,7 +12,7 @@ function(add_interchange_test)
# ~~~ # ~~~
set(options) set(options)
set(oneValueArgs name part package tcl xdc top) set(oneValueArgs name device package tcl xdc top)
set(multiValueArgs sources) set(multiValueArgs sources)
cmake_parse_arguments( cmake_parse_arguments(
@ -24,7 +24,7 @@ function(add_interchange_test)
) )
set(name ${add_interchange_test_name}) set(name ${add_interchange_test_name})
set(part ${add_interchange_test_part}) set(device ${add_interchange_test_device})
set(package ${add_interchange_test_package}) set(package ${add_interchange_test_package})
set(top ${add_interchange_test_top}) set(top ${add_interchange_test_top})
set(tcl ${CMAKE_CURRENT_SOURCE_DIR}/${add_interchange_test_tcl}) set(tcl ${CMAKE_CURRENT_SOURCE_DIR}/${add_interchange_test_tcl})
@ -54,14 +54,14 @@ function(add_interchange_test)
add_custom_target(test-${family}-${name}-json DEPENDS ${synth_json}) add_custom_target(test-${family}-${name}-json DEPENDS ${synth_json})
# Logical Netlist # Logical Netlist
set(device_target constraints-luts-${part}-device) set(device_target constraints-luts-${device}-device)
get_property(device_loc TARGET constraints-luts-${part}-device PROPERTY LOCATION) get_property(device_loc TARGET constraints-luts-${device}-device PROPERTY LOCATION)
set(netlist ${CMAKE_CURRENT_BINARY_DIR}/${name}.netlist) set(netlist ${CMAKE_CURRENT_BINARY_DIR}/${name}.netlist)
add_custom_command( add_custom_command(
OUTPUT ${netlist} OUTPUT ${netlist}
COMMAND COMMAND
python3 -mfpga_interchange.yosys_json ${PYTHON_EXECUTABLE} -mfpga_interchange.yosys_json
--schema_dir ${INTERCHANGE_SCHEMA_PATH} --schema_dir ${INTERCHANGE_SCHEMA_PATH}
--device ${device_loc} --device ${device_loc}
--top ${top} --top ${top}
@ -74,7 +74,7 @@ function(add_interchange_test)
add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist}) add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist})
set(chipdb_target chipdb-${part}-bba) set(chipdb_target chipdb-${device}-bba)
# Physical Netlist # Physical Netlist
set(phys ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys) set(phys ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys)
@ -82,7 +82,7 @@ function(add_interchange_test)
OUTPUT ${phys} OUTPUT ${phys}
COMMAND COMMAND
nextpnr-fpga_interchange nextpnr-fpga_interchange
--chipdb ${chipdb_dir}/chipdb-${part}.bba --chipdb ${chipdb_dir}/chipdb-${device}.bba
--xdc ${xdc} --xdc ${xdc}
--netlist ${netlist} --netlist ${netlist}
--phys ${phys} --phys ${phys}

View File

@ -1,6 +1,6 @@
add_interchange_test( add_interchange_test(
name const_wire_basys3 name const_wire_basys3
part xc7a35tcpg236-1 device xc7a50t
package cpg236 package cpg236
tcl run.tcl tcl run.tcl
xdc wire.xdc xdc wire.xdc
@ -9,7 +9,7 @@ add_interchange_test(
add_interchange_test( add_interchange_test(
name const_wire_arty name const_wire_arty
part xc7a35tcsg324-1 device xc7a50t
package csg324 package csg324
tcl run.tcl tcl run.tcl
xdc wire.xdc xdc wire.xdc

View File

@ -1,6 +1,6 @@
add_interchange_test( add_interchange_test(
name counter_basys3 name counter_basys3
part xc7a35tcpg236-1 device xc7a50t
package cpg236 package cpg236
tcl run.tcl tcl run.tcl
xdc counter.xdc xdc counter.xdc
@ -9,7 +9,7 @@ add_interchange_test(
add_interchange_test( add_interchange_test(
name counter_arty name counter_arty
part xc7a35tcsg324-1 device xc7a50t
package csg324 package csg324
tcl run.tcl tcl run.tcl
xdc counter.xdc xdc counter.xdc

View File

@ -1,6 +1,6 @@
add_interchange_test( add_interchange_test(
name ff_basys3 name ff_basys3
part xc7a35tcpg236-1 device xc7a50t
package cpg236 package cpg236
tcl run.tcl tcl run.tcl
xdc ff.xdc xdc ff.xdc
@ -9,7 +9,7 @@ add_interchange_test(
add_interchange_test( add_interchange_test(
name ff_arty name ff_arty
part xc7a35tcsg324-1 device xc7a50t
package csg324 package csg324
tcl run.tcl tcl run.tcl
xdc ff.xdc xdc ff.xdc

View File

@ -1,6 +1,6 @@
add_interchange_test( add_interchange_test(
name lut_basys3 name lut_basys3
part xc7a35tcpg236-1 device xc7a50t
package cpg236 package cpg236
tcl run.tcl tcl run.tcl
xdc lut.xdc xdc lut.xdc
@ -9,7 +9,7 @@ add_interchange_test(
add_interchange_test( add_interchange_test(
name lut_arty name lut_arty
part xc7a35tcsg324-1 device xc7a50t
package csg324 package csg324
tcl run.tcl tcl run.tcl
xdc lut.xdc xdc lut.xdc

View File

@ -1,6 +1,6 @@
add_interchange_test( add_interchange_test(
name wire_basys3 name wire_basys3
part xc7a35tcpg236-1 device xc7a50t
package cpg236 package cpg236
tcl run.tcl tcl run.tcl
xdc wire.xdc xdc wire.xdc
@ -9,7 +9,7 @@ add_interchange_test(
add_interchange_test( add_interchange_test(
name wire_arty name wire_arty
part xc7a35tcsg324-1 device xc7a50t
package csg324 package csg324
tcl run.tcl tcl run.tcl
xdc wire.xdc xdc wire.xdc