X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fparse.py;h=b2e017ab2dd54e2c75ea6960fc756a7ed2c6c1cc;hb=0e07cd1c35e098cac02d0278ed18f1e3d8090352;hp=9c5bdef7bc2df9d61c76010f240df7b6fe04f433;hpb=aa55cb1f614bfbfd7bd7d8bfc8219e79d3857686;p=pinmux.git diff --git a/src/parse.py b/src/parse.py index 9c5bdef..b2e017a 100644 --- a/src/parse.py +++ b/src/parse.py @@ -13,33 +13,33 @@ class Parse(object): N_MUX = 1 # number of selection lines for the mux per io N_IO = 0 N_MUX_IO = 0 - Addressing = 'WORD' - ADDR_WIDTH = 32 # TODO parameterise + ADDR_WIDTH = 64 # TODO parameterise PADDR_WIDTH = 32 # TODO parameterise DATA_WIDTH = 64 # TODO parameterise # ================ # - # Generating the number of bits for memory map # - lower_offset = 0 - if Addressing == 'BYTE': - lower_offset = 0 - elif Addressing == 'HWORD': - lower_offset = 1 - elif Addressing == 'WORD': - lower_offset = 2 - elif Addressing == 'DWORD': - lower_offset = 3 - else: - print('ERROR: Addressing should be one of: BYTE, HWORD, WORD, DWORD') - exit(1) - def __init__(self, pth=None, verify=True): max_io = 0 self.muxed_cells = [] + self.muxed_cells_width = [] + self.muxed_cells_bank = [] self.dedicated_cells = [] self.pinnumbers = [] + self.bankwidths = {} + self.banksize = {} + self.bankstart = {} + fname = 'pinspec.txt' + if pth: + fname = os.path.join(pth, fname) + with open(fname) as bankwidths: + for lineno, line in enumerate(bankwidths): + line1 = line[:-1].split('\t') + self.bankwidths[line1[0]] = int(line1[3]) + self.banksize[line1[0]] = int(line1[2]) + self.bankstart[line1[0]] = int(line1[1]) + # == capture the number of IO cells required == # fname = 'pinmap.txt' if pth: @@ -47,33 +47,37 @@ class Parse(object): with open(fname) as pinmapfile: for lineno, line in enumerate(pinmapfile): line1 = line[:-1].split('\t') - if len(line1) <= 1: + if len(line1) <= 3: continue self.pinnumbers.append(int(line1[0])) - if len(line1) == 2: # dedicated - self.dedicated_cells.append(line1) - else: - for i in range(1, len(line1)): - # XXX HORRIBLE HACK!! - if line1[i].startswith('pwm'): - line1[i] = 'pwm%s_out' % line1[i][4:] - self.muxed_cells.append(line1) + self.muxed_cells_bank.append(line1[1]) + self.muxed_cells_width.append(int(line1[2])) + # XXX TODO: dedicated pins in separate file + #if len(line1) == 2: # dedicated + # self.dedicated_cells.append(line1) + #else: + for i in range(3, len(line1)): + # XXX HORRIBLE HACK!! + if line1[i].startswith('pwm'): + line1[i] = 'pwm%s_out' % line1[i][4:] + line1 = [line1[0]] + line1[3:] + print "line", line1 + self.muxed_cells.append(line1) self.pinnumbers = sorted(self.pinnumbers) - self.upper_offset = self.lower_offset + \ - int(math.log(len(self.muxed_cells), 2)) if verify: self.do_checks() - self.cell_bitwidth = self.get_cell_bit_width() + #self.cell_bitwidth = self.get_cell_bit_widths() # == user info after parsing ================= # self.N_IO = len(self.dedicated_cells) + len(self.muxed_cells) print("Max number of IO: " + str(self.N_IO)) - print("Muxer bit width: " + str(self.cell_bitwidth)) + #print("Muxer bit width: " + str(self.cell_bitwidth)) print("Muxed IOs: " + str(len(self.muxed_cells))) print("Dedicated IOs: " + str(len(self.dedicated_cells))) + #sys.exit(0) def do_checks(self): """ Multiple checks to see if the user has not screwed up @@ -108,12 +112,22 @@ class Parse(object): # TODO - def get_cell_bit_width(self): + def get_max_cell_bitwidth(self): max_num_cells = 0 for cell in self.muxed_cells: + print cell max_num_cells = max(len(cell) - 1, max_num_cells) return int(math.log(max_num_cells + 1, 2)) + def get_muxwidth(self, cellnum): + return self.muxed_cells_width[int(cellnum)] + + def get_muxbitwidth(self, cellnum): + wid = self.get_muxwidth(cellnum) + if wid == 1: + return 0 + return int(math.log(wid + 1, 2)) + if __name__ == '__main__': p = Parse()