aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x.github/ci/build_interchange.sh2
-rw-r--r--.github/workflows/interchange_ci.yml4
-rw-r--r--fpga_interchange/examples/boards/CMakeLists.txt7
-rw-r--r--fpga_interchange/examples/devices/CMakeLists.txt1
-rw-r--r--fpga_interchange/examples/devices/LIFCL-40/CMakeLists.txt13
-rw-r--r--fpga_interchange/examples/devices/LIFCL-40/test_data.yaml8
-rw-r--r--fpga_interchange/examples/tests/counter/CMakeLists.txt2
-rw-r--r--fpga_interchange/examples/tests/counter/lifcl40evn.xdc13
-rw-r--r--fpga_interchange/examples/tests/lut_nexus/CMakeLists.txt11
-rw-r--r--fpga_interchange/examples/tests/wire/CMakeLists.txt9
-rw-r--r--fpga_interchange/examples/tests/wire/lifcl40evn.xdc5
-rw-r--r--fpga_interchange/examples/tests/wire/run_nexus.tcl14
12 files changed, 85 insertions, 4 deletions
diff --git a/.github/ci/build_interchange.sh b/.github/ci/build_interchange.sh
index c0da8b77..ed6e82bd 100755
--- a/.github/ci/build_interchange.sh
+++ b/.github/ci/build_interchange.sh
@@ -35,7 +35,7 @@ function get_dependencies {
python3 -m pip install -r requirements.txt
popd
- if [ ${DEVICE} == "LIFCL-17" ]; then
+ if [ ${DEVICE} == "LIFCL-17" ] || [ ${DEVICE} == "LIFCL-40" ]; then
# Install prjoxide
curl --proto '=https' -sSf https://sh.rustup.rs | sh -s -- -y
git clone --recursive https://github.com/gatecat/prjoxide.git
diff --git a/.github/workflows/interchange_ci.yml b/.github/workflows/interchange_ci.yml
index 54ddcc83..d60fdeb4 100644
--- a/.github/workflows/interchange_ci.yml
+++ b/.github/workflows/interchange_ci.yml
@@ -73,7 +73,7 @@ jobs:
# debugging CI failures.
fail-fast: false
matrix:
- device: [xc7a35t, xc7a100t, xc7a200t, xc7z010, LIFCL-17]
+ device: [xc7a35t, xc7a100t, xc7a200t, xc7z010, LIFCL-17, LIFCL-40]
steps:
- uses: actions/checkout@v2
@@ -115,7 +115,7 @@ jobs:
RAPIDWRIGHT_PATH: ${{ github.workspace }}/RapidWright
PYTHON_INTERCHANGE_PATH: ${{ github.workspace }}/python-fpga-interchange
PYTHON_INTERCHANGE_TAG: v0.0.13
- PRJOXIDE_REVISION: 7b3e4f85562d3b86a367e8d97d4314ebdee7647a
+ PRJOXIDE_REVISION: 82b23868d768dac9a5541331e3ddc4c4062627f7
DEVICE: ${{ matrix.device }}
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
diff --git a/fpga_interchange/examples/boards/CMakeLists.txt b/fpga_interchange/examples/boards/CMakeLists.txt
index e5aae739..ef4a97c5 100644
--- a/fpga_interchange/examples/boards/CMakeLists.txt
+++ b/fpga_interchange/examples/boards/CMakeLists.txt
@@ -40,3 +40,10 @@ add_board(
device LIFCL-17
package QFN72
)
+
+add_board(
+ name lifcl40evn
+ device_family nexus
+ device LIFCL-40
+ package CABGA400
+)
diff --git a/fpga_interchange/examples/devices/CMakeLists.txt b/fpga_interchange/examples/devices/CMakeLists.txt
index ff01bd3c..1cf8ad43 100644
--- a/fpga_interchange/examples/devices/CMakeLists.txt
+++ b/fpga_interchange/examples/devices/CMakeLists.txt
@@ -8,3 +8,4 @@ add_subdirectory(xc7z010)
# Nexus devices
add_subdirectory(LIFCL-17)
+add_subdirectory(LIFCL-40)
diff --git a/fpga_interchange/examples/devices/LIFCL-40/CMakeLists.txt b/fpga_interchange/examples/devices/LIFCL-40/CMakeLists.txt
new file mode 100644
index 00000000..d6310116
--- /dev/null
+++ b/fpga_interchange/examples/devices/LIFCL-40/CMakeLists.txt
@@ -0,0 +1,13 @@
+generate_nexus_device_db(
+ device LIFCL-40
+ device_target lifcl40_target
+)
+
+generate_chipdb(
+ family ${family}
+ device LIFCL-40
+ part LIFCL-40-9BG400C
+ device_target ${lifcl40_target}
+ device_config ${PYTHON_INTERCHANGE_PATH}/test_data/nexus_device_config.yaml
+ test_package CABGA400
+)
diff --git a/fpga_interchange/examples/devices/LIFCL-40/test_data.yaml b/fpga_interchange/examples/devices/LIFCL-40/test_data.yaml
new file mode 100644
index 00000000..c4787eba
--- /dev/null
+++ b/fpga_interchange/examples/devices/LIFCL-40/test_data.yaml
@@ -0,0 +1,8 @@
+pip_test:
+ - src_wire: R3C3_PLC.PLC/JDI0_SLICEA
+ dst_wire: R3C3/JF0
+bel_pin_test:
+ - bel: R7C3_PLC.PLC/SLICEA_LUT0
+ pin: D
+ wire: R7C3_PLC.PLC/JD0_SLICEA
+
diff --git a/fpga_interchange/examples/tests/counter/CMakeLists.txt b/fpga_interchange/examples/tests/counter/CMakeLists.txt
index 91929f93..2e0eefcc 100644
--- a/fpga_interchange/examples/tests/counter/CMakeLists.txt
+++ b/fpga_interchange/examples/tests/counter/CMakeLists.txt
@@ -11,7 +11,7 @@ add_interchange_group_test(
add_interchange_group_test(
name counter
family ${family}
- board_list lifcl17
+ board_list lifcl17 lifcl40evn
tcl run_nexus.tcl
sources counter.v
techmap ../../remap_nexus.v
diff --git a/fpga_interchange/examples/tests/counter/lifcl40evn.xdc b/fpga_interchange/examples/tests/counter/lifcl40evn.xdc
new file mode 100644
index 00000000..4f378aef
--- /dev/null
+++ b/fpga_interchange/examples/tests/counter/lifcl40evn.xdc
@@ -0,0 +1,13 @@
+set_property PACKAGE_PIN L13 [get_ports clk]
+set_property PACKAGE_PIN G19 [get_ports rst]
+set_property PACKAGE_PIN E17 [get_ports io_led[4]]
+set_property PACKAGE_PIN F13 [get_ports io_led[5]]
+set_property PACKAGE_PIN G13 [get_ports io_led[6]]
+set_property PACKAGE_PIN F14 [get_ports io_led[7]]
+
+set_property IOSTANDARD LVCMOS33 [get_ports clk]
+set_property IOSTANDARD LVCMOS33 [get_ports rst]
+set_property IOSTANDARD LVCMOS33 [get_ports io_led[4]]
+set_property IOSTANDARD LVCMOS33 [get_ports io_led[5]]
+set_property IOSTANDARD LVCMOS33 [get_ports io_led[6]]
+set_property IOSTANDARD LVCMOS33 [get_ports io_led[7]]
diff --git a/fpga_interchange/examples/tests/lut_nexus/CMakeLists.txt b/fpga_interchange/examples/tests/lut_nexus/CMakeLists.txt
index 1c65d87e..7ca36343 100644
--- a/fpga_interchange/examples/tests/lut_nexus/CMakeLists.txt
+++ b/fpga_interchange/examples/tests/lut_nexus/CMakeLists.txt
@@ -8,3 +8,14 @@ add_interchange_test(
sources lut.v
skip_dcp
)
+
+add_interchange_test(
+ name lut_nexus40
+ family ${family}
+ device LIFCL-40
+ package CABGA400
+ tcl run.tcl
+ xdc empty.xdc
+ sources lut.v
+ skip_dcp
+)
diff --git a/fpga_interchange/examples/tests/wire/CMakeLists.txt b/fpga_interchange/examples/tests/wire/CMakeLists.txt
index 6308a6e9..9caffcd1 100644
--- a/fpga_interchange/examples/tests/wire/CMakeLists.txt
+++ b/fpga_interchange/examples/tests/wire/CMakeLists.txt
@@ -6,3 +6,12 @@ add_interchange_group_test(
sources wire.v
output_fasm
)
+
+add_interchange_group_test(
+ name wire
+ family ${family}
+ board_list lifcl40evn
+ tcl run_nexus.tcl
+ sources wire.v
+ skip_dcp
+)
diff --git a/fpga_interchange/examples/tests/wire/lifcl40evn.xdc b/fpga_interchange/examples/tests/wire/lifcl40evn.xdc
new file mode 100644
index 00000000..c1a87488
--- /dev/null
+++ b/fpga_interchange/examples/tests/wire/lifcl40evn.xdc
@@ -0,0 +1,5 @@
+set_property PACKAGE_PIN G19 [get_ports i]
+set_property PACKAGE_PIN E17 [get_ports o]
+
+set_property IOSTANDARD LVCMOS33 [get_ports i]
+set_property IOSTANDARD LVCMOS33 [get_ports o]
diff --git a/fpga_interchange/examples/tests/wire/run_nexus.tcl b/fpga_interchange/examples/tests/wire/run_nexus.tcl
new file mode 100644
index 00000000..cddad3f8
--- /dev/null
+++ b/fpga_interchange/examples/tests/wire/run_nexus.tcl
@@ -0,0 +1,14 @@
+yosys -import
+
+read_verilog $::env(SOURCES)
+
+synth_nexus -nolutram -nowidelut -nobram -noccu2 -nodsp
+
+# opt_expr -undriven makes sure all nets are driven, if only by the $undef
+# net.
+opt_expr -undriven
+opt_clean
+
+setundef -zero -params
+
+write_json $::env(OUT_JSON)