mirror of https://github.com/openXC7/prjxray.git
Merge pull request #616 from litghost/non_canonical_sorting
Non-canonical sorting for bit2fasm
This commit is contained in:
commit
8e70e4e9ce
4
Makefile
4
Makefile
|
|
@ -6,8 +6,6 @@ env:
|
||||||
virtualenv --python=python3 --system-site-packages env
|
virtualenv --python=python3 --system-site-packages env
|
||||||
$(IN_ENV) pip install -r requirements.txt
|
$(IN_ENV) pip install -r requirements.txt
|
||||||
$(IN_ENV) pip install -r docs/requirements.txt
|
$(IN_ENV) pip install -r docs/requirements.txt
|
||||||
ln -sf $(PWD)/prjxray env/lib/python3.*/site-packages/
|
|
||||||
ln -sf $(PWD)/third_party/fasm/fasm.py env/lib/python3.*/site-packages/
|
|
||||||
$(IN_ENV) python -c "import yaml" || (echo "Unable to find python-yaml" && exit 1)
|
$(IN_ENV) python -c "import yaml" || (echo "Unable to find python-yaml" && exit 1)
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
|
@ -25,7 +23,7 @@ test: test-py test-cpp
|
||||||
@true
|
@true
|
||||||
|
|
||||||
test-py:
|
test-py:
|
||||||
$(IN_ENV) py.test $(TEST_EXCLUDE) --doctest-modules --junitxml=build/py_test_results.xml
|
$(IN_ENV) PYTHONPATH="$(PWD):$(PWD)/third_party/fasm:$PYTHONPATH" py.test $(TEST_EXCLUDE) --doctest-modules --junitxml=build/py_test_results.xml
|
||||||
|
|
||||||
test-cpp:
|
test-cpp:
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
|
|
|
||||||
|
|
@ -96,3 +96,10 @@ class Grid(object):
|
||||||
|
|
||||||
def get_segment_map(self):
|
def get_segment_map(self):
|
||||||
return segment_map.SegmentMap(self)
|
return segment_map.SegmentMap(self)
|
||||||
|
|
||||||
|
def tile_key(self, tilename):
|
||||||
|
gridinfo = self.gridinfo_at_tilename(tilename)
|
||||||
|
loc = self.loc_of_tilename(tilename)
|
||||||
|
tile_type = gridinfo.tile_type
|
||||||
|
|
||||||
|
return (tile_type, loc.grid_x, -loc.grid_y)
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit b7a578552669954050f3700ced243b9d9e12d649
|
Subproject commit ece57149c96cea82ab155af3bba04e76eee4ab6a
|
||||||
|
|
@ -5,7 +5,8 @@ Take bitstream .bit files and decode them to FASM.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import fasm
|
import fasm
|
||||||
from prjxray import db
|
import fasm.output
|
||||||
|
from prjxray.db import Database
|
||||||
from prjxray import fasm_disassembler
|
from prjxray import fasm_disassembler
|
||||||
from prjxray import bitstream
|
from prjxray import bitstream
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
@ -26,15 +27,35 @@ def bit_to_bits(bitread, part_yaml, bit_file, bits_file, frame_range=None):
|
||||||
|
|
||||||
|
|
||||||
def bits_to_fasm(db_root, bits_file, verbose, canonical):
|
def bits_to_fasm(db_root, bits_file, verbose, canonical):
|
||||||
disassembler = fasm_disassembler.FasmDisassembler(db.Database(db_root))
|
db = Database(db_root)
|
||||||
|
grid = db.grid()
|
||||||
|
disassembler = fasm_disassembler.FasmDisassembler(db)
|
||||||
|
|
||||||
with open(bits_file) as f:
|
with open(bits_file) as f:
|
||||||
bitdata = bitstream.load_bitdata(f)
|
bitdata = bitstream.load_bitdata(f)
|
||||||
|
|
||||||
print(
|
def is_zero_feature(feature):
|
||||||
fasm.fasm_tuple_to_string(
|
parts = feature.split('.')
|
||||||
disassembler.find_features_in_bitstream(bitdata, verbose=verbose),
|
tile = parts[0]
|
||||||
canonical=canonical))
|
gridinfo = grid.gridinfo_at_tilename(tile)
|
||||||
|
feature = '.'.join(parts[1:])
|
||||||
|
|
||||||
|
db_k = '%s.%s' % (gridinfo.tile_type, feature)
|
||||||
|
segbits = db.get_tile_segbits(gridinfo.tile_type)
|
||||||
|
any_bits = False
|
||||||
|
for bit in segbits.feature_to_bits(db_k):
|
||||||
|
if bit.isset:
|
||||||
|
any_bits = True
|
||||||
|
|
||||||
|
return not any_bits
|
||||||
|
|
||||||
|
model = fasm.output.merge_and_sort(
|
||||||
|
disassembler.find_features_in_bitstream(bitdata, verbose=verbose),
|
||||||
|
zero_function=is_zero_feature,
|
||||||
|
sort_key=grid.tile_key,
|
||||||
|
)
|
||||||
|
|
||||||
|
print(fasm.fasm_tuple_to_string(model, canonical=canonical), end='')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue