aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorKeith Rothman <537074+litghost@users.noreply.github.com>2021-02-17 18:34:32 -0800
committerKeith Rothman <537074+litghost@users.noreply.github.com>2021-02-23 14:09:27 -0800
commit3e5a23ed5b25570c33669dfd8bdd226016968bb5 (patch)
tree5bc717a0271aa0cc39747a229ee1055bd042fb11 /python
parent761d9d9229f9c1aa5420a12c5d3e4c2aab53bb11 (diff)
downloadnextpnr-3e5a23ed5b25570c33669dfd8bdd226016968bb5.tar.gz
nextpnr-3e5a23ed5b25570c33669dfd8bdd226016968bb5.tar.bz2
nextpnr-3e5a23ed5b25570c33669dfd8bdd226016968bb5.zip
Add tests to confirm constant routing import.
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
Diffstat (limited to 'python')
-rw-r--r--python/check_arch_api.py51
1 files changed, 42 insertions, 9 deletions
diff --git a/python/check_arch_api.py b/python/check_arch_api.py
index 647faefc..166f1fd3 100644
--- a/python/check_arch_api.py
+++ b/python/check_arch_api.py
@@ -18,6 +18,11 @@ pin connectivity tests. Example test_data.yaml:
pip_test:
- src_wire: CLBLM_R_X11Y93/CLBLM_L_D3
dst_wire: SLICE_X15Y93.SLICEL/D3
+pip_chain_test:
+ - wires:
+ - $CONSTANTS_X0Y0.$CONSTANTS/$GND_SOURCE
+ - $CONSTANTS_X0Y0/$GND_NODE
+ - TIEOFF_X3Y145.TIEOFF/$GND_SITE_WIRE
bel_pin_test:
- bel: SLICE_X15Y93.SLICEL/D6LUT
pin: A3
@@ -25,25 +30,48 @@ bel_pin_test:
"""
import yaml
+import sys
+
+
def check_arch_api(ctx):
+ success = True
pips_tested = 0
+ pips_failed = 0
+
+ def test_pip(src_wire_name, dst_wire_name):
+ nonlocal success
+ nonlocal pips_tested
+ nonlocal pips_failed
+
+ pip = None
+ for pip_name in ctx.getPipsDownhill(src_wire_name):
+ if ctx.getPipDstWire(pip_name) == dst_wire_name:
+ pip = pip_name
+ src_wire = ctx.getPipSrcWire(pip_name)
+ assert src_wire == src_wire_name, (
+ src_wire, src_wire_name)
+
+
+ if pip is None:
+ success = False
+ pips_failed += 1
+ print('Pip from {} to {} failed'.format(src_wire_name, dst_wire_name))
+ else:
+ pips_tested += 1
bel_pins_tested = 0
with open('test_data.yaml', 'r') as f:
test_data = yaml.safe_load(f.read())
if 'pip_test' in test_data:
for pip_test in test_data['pip_test']:
- pip = None
- for pip_name in ctx.getPipsDownhill(pip_test['src_wire']):
- if ctx.getPipDstWire(pip_name) == pip_test['dst_wire']:
- pip = pip_name
- src_wire = ctx.getPipSrcWire(pip_name)
- assert src_wire == pip_test['src_wire'], (
- src_wire, pip_test['src_wire'])
+ test_pip(pip_test['src_wire'], pip_test['dst_wire'])
- assert pip is not None
- pips_tested += 1
+ if 'pip_chain_test' in test_data:
+ for chain_test in test_data['pip_chain_test']:
+ wires = chain_test['wires']
+ for src_wire, dst_wire in zip(wires, wires[1:]):
+ test_pip(src_wire, dst_wire)
if 'bel_pin_test' in test_data:
for bel_pin_test in test_data['bel_pin_test']:
@@ -54,4 +82,9 @@ def check_arch_api(ctx):
print('Tested {} pips and {} bel pins'.format(pips_tested, bel_pins_tested))
+ if not success:
+ print('{} pips failed'.format(pips_failed))
+ sys.exit(-1)
+
+
check_arch_api(ctx)