mirror of https://github.com/openXC7/prjxray.git
Move all part-specific files to dedicated directory
Signed-off-by: Alessandro Comodi <acomodi@antmicro.com>
This commit is contained in:
parent
3865c726f2
commit
e44027bcaf
4
Makefile
4
Makefile
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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+')
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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():
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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,,$@)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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__':
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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():
|
||||
|
|
|
|||
|
|
@ -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__':
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
|
|
|||
Loading…
Reference in New Issue