Move all part-specific files to dedicated directory

Signed-off-by: Alessandro Comodi <acomodi@antmicro.com>
This commit is contained in:
Alessandro Comodi 2020-01-15 16:55:12 +01:00
parent 3865c726f2
commit e44027bcaf
65 changed files with 137 additions and 141 deletions

View File

@ -118,7 +118,7 @@ db-check-$(1):
@echo
@echo "Checking $(1) database"
@echo "============================"
@$(IN_ENV) python3 utils/checkdb.py --db-root database/$(1)
@$(IN_ENV) python3 utils/checkdb.py
db-format-$(1):
@echo
@ -142,7 +142,7 @@ $(foreach DB,$(DATABASES),$(eval $(call database,$(DB))))
# Targets related to Project X-Ray parts
# --------------------------------------
ARTIX_PARTS=artix50t artix200t
ARTIX_PARTS=artix200t
ZYNQ_PARTS=zynq020
KINTEX_PARTS=kintex70t

View File

@ -13,9 +13,10 @@ $(SPECIMENS): Makefile.specimen
$(MAKE) -C $@ -f ../../Makefile.specimen
pushdb:
cp build/part.yaml ${XRAY_DATABASE_DIR}/$(XRAY_DATABASE)/${XRAY_PART}.yaml
cp build/part.json ${XRAY_DATABASE_DIR}/$(XRAY_DATABASE)/${XRAY_PART}.json
cp build/${XRAY_PART}_required_features.fasm ${XRAY_DATABASE_DIR}/$(XRAY_DATABASE)/${XRAY_PART}_required_features.fasm 2>/dev/null || true
mkdir -p ${XRAY_FAMILY_DIR}/${XRAY_PART}
cp build/part.json $(XRAY_FAMILY_DIR)/${XRAY_PART}/part.json
cp build/part.yaml $(XRAY_FAMILY_DIR)/${XRAY_PART}/part.yaml
cp build/${XRAY_PART}_required_features.fasm ${XRAY_FAMILY_DIR}/${XRAY_PART}/required_features.fasm 2>/dev/null || true
run:
$(MAKE) clean

View File

@ -40,7 +40,7 @@ endif
database: build/tilegrid.json
pushdb: build/tilegrid.json
cp build/tilegrid.json ${XRAY_DATABASE_DIR}/$(XRAY_DATABASE)/tilegrid.json
cp build/tilegrid.json ${XRAY_FAMILY_DIR}/${XRAY_PART}/tilegrid.json
build/tiles/tiles.txt:
bash generate.sh build/tiles tiles

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -7,7 +7,7 @@ from prjxray.db import Database
def gen_brams():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in grid.tiles():
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -7,7 +7,7 @@ from prjxray.db import Database
def gen_dsps():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -7,7 +7,7 @@ from prjxray.db import Database
def gen_fifos():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -12,7 +12,7 @@ def gen_sites():
IOB33: not a diff pair. Relatively rare (at least in ROI...2 of them?)
Focus on IOB33S to start
'''
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -18,7 +18,7 @@ def gen_sites():
IOB33: not a diff pair. Relatively rare (at least in ROI...2 of them?)
Focus on IOB33S to start
'''
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -11,7 +11,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -7,7 +7,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
gridinfo = grid.gridinfo_at_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -6,7 +6,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -321,7 +321,7 @@ module top();
int_tiles = []
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
params = {}
for int_l_column, int_r_column in gen_orphan_ints(grid):

View File

@ -7,7 +7,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
gridinfo = grid.gridinfo_at_tilename(tile_name)

View File

@ -11,7 +11,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -11,7 +11,7 @@ WRITE_MODES = ("WRITE_FIRST", "NO_CHANGE", "READ_FIRST")
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -16,7 +16,7 @@ def gen_sites():
IOB33: not a diff pair. Relatively rare (at least in ROI...2 of them?)
Focus on IOB33S to start
'''
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -8,7 +8,7 @@ import json
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -73,7 +73,7 @@ def find_phasers_for_pll(grid, loc):
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -16,7 +16,7 @@ def gen_sites():
IOB33: not a diff pair. Relatively rare (at least in ROI...2 of them?)
Focus on IOB33S to start
'''
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -13,7 +13,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
tile_list = []

View File

