mirror of https://github.com/openXC7/prjxray.git
Fix fasm_assembler for partial tile usage.
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
This commit is contained in:
parent
52bae5e02f
commit
d0c1efbfc2
|
|
@ -22,6 +22,9 @@ class FasmAssembler(object):
|
|||
self.db = db
|
||||
self.grid = db.grid()
|
||||
|
||||
self.seen_tile = set()
|
||||
self.frames_in_use = set()
|
||||
|
||||
self.frames = {}
|
||||
self.frames_line = {}
|
||||
|
||||
|
|
@ -29,7 +32,12 @@ class FasmAssembler(object):
|
|||
if not sparse:
|
||||
frames = self.frames_init()
|
||||
else:
|
||||
# Even in sparse mode, zero all frames for any tile that is
|
||||
# setting a bit. This handles the case where the tile has
|
||||
# multiple frames, but the FASM only specifies some of the frames.
|
||||
frames = {}
|
||||
for frame in self.frames_in_use:
|
||||
init_frame_at_address(frames, frame)
|
||||
|
||||
for (frame_addr, word_addr, bit_index), is_set in self.frames.items():
|
||||
init_frame_at_address(frames, frame_addr)
|
||||
|
|
@ -112,6 +120,13 @@ class FasmAssembler(object):
|
|||
|
||||
segbits = self.db.get_tile_segbits(gridinfo.tile_type)
|
||||
|
||||
# Mark all frames used by this tile as in use.
|
||||
if tile not in self.seen_tile:
|
||||
for frame in segbits.frames(bits):
|
||||
self.frames_in_use.add(frame)
|
||||
|
||||
self.seen_tile.add(tile)
|
||||
|
||||
db_k = '%s.%s' % (gridinfo.tile_type, feature)
|
||||
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -143,5 +143,6 @@ class TileSegbits(object):
|
|||
|
||||
def frames(self, bits):
|
||||
""" Iterate over frames this tile uses for a given bit location. """
|
||||
for bit in self.segbits.values():
|
||||
yield bits.base_address + bit.word_column
|
||||
for query_bits in self.segbits.values():
|
||||
for bit in query_bits:
|
||||
yield bits.base_address + bit.word_column
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ def main():
|
|||
|
||||
for pip in tile_type.pips:
|
||||
if pip.net_from == parts[2] and pip.net_to == parts[1]:
|
||||
yield '{}/{}.{}'.format(tile, gridinfo.tile_type, pip.name)
|
||||
yield '{}/{}'.format(tile, pip.name)
|
||||
|
||||
print(
|
||||
'highlight_objects [concat {}]'.format(
|
||||
|
|
|
|||
Loading…
Reference in New Issue