aboutsummaryrefslogtreecommitdiffstats
path: root/ice40/chipdb.py
diff options
context:
space:
mode:
authorSergiusz Bazanski <q3k@q3k.org>2018-07-24 02:05:30 +0100
committerSergiusz Bazanski <q3k@q3k.org>2018-07-24 02:55:40 +0100
commit65ceb20784ccd0e2be71c733dbc23dc61d83d653 (patch)
tree6c96b1246c5ecbc26c59227f81433dfb1bce8f8c /ice40/chipdb.py
parentfae7994bc34b302dbd35c0793a9ce9f81234dbc1 (diff)
downloadnextpnr-65ceb20784ccd0e2be71c733dbc23dc61d83d653.tar.gz
nextpnr-65ceb20784ccd0e2be71c733dbc23dc61d83d653.tar.bz2
nextpnr-65ceb20784ccd0e2be71c733dbc23dc61d83d653.zip
ice40: emit list of upbels in chipdb
Diffstat (limited to 'ice40/chipdb.py')
-rw-r--r--ice40/chipdb.py30
1 files changed, 18 insertions, 12 deletions
diff --git a/ice40/chipdb.py b/ice40/chipdb.py
index 602477a0..38989a0b 100644
--- a/ice40/chipdb.py
+++ b/ice40/chipdb.py
@@ -41,7 +41,7 @@ extra_cells = dict()
extra_cell_config = dict()
packages = list()
-wire_uphill_belport = dict()
+wire_uphill_belports = dict()
wire_downhill_belports = dict()
wire_belports = dict()
@@ -462,8 +462,9 @@ def add_bel_input(bel, wire, port):
bel_wires[bel].append((wire, port, 0))
def add_bel_output(bel, wire, port):
- assert wire not in wire_uphill_belport
- wire_uphill_belport[wire] = (bel, port)
+ if wire not in wire_uphill_belports:
+ wire_uphill_belports[wire] = set()
+ wire_uphill_belports[wire].add((bel, port))
if wire not in wire_belports:
wire_belports[wire] = set()
wire_belports[wire].add((bel, port))
@@ -1042,6 +1043,15 @@ for wire in range(num_wires):
num_downhill = 0
list_downhill = None
+ if wire in wire_uphill_belports:
+ num_bels_uphill = len(wire_uphill_belports[wire])
+ bba.l("wire%d_upbels" % wire, "BelPortPOD")
+ for belport in sorted(wire_uphill_belports[wire]):
+ bba.u32(belport[0], "bel_index")
+ bba.u32(portpins[belport[1]], "port")
+ else:
+ num_bels_uphill = 0
+
if wire in wire_downhill_belports:
num_bels_downhill = len(wire_downhill_belports[wire])
bba.l("wire%d_downbels" % wire, "BelPortPOD")
@@ -1072,16 +1082,12 @@ for wire in range(num_wires):
info["num_bels_downhill"] = num_bels_downhill
info["list_bels_downhill"] = ("wire%d_downbels" % wire) if num_bels_downhill > 0 else None
+ info["num_bels_uphill"] = num_bels_uphill
+ info["list_bels_uphill"] = ("wire%d_upbels" % wire) if num_bels_uphill > 0 else None
+
info["num_bel_pins"] = num_bel_pins
info["list_bel_pins"] = ("wire%d_bels" % wire) if num_bel_pins > 0 else None
- if wire in wire_uphill_belport:
- info["uphill_bel"] = wire_uphill_belport[wire][0]
- info["uphill_pin"] = portpins[wire_uphill_belport[wire][1]]
- else:
- info["uphill_bel"] = -1
- info["uphill_pin"] = 0
-
avg_x, avg_y = 0, 0
if wire in wire_xy:
for x, y in wire_xy[wire]:
@@ -1156,9 +1162,9 @@ for wire, info in enumerate(wireinfo):
bba.u32(info["num_downhill"], "num_downhill")
bba.r(info["list_uphill"], "pips_uphill")
bba.r(info["list_downhill"], "pips_downhill")
+ bba.u32(info["num_bels_uphill"], "num_bels_uphill")
bba.u32(info["num_bels_downhill"], "num_bels_downhill")
- bba.u32(info["uphill_bel"], "bel_uphill.bel_index")
- bba.u32(info["uphill_pin"], "bel_uphill.port")
+ bba.r(info["list_bels_uphill"], "bels_uphill")
bba.r(info["list_bels_downhill"], "bels_downhill")
bba.u32(info["num_bel_pins"], "num_bel_pins")
bba.r(info["list_bel_pins"], "bel_pins")