@ -16,7 +16,7 @@ def gen_sites():
IOB33: not a diff pair. Relatively rare (at least in ROI...2 of them?)
Focus on IOB33S to start
'''
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -23,7 +23,7 @@ def read_site_to_cmt():
def gen_sites():
''' Return dict of ISERDES/OSERDES locations. '''
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
xy_fun = util.create_xy_fun('\S+')

View File

@ -11,7 +11,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -9,7 +9,7 @@ from prjxray.lut_maker import LutMaker
def gen_sites():
xy_fun = util.create_xy_fun('BUFR_')
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -9,7 +9,7 @@ from prjxray.db import Database
def gen_sites():
get_xy = util.create_xy_fun('BUFHCE_')
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -22,7 +22,7 @@ def eprint(*args, **kwargs):
def gen_sites(desired_site_type):
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
@ -34,7 +34,7 @@ def gen_sites(desired_site_type):
def gen_bufhce_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)
@ -50,7 +50,7 @@ def gen_bufhce_sites():
def get_cmt_loc(cmt_tile_name):
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
return grid.loc_of_tilename(cmt_tile_name)

View File

@ -9,7 +9,7 @@ from prjxray.state_gen import StateGen
def gen_sites():
xy_fun = util.create_xy_fun('BUFGCTRL_')
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -2,7 +2,7 @@
from prjxray.segmaker import Segmaker
from prjxray.db import Database
from prjxray.util import get_db_root
from prjxray.util import get_db_root, get_part
import re
REBUF_GCLK = re.compile('^CLK_BUFG_REBUF_R_CK_GCLK([0-9]+)_BOT$')
@ -17,8 +17,8 @@ def gclk_of_wire(wire):
class ClockColumn(object):
def __init__(self, db_root):
db = Database(db_root)
def __init__(self, db_root, part):
db = Database(db_root, part)
grid = db.grid()
tiles_in_gclk_columns = []

View File

@ -26,7 +26,7 @@ def get_xy(s):
def gen_sites(desired_site_type):
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
@ -38,7 +38,7 @@ def gen_sites(desired_site_type):
def gen_bufhce_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile_name)

View File

@ -118,7 +118,7 @@ module top();
clock_sources = ClockSources()
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
def gen_sites(desired_site_type):

View File

@ -178,7 +178,7 @@ def main():
adv_clock_sources = ClockSources()
site_to_cmt = dict(read_site_to_cmt())
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
def gen_sites(desired_site_type):

View File

@ -118,7 +118,7 @@ module top();
clock_sources = ClockSources()
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
def gen_sites(desired_site_type):

View File

@ -101,7 +101,7 @@ def main():
clock_region_limit = dict()
clock_region_serdes_location = dict()
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
def gen_sites(desired_site_type):

View File

@ -101,7 +101,7 @@ def main():
clock_region_limit = dict()
clock_region_serdes_location = dict()
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
def gen_sites(desired_site_type):

View File

@ -7,7 +7,7 @@ random.seed(int(os.getenv("SEED"), 16))
def gen_sites(lr):
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile_name in grid.tiles():

View File

@ -9,7 +9,7 @@ random.seed(int(os.getenv("SEED"), 16))
def bram_count():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
count = 0

View File

@ -12,6 +12,7 @@ import argparse
MP_LOCK = Lock()
# Worker function called from threads
def start_pips(argList):
blockID, start, stop, total = argList
@ -40,6 +41,7 @@ def start_pips(argList):
os.remove(uphill_wires)
os.remove(downhill_wires)
# Function called once to get the total numbers of pips to list
def get_nb_pips():
print("Fetching total number of pips")

View File

@ -5,7 +5,7 @@ SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
database: $(SPECIMENS_OK)
pushdb:
cp build/specimen_001/*_package_pins.csv ${XRAY_DATABASE_DIR}/$(XRAY_DATABASE)/
cp build/specimen_001/*_package_pins.csv ${XRAY_FAMILY_DIR}/${XRAY_PART}/package_pins.csv
$(SPECIMENS_OK):
bash generate.sh $(subst /OK,,$@)

View File

@ -8,7 +8,7 @@ from prjxray.db import Database
def gen_sites():
db = Database(util.get_db_root())
db = Database(util.get_db_root(), util.get_part())
grid = db.grid()
for tile in sorted(grid.tiles()):
loc = grid.loc_of_tilename(tile)

View File

@ -137,10 +137,7 @@ roi_only:
# -----------------
part_only_yaml:
echo ${XRAY_FAMILY_DIR}/${XRAY_PART}/part.yaml
+$(MAKE) -C 001-part-yaml run
cp ${XRAY_FAMILY_DIR}/${XRAY_PART}.yaml ${XRAY_FAMILY_DIR}/${XRAY_PART}/part.yaml
cp ${XRAY_FAMILY_DIR}/${XRAY_PART}.json ${XRAY_FAMILY_DIR}/${XRAY_PART}/part.json
part_only_tilegrid:
+$(MAKE) -C 005-tilegrid run
@ -150,11 +147,9 @@ part_only_tileconn:
+$(MAKE) -C 072-ordered_wires run
+$(MAKE) -C 073-get_counts run
+$(MAKE) -C 074-dump_all run
cp ${XRAY_FAMILY_DIR}/tileconn.json ${XRAY_FAMILY_DIR}/${XRAY_PART}/tileconn.json
part_only_pins:
+$(MAKE) -C 075-pins run
cp ${XRAY_FAMILY_DIR}/${XRAY_PART}_package_pins.csv ${XRAY_FAMILY_DIR}/${XRAY_PART}/package_pins.csv
part_only:
# Create PART-specific directory

View File

@ -5,7 +5,7 @@ import sys
import fasm
from prjxray.db import Database
from prjxray.roi import Roi
from prjxray.util import get_db_root
from prjxray.util import get_db_root, get_part
def set_port_wires(ports, name, pin, wires_outside_roi):
@ -42,7 +42,7 @@ def main():
design_json['info'][name] = int(value)
db = Database(get_db_root())
db = Database(get_db_root(), get_part())
grid = db.grid()
roi = Roi(

View File

@ -27,7 +27,6 @@ build/$(2)_$(1)/timing_$(2)_$(1).json5: build/.touch runme.tcl $(3)
build/timing_$(2)_$(1).xlsx: build/$(2)_$(1)/timing_$(2)_$(1).json create_timing_worksheet_db.py
python3 create_timing_worksheet_db.py \
--timing_json build/$(2)_$(1)/timing_$(2)_$(1).json \
--db_root ${XRAY_DATABASE_DIR}/${XRAY_DATABASE} \
--output_xlsx build/timing_$(2)_$(1).xlsx
build/$(2)_$(1)/design_$(2)_$(1).fasm: build/$(2)_$(1)/timing_$(2)_$(1).json

View File

@ -6,6 +6,7 @@ from prjxray.timing import Outpin, Inpin, Wire, Buffer, \
PassTransistor, IntristicDelay, RcElement, PvtCorner
from prjxray.math_models import ExcelMathModel
from prjxray.db import Database
from prjxray import util
FAST = PvtCorner.FAST
SLOW = PvtCorner.SLOW
@ -443,8 +444,9 @@ def main():
parser = argparse.ArgumentParser(
description="Create timing worksheet for 7-series timing analysis.")
util.db_root_arg(parser)
util.part_arg(parser)
parser.add_argument('--timing_json', required=True)
parser.add_argument('--db_root', required=True)
parser.add_argument('--output_xlsx', required=True)
args = parser.parse_args()
@ -452,7 +454,7 @@ def main():
with open(args.timing_json) as f:
timing = json.load(f)
db = Database(args.db_root)
db = Database(args.db_root, args.part)
nodes = {}
for net in timing:

View File

@ -25,7 +25,7 @@ def get_available_databases(prjxray_root):
class Database(object):
def __init__(self, db_root):
def __init__(self, db_root, part):
""" Create project x-ray Database at given db_root.
db_root: Path to directory containing settings.sh, *.db, tilegrid.json and
@ -33,6 +33,7 @@ class Database(object):
"""
self.db_root = db_root
self.part = part
# tilegrid.json JSON object
self.tilegrid = None
self.tileconn = None
@ -87,17 +88,17 @@ class Database(object):
self.site_types[site_type_name] = os.path.join(self.db_root, f)
if f.endswith('_required_features.fasm'):
part = f[:-len('_required_features.fasm')]
required_features_path = os.path.join(
self.db_root, self.part, "required_features.fasm")
if os.path.isfile(required_features_path):
with open(required_features_path, "r") as fp:
features = []
for line in fp:
line = line.strip()
if len(line) > 0:
features.append(line)
with open(os.path.join(self.db_root, f), "r") as fp:
features = []
for line in fp:
line = line.strip()
if len(line) > 0:
features.append(line)
self.required_features[part] = set(features)
self.required_features[self.part] = set(features)
self.tile_types_obj = {}
@ -116,13 +117,15 @@ class Database(object):
def _read_tilegrid(self):
""" Read tilegrid database if not already read. """
if not self.tilegrid:
with open(os.path.join(self.db_root, 'tilegrid.json')) as f:
with open(os.path.join(self.db_root, self.part,
'tilegrid.json')) as f:
self.tilegrid = json.load(f)
def _read_tileconn(self):
""" Read tileconn database if not already read. """
if not self.tileconn:
with open(os.path.join(self.db_root, 'tileconn.json')) as f:
with open(os.path.join(self.db_root, self.part,
'tileconn.json')) as f:
self.tileconn = json.load(f)
def grid(self):

View File

@ -824,7 +824,8 @@ def main():
# Build (baseaddr, offset) -> tile name map
database_dir = os.path.join(
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"),
os.getenv("XRAY_PART"))
tilegrid_file = os.path.join(database_dir, "tilegrid.json")
address_map = build_address_map(tilegrid_file)

View File

@ -15,6 +15,13 @@ def get_db_root():
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))
def get_part():
ret = os.getenv("XRAY_PART", None)
assert ret
return ret
def roi_xy():
x1 = int(os.getenv('XRAY_ROI_GRID_X1', 0))
x2 = int(os.getenv('XRAY_ROI_GRID_X2', 58))
@ -73,7 +80,7 @@ def slice_xy():
def get_roi():
from .db import Database
(x1, x2), (y1, y2) = roi_xy()
db = Database(get_db_root())
db = Database(get_db_root(), get_part())
return Roi(db=db, x1=x1, x2=x2, y1=y1, y2=y2)
@ -115,6 +122,20 @@ def db_root_arg(parser):
parser.add_argument('--db-root', help="Database root.", **db_root_kwargs)
def part_arg(parser):
part = os.getenv("XRAY_PART")
part_kwargs = {}
if part is None:
part_kwargs['required'] = True
else:
part_kwargs['required'] = False
part_kwargs['default'] = part
parser.add_argument(
'--part',
help="Part name. When not given defaults to XRAY_PART env. var.",
**part_kwargs)
def parse_db_line(line):
'''Return tag name, bit values (if any), mode (if any)'''
parts = line.split()

View File

@ -27,8 +27,8 @@ def bit_to_bits(bitread, part_yaml, bit_file, bits_file, frame_range=None):
shell=True)
def bits_to_fasm(db_root, bits_file, verbose, canonical):
db = Database(db_root)
def bits_to_fasm(db_root, part, bits_file, verbose, canonical):
db = Database(db_root, part)
grid = db.grid()
disassembler = fasm_disassembler.FasmDisassembler(db)
@ -102,14 +102,15 @@ def main():
bit_to_bits(
bitread=args.bitread,
part_yaml=os.path.join(args.db_root, '{}.yaml'.format(args.part)),
part_yaml=os.path.join(args.db_root, args.part, "part.yaml"),
bit_file=args.bit_file,
bits_file=bits_file.name,
frame_range=args.frame_range,
)
bits_to_fasm(
args.db_root, bits_file.name, args.verbose, args.canonical)
args.db_root, args.part, bits_file.name, args.verbose,
args.canonical)
if __name__ == '__main__':

View File

@ -142,13 +142,13 @@ def check_tile_overlap(db, verbose=False):
print("Checked %s tiles, %s bits" % (tiles_checked, len(mall)))
def run(db_root, verbose=False):
def run(db_root, part, verbose=False):
# Start by running a basic check on db files
print("Checking individual .db...")
parsedb_all(db_root, verbose=verbose)
# Now load and verify tile consistency
db = prjxraydb.Database(db_root)
db = prjxraydb.Database(db_root, part)
db._read_tilegrid()
'''
these don't load properly without .json files

