mirror of https://github.com/openXC7/prjxray.git
Move all use of getenv into prjxray.util and behind a function.
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
This commit is contained in:
parent
3edbde3fe2
commit
6dd9626cfc
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
print("Loading tags from design.txt.")
|
||||
with open("design.txt", "r") as f:
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@
|
|||
import sys, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
pipdata = dict()
|
||||
ignpip = set()
|
||||
|
||||
|
||||
def handle_design(prefix, second_pass):
|
||||
segmk = Segmaker(prefix + ".bits")
|
||||
segmk = Segmaker(util.get_db_root(), prefix + ".bits")
|
||||
|
||||
tiledata = dict()
|
||||
nlines = 0
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re
|
||||
import sys
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design_%s.bits" % sys.argv[1])
|
||||
segmk = Segmaker(util.get_db_root(), "design_%s.bits" % sys.argv[1])
|
||||
|
||||
print("Loading tags from design_%s.txt." % sys.argv[1])
|
||||
with open("design_%s.txt" % sys.argv[1], "r") as f:
|
||||
|
|
|
|||
|
|
@ -10,11 +10,10 @@ LDPE Primitive: Transparent Data Latch with Asynchronous Preset and Gate Enable
|
|||
|
||||
from prims import *
|
||||
|
||||
import sys, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
|
||||
def ones(l):
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import random
|
||||
random.seed(0)
|
||||
import os
|
||||
import re
|
||||
from prjxray import util
|
||||
|
||||
from prims import *
|
||||
|
|
@ -14,8 +12,10 @@ f.write("i,prim,loc,bel,init\n")
|
|||
|
||||
|
||||
def gen_slices():
|
||||
for _tile_name, site_name, _site_type in util.gen_sites(['SLICEL',
|
||||
'SLICEM']):
|
||||
for _tile_name, site_name, _site_type in util.get_roi().gen_sites([
|
||||
'SLICEL',
|
||||
'SLICEM',
|
||||
]):
|
||||
yield site_name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
print("Loading tags")
|
||||
'''
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import random
|
||||
random.seed(0)
|
||||
import os
|
||||
import re
|
||||
from prjxray import util
|
||||
|
||||
CLBN = 40
|
||||
|
|
@ -9,8 +7,10 @@ print('//Requested CLBs: %s' % str(CLBN))
|
|||
|
||||
|
||||
def gen_slices():
|
||||
for _tile_name, site_name, _site_type in util.gen_sites(['SLICEL',
|
||||
'SLICEM']):
|
||||
for _tile_name, site_name, _site_type in util.get_roi().gen_sites([
|
||||
'SLICEL',
|
||||
'SLICEM'
|
||||
]):
|
||||
yield site_name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
print("Loading tags")
|
||||
'''
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import random
|
||||
random.seed(0)
|
||||
import os
|
||||
import re
|
||||
from prjxray import util
|
||||
|
||||
CLBN = 400
|
||||
|
|
@ -9,8 +7,10 @@ print('//Requested CLBs: %s' % str(CLBN))
|
|||
|
||||
|
||||
def gen_slices():
|
||||
for _tile_name, site_name, _site_type in util.gen_sites(['SLICEL',
|
||||
'SLICEM']):
|
||||
for _tile_name, site_name, _site_type in util.get_roi().gen_sites([
|
||||
'SLICEL',
|
||||
'SLICEM'
|
||||
]):
|
||||
yield site_name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
print("Loading tags")
|
||||
'''
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
cache = dict()
|
||||
|
||||
print("Loading tags")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import random
|
||||
random.seed(0)
|
||||
import os
|
||||
import re
|
||||
from prjxray import util
|
||||
|
||||
CLBN = 400
|
||||
|
|
@ -9,8 +7,10 @@ print('//Requested CLBs: %s' % str(CLBN))
|
|||
|
||||
|
||||
def gen_slices():
|
||||
for _tile_name, site_name, _site_type in util.gen_sites(['SLICEL',
|
||||
'SLICEM']):
|
||||
for _tile_name, site_name, _site_type in util.get_roi().gen_sites([
|
||||
'SLICEL',
|
||||
'SLICEM',
|
||||
]):
|
||||
yield site_name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
cache = dict()
|
||||
|
||||
print("Loading tags")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import random
|
||||
random.seed(0)
|
||||
import os
|
||||
import re
|
||||
from prjxray import util
|
||||
|
||||
CLBN = 400
|
||||
|
|
@ -9,8 +7,10 @@ print('//Requested CLBs: %s' % str(CLBN))
|
|||
|
||||
|
||||
def gen_slices():
|
||||
for _tile_name, site_name, _site_type in util.gen_sites(['SLICEL',
|
||||
'SLICEM']):
|
||||
for _tile_name, site_name, _site_type in util.get_roi().gen_sites([
|
||||
'SLICEL',
|
||||
'SLICEM'
|
||||
]):
|
||||
yield site_name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
print("Loading tags")
|
||||
f = open('params.csv', 'r')
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re, os
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
# Can fit 4 per CLB
|
||||
# BELable
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@ Note: LUT6 was added to try to simplify reduction, although it might not be need
|
|||
|
||||
import random
|
||||
random.seed(0)
|
||||
import os
|
||||
import re
|
||||
from prjxray import util
|
||||
|
||||
CLBN = 50
|
||||
|
|
@ -26,7 +24,7 @@ print('//Requested CLBs: %s' % str(CLBN))
|
|||
|
||||
|
||||
def gen_slicems():
|
||||
for _tile_name, site_name, _site_type in util.gen_sites(['SLICEM']):
|
||||
for _tile_name, site_name, _site_type in util.get_roi().gen_sites(['SLICEM']):
|
||||
yield site_name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,10 @@
|
|||
# Can we find instance where they are not aliased?
|
||||
WA7USED = 0
|
||||
|
||||
import sys, re, os
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
print("Loading tags")
|
||||
'''
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import random
|
||||
random.seed(0)
|
||||
import os
|
||||
import re
|
||||
from prjxray import util
|
||||
|
||||
CLBN = 50
|
||||
|
|
@ -9,7 +7,7 @@ print('//Requested CLBs: %s' % str(CLBN))
|
|||
|
||||
|
||||
def gen_slicems():
|
||||
for _tile_name, site_name, _site_type in util.gen_sites(['SLICEM']):
|
||||
for _tile_name, site_name, _site_type in util.get_roi().gen_sites(['SLICEM']):
|
||||
yield site_name
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re
|
||||
import re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re, os
|
||||
import re, os
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import os, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import os, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import os
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design.bits")
|
||||
segmk = Segmaker(util.get_db_root(), "design.bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = set()
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import sys
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
tags = dict()
|
||||
en_tags = dict()
|
||||
|
|
@ -23,7 +24,7 @@ for arg in sys.argv[1:]:
|
|||
|
||||
for arg in sys.argv[1:]:
|
||||
print("Processing %s." % arg)
|
||||
segmk = Segmaker(arg + ".bits")
|
||||
segmk = Segmaker(util.get_db_root(), arg + ".bits")
|
||||
|
||||
tiledata = dict()
|
||||
pipdata = dict()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, os, re
|
||||
import sys
|
||||
|
||||
from prjxray.segmaker import Segmaker
|
||||
from prjxray import util
|
||||
|
||||
segmk = Segmaker("design_%s.bits" % sys.argv[1])
|
||||
segmk = Segmaker(util.get_db_root(), "design_%s.bits" % sys.argv[1])
|
||||
|
||||
pipdata = dict()
|
||||
ignpip = set()
|
||||
|
|
|
|||
|
|
@ -15,9 +15,6 @@ tilegrid.json provides tile addresses
|
|||
|
||||
import os, json, re
|
||||
|
||||
XRAY_DATABASE = os.getenv("XRAY_DATABASE")
|
||||
XRAY_DIR = os.getenv("XRAY_DIR")
|
||||
|
||||
BLOCK_TYPES = set(('CLB_IO_CLK', 'BLOCK_RAM', 'CFG_CLB'))
|
||||
|
||||
|
||||
|
|
@ -41,7 +38,8 @@ def json_hex2i(s):
|
|||
|
||||
|
||||
class Segmaker:
|
||||
def __init__(self, bitsfile, verbose=None):
|
||||
def __init__(self, db_root, bitsfile, verbose=None):
|
||||
self.db_root = db_root
|
||||
self.verbose = verbose if verbose is not None else os.getenv(
|
||||
'VERBOSE', 'N') == 'Y'
|
||||
self.load_grid()
|
||||
|
|
@ -60,9 +58,7 @@ class Segmaker:
|
|||
|
||||
def load_grid(self):
|
||||
'''Load self.grid holding tile addresses'''
|
||||
print("Loading %s grid." % XRAY_DATABASE)
|
||||
with open("%s/database/%s/tilegrid.json" % (XRAY_DIR, XRAY_DATABASE),
|
||||
"r") as f:
|
||||
with open(os.path.join(db_root, "tilegrid.json"), "r") as f:
|
||||
self.grid = json.load(f)
|
||||
assert "segments" not in self.grid, "Old format tilegrid.json"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
import os
|
||||
import re
|
||||
import os
|
||||
import json
|
||||
|
||||
DB_PATH = "%s/%s" % (
|
||||
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))
|
||||
from .roi import Roi
|
||||
|
||||
def get_db_root():
|
||||
return "%s/%s" % (
|
||||
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))
|
||||
|
||||
def roi_xy():
|
||||
x1 = int(os.getenv('XRAY_ROI_GRID_X1'))
|
||||
|
|
@ -15,10 +14,6 @@ def roi_xy():
|
|||
|
||||
return (x1, x2), (y1, y2)
|
||||
|
||||
|
||||
(ROI_X1, ROI_X2), (ROI_Y1, ROI_Y2) = roi_xy()
|
||||
|
||||
|
||||
def slice_xy():
|
||||
'''Return (X1, X2), (Y1, Y2) from XRAY_ROI, exclusive end (for xrange)'''
|
||||
# SLICE_X12Y100:SLICE_X27Y149
|
||||
|
|
@ -29,49 +24,14 @@ def slice_xy():
|
|||
ms = [int(m.group(i + 1)) for i in range(4)]
|
||||
return ((ms[0], ms[2] + 1), (ms[1], ms[3] + 1))
|
||||
|
||||
|
||||
def tile_in_roi(tilej):
|
||||
x = int(tilej['grid_x'])
|
||||
y = int(tilej['grid_y'])
|
||||
return ROI_X1 <= x <= ROI_X2 and ROI_Y1 <= y <= ROI_Y2
|
||||
|
||||
|
||||
def load_tilegrid():
|
||||
return json.load(open('%s/tilegrid.json' % DB_PATH))
|
||||
|
||||
|
||||
def gen_tiles(tile_types=None, tilegrid=None):
|
||||
'''
|
||||
tile_types: list of tile types to keep, or None for all
|
||||
tilegrid: cache the tilegrid database
|
||||
'''
|
||||
tilegrid = tilegrid or load_tilegrid()
|
||||
|
||||
for tile_name, tilej in tilegrid.items():
|
||||
if tile_in_roi(tilej) and (tile_types is None
|
||||
or tilej['type'] in tile_types):
|
||||
yield (tile_name, tilej)
|
||||
|
||||
|
||||
def gen_sites(site_types=None, tilegrid=None):
|
||||
'''
|
||||
site_types: list of site types to keep, or None for all
|
||||
tilegrid: cache the tilegrid database
|
||||
'''
|
||||
tilegrid = tilegrid or load_tilegrid()
|
||||
|
||||
for tile_name, tilej in tilegrid.items():
|
||||
if not tile_in_roi(tilej):
|
||||
continue
|
||||
for site_name, site_type in tilej['sites'].items():
|
||||
if site_types is None or site_type in site_types:
|
||||
yield (tile_name, site_name, site_type)
|
||||
|
||||
|
||||
#print(list(gen_tiles(['CLBLL_L', 'CLBLL_R', 'CLBLM_L', 'CLBLM_R'])))
|
||||
#print(list(gen_sites(['SLICEL', 'SLICEM'])))
|
||||
#print(list(gen_sites(['SLICEM'])))
|
||||
|
||||
def get_roi():
|
||||
(x1, x2), (y1, y2) = roi_xy()
|
||||
return Roi(
|
||||
tilegrid_file=os.path.join(get_db_root(), 'tilegrid.json'),
|
||||
x1=x1,
|
||||
x2=x2,
|
||||
y1=y1,
|
||||
y2=y2)
|
||||
|
||||
# we know that all bits for CLB MUXes are in frames 30 and 31, so filter all other bits
|
||||
def bitfilter_clb_mux(frame_idx, bit_idx):
|
||||
|
|
|
|||
|
|
@ -5,11 +5,7 @@ import re
|
|||
import sys
|
||||
import json
|
||||
import collections
|
||||
|
||||
|
||||
class FASMSyntaxError(Exception):
|
||||
pass
|
||||
|
||||
import fasm
|
||||
|
||||
def parsebit(val):
|
||||
'''Return "!012_23" => (12, 23, False)'''
|
||||
|
|
@ -22,7 +18,6 @@ def parsebit(val):
|
|||
seg_word_column, word_bit_n = val.split('_')
|
||||
return int(seg_word_column), int(word_bit_n), isset
|
||||
|
||||
|
||||
# TODO: migrate to library
|
||||
def process_db(tile_type, process):
|
||||
fns = [
|
||||
|
|
|
|||
Loading…
Reference in New Issue