Files
DRAMSys/dram/resources/scripts/stlGenerator.py
2014-04-20 22:16:32 +02:00

124 lines
4.7 KiB
Python
Executable File

import xml.etree.ElementTree as ET
import re
import sys
import os
class DramConfigReader:
maxValues = {}
startBits = {}
endBits = {}
def __extractAdressEncoding(self, root, elementName):
rowElement = root[0].find(elementName)
rowBitFrom, rowBitsTo = int(
rowElement.attrib['from']), int(rowElement.attrib['to'])
rowBitRange = rowBitsTo - rowBitFrom + 1
maxRow = 2 ** rowBitRange - 1
print('{0}: range {1}..{2}'.format(elementName, 0, maxRow))
self.startBits[elementName] = rowBitFrom
self.endBits[elementName] = rowBitsTo
self.maxValues[elementName] = maxRow
def __init__(self):
root = ET.parse(
os.path.dirname(os.path.realpath(sys.argv[0])) + '/../configs/addressConfig.xml').getroot()
self.__extractAdressEncoding(root, 'channel')
self.__extractAdressEncoding(root, 'bank')
self.__extractAdressEncoding(root, 'row')
self.__extractAdressEncoding(root, 'colum')
print(self.startBits)
print(self.endBits)
class StlReader:
# __dramConfigReader = DramConfigReader()
# def onesMask(self, numberOfOnes):
# result = 0
# for i in range(numberOfOnes):
# result = result | 1 << i
# return result
# def parseAttributeFromAddress(self, address, element):
# return (address >> self.__dramConfigReader.startBits[element]) & self.onesMask(self.__dramConfigReader.endBits[element] - self.__dramConfigReader.startBits[element] + 1)
# def formatStlLine(self, line):
# try:
# found = re.search('0x[0-9,a-f]+', line).group(0)
# address = int(found, 16)
# decodedAddress = '[Channel: {0} Bank: {0} Row:{1} Col:{2}]'.format(self.parseAttributeFromAddress(address, 'channel'),
# self.parseAttributeFromAddress(address, 'bank'), self.parseAttributeFromAddress(address, 'row'), self.parseAttributeFromAddress(address, 'colum'))
# return line.replace("\n", " ") + decodedAddress
# except AttributeError:
# return ''
def printStlPretty(self, filename):
f = open(filename)
for line in f.readlines():
#print(self.formatStlLine(line))
found = re.search('0x[0-9,a-f]+', line).group(0)
address = int(found, 16)
print(format(address, '032b')) #+ " " + self.formatStlLine(line))
# class StlGenerator:
# __actions = []
# __time = 0
# __dramConfigReader = DramConfigReader()
# def clear(self):
# self.__actions = []
# self.__time = 0
# def setTime(self, time):
# self.__time = time
# def addAction(self, bank, row, channel=0, RD_WR='read'):
# tupel = (self.__time, RD_WR, self.__generateAdress(channel, bank, row))
# self.__actions.append(tupel)
# def setTimeAndAddAction(self, time, bank, row, channel=0, RD_WR='read'):
# self.setTime(self, time)
# self.addAction(self, bank, row, channel, RD_WR)
# def addLoad(self, banks, rows, channel=0, RD_WR='read'):
# for bank in banks:
# for row in rows:
# self.addAction(bank, row, channel, RD_WR)
# def setTimeAndAddLoad(self, time, banks, rows, channel=0, RD_WR='read'):
# self.setTime(self, time)
# self.addLoad(banks, rows, channel, RD_WR)
# def generateStl(self, filename):
# f = open(filename, 'w')
# tmp = []
# for tupel in self.__actions:
# tmp.append('{0}: {1} {2:#x}'.format(tupel[0], tupel[1], tupel[2]))
# result = '\n'.join(tmp)
# f.write(result)
# f.close()
# print(
# '<---------------------- Generated stl {0} ---------------------->'.format(filename))
# print(result)
# print(
# '<---------------------- End generated stl ---------------------->'.format(filename))
# def __generateAdress(self, channel, bank, row):
# if(channel > self.__dramConfigReader.maxValues['channel']):
# raise(BaseException('Channel argument out of range'))
# if(bank > self.__dramConfigReader.maxValues['bank']):
# raise(BaseException('Bank argument out of range'))
# if(row > self.__dramConfigReader.maxValues['row']):
# raise(BaseException('Row argument out of range'))
# return (channel << self.__dramConfigReader.startBits['channel']) | (bank << self.__dramConfigReader.startBits['bank']) | (row << self.__dramConfigReader.startBits['row'])
# def __init__(self):
# pass
if __name__ == '__main__':
if(len(sys.argv) > 1):
stlReader = StlReader()
for line in sys.argv[1:]:
stlReader.printStlPretty(line)