View File

@ -271,28 +271,8 @@ def main():
'Convert FPGA configuration description ("FPGA assembly") into binary frame equivalent'
)
database_dir = os.getenv("XRAY_DATABASE_DIR")
database = os.getenv("XRAY_DATABASE")
db_root_kwargs = {}
if database_dir is None or database is None:
db_root_kwargs['required'] = True
else:
db_root_kwargs['required'] = False
db_root_kwargs['default'] = os.path.join(database_dir, database)
db_part = os.getenv("XRAY_PART")
db_part_kwargs = {}
if db_part is None:
db_part_kwargs['required'] = True
else:
db_part_kwargs['required'] = False
db_part_kwargs['default'] = db_part
parser.add_argument('--db-root', help="Database root.", **db_root_kwargs)
parser.add_argument(
'--part',
help="Part name. When not given defaults to XRAY_PART env. var.",
**db_part_kwargs)
util.db_root_arg(parser)
util.part_arg(parser)
parser.add_argument(
'--sparse', action='store_true', help="Don't zero fill all frames")
parser.add_argument(

View File

@ -8,6 +8,7 @@ from __future__ import print_function
import os.path
import fasm
from prjxray import db
from prjxray import util
def main():
@ -17,20 +18,12 @@ def main():
description=
'Outputs a Vivavo highlight_objects command from a FASM file.')
database_dir = os.getenv("XRAY_DATABASE_DIR")
database = os.getenv("XRAY_DATABASE")
db_root_kwargs = {}
if database_dir is None or database is None:
db_root_kwargs['required'] = True
else:
db_root_kwargs['required'] = False
db_root_kwargs['default'] = os.path.join(database_dir, database)
parser.add_argument('--db-root', help="Database root.", **db_root_kwargs)
util.db_root_arg(parser)
util.part_arg(parser)
parser.add_argument('fn_in', help='Input FPGA assembly (.fasm) file')
args = parser.parse_args()
database = db.Database(args.db_root)
database = db.Database(args.db_root, args.part)
grid = database.grid()
def inner():

View File

@ -13,8 +13,8 @@ import fasm
from prjxray import db
def process_fasm(db_root, fasm_file, canonical):
database = db.Database(db_root)
def process_fasm(db_root, part, fasm_file, canonical):
database = db.Database(db_root, part)
grid = database.grid()
for fasm_line in fasm.parse_fasm_filename(fasm_file):
@ -56,10 +56,11 @@ def process_fasm(db_root, fasm_file, canonical):
yield fasm_line
def run(db_root, fasm_file, canonical):
def run(db_root, part, fasm_file, canonical):
print(
fasm.fasm_tuple_to_string(
process_fasm(db_root, fasm_file, canonical), canonical=canonical))
process_fasm(db_root, part, fasm_file, canonical),
canonical=canonical))
def main():
@ -67,22 +68,14 @@ def main():
parser = argparse.ArgumentParser(description='Pretty print a FASM file.')
database_dir = os.getenv("XRAY_DATABASE_DIR")
database = os.getenv("XRAY_DATABASE")
db_root_kwargs = {}
if database_dir is None or database is None:
db_root_kwargs['required'] = True
else:
db_root_kwargs['required'] = False
db_root_kwargs['default'] = os.path.join(database_dir, database)
parser.add_argument('--db-root', help="Database root.", **db_root_kwargs)
util.db_root_arg(parser)
util.part_arg(parser)
parser.add_argument('fasm_file', help='Input FASM file')
parser.add_argument(
'--canonical', help='Output canonical bitstream.', action='store_true')
args = parser.parse_args()
run(args.db_root, args.fasm_file, args.canonical)
run(args.db_root, args.part, args.fasm_file, args.canonical)
if __name__ == '__main__':

