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:
Keith Rothman 2018-10-18 21:13:14 -07:00
parent 3edbde3fe2
commit 6dd9626cfc
33 changed files with 93 additions and 147 deletions

View File

@ -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:

View File

@ -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()

View File

@ -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

View File

@ -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:

View File

@ -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):

View File

@ -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

View File

@ -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")
'''

View File

@ -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

View File

@ -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")
'''

View File

@ -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

View File

@ -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")
'''

View File

@ -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")

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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')

View File

@ -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

View File

@ -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

View File

@ -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")
'''

View File

@ -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

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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"

View File

@ -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):

View File

@ -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 = [