diff options
| author | Sergiusz Bazanski <q3k@q3k.org> | 2018-07-24 02:05:30 +0100 | 
|---|---|---|
| committer | Sergiusz Bazanski <q3k@q3k.org> | 2018-07-24 02:55:40 +0100 | 
| commit | 65ceb20784ccd0e2be71c733dbc23dc61d83d653 (patch) | |
| tree | 6c96b1246c5ecbc26c59227f81433dfb1bce8f8c /ice40/chipdb.py | |
| parent | fae7994bc34b302dbd35c0793a9ce9f81234dbc1 (diff) | |
| download | nextpnr-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.py | 30 | 
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") | 