View File

@ -2,18 +2,21 @@
import argparse
from prjxray.db import Database
from prjxray.grid import BlockType
from prjxray import util
def main():
parser = argparse.ArgumentParser(
description="Tool for checking which tiles have bits defined.")
parser.add_argument('db_root')
util.db_root_arg(parser)
util.part_arg(parser)
parser.add_argument('--show-only-missing', action='store_true')
parser.add_argument('--verbose', action='store_true')
args = parser.parse_args()
db = Database(args.db_root)
db = Database(args.db_root, args.part)
grid = db.grid()
tile_types = {}

View File

@ -8,6 +8,7 @@ import multiprocessing
import pyjson5 as json5
import json
import sys
from prjxray import util
def full_wire_name(wire_in_grid):
@ -60,7 +61,8 @@ def read_json5(fname):
def main():
parser = argparse.ArgumentParser(
description="Tests database against raw node list.")
parser.add_argument('--db-root', required=True)
util.db_root_arg(parser)
util.part_arg(parser)
parser.add_argument('--raw_node_root', required=True)
parser.add_argument('--error_nodes', default="error_nodes.json")
parser.add_argument('--ignored_wires')
@ -88,7 +90,7 @@ def main():
bar.update(idx + 1)
print('{} Creating connections'.format(datetime.datetime.now()))
generated_nodes = make_connections(args.db_root)
generated_nodes = make_connections(args.db_root, args.part)
print('{} Verifying connections'.format(datetime.datetime.now()))
error_nodes = []