#!/usr/bin/python # This file is part of the Coriolis Project. # Copyright (C) Laboratoire LIP6 - Departement ASIM # Universite Pierre et Marie Curie # # Main contributors : # Christophe Alexandre # Sophie Belloeil # Hugo Clement # Jean-Paul Chaput # Damien Dupuis # Christian Masson # Marek Sroka # # The Coriolis Project is free software; you can redistribute it # and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # The Coriolis Project is distributed in the hope that it will be # useful, but WITHOUT ANY WARRANTY; without even the implied warranty # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with the Coriolis Project; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA # # License-Tag # Authors-Tag # =================================================================== # # x-----------------------------------------------------------------x # | | # | C O R I O L I S | # | S t r a t u s - Netlists/Layouts Description | # | | # | Author : Sophie BELLOEIL | # | E-mail : Sophie.Belloeil@asim.lip6.fr | # | =============================================================== | # | Py Module : "./st_parser.py" | # | *************************************************************** | # | U p d a t e s | # | | # x-----------------------------------------------------------------x import xml.parsers.expat import re, types BV = [] BVg = [] I = [] I0 = [] I2 = [] I3 = [] A = [] CK = [] CMD = [] CMD0 = [] CIN = [] Q = [] NQ = [] S = [] ############## class Parser : def __init__ ( self ) : self._p = xml.parsers.expat.ParserCreate () self._p.StartElementHandler = self.start_element self._p.EndElementHandler = self.end_element self._p.CharacterDataHandler = self.char_data self._realCell = {} self._inOut = {} # Handler functions ######################################### def start_element ( self, name, attrs ) : # Print which the technology is # if name == 'technology' : print " - Stratus virtual technology targets:", attrs['name'] # Modification of attributes if name == 'model' : virtName = str(attrs['name']) self._realCell[virtName] = str(attrs['realcell']) inOutTemp = {} for key in attrs : if key not in ( 'name', 'realcell' ) : virtualPort = str(key) realPort = str(attrs[virtualPort]) if ',' in realPort : import re tabPort = re.split ( '[,]', realPort ) inOutTemp[virtualPort] = tabPort else : inOutTemp[virtualPort] = realPort self._inOut[str(attrs['name'])] = inOutTemp ################################ def end_element ( self, name ) : pass ############################## def char_data ( self, data ) : pass # print repr(data) # Parsing a file ################ def Parse ( self, nameFile ) : self._p.ParseFile ( open ( nameFile, "r" ) ) ################## class InitParser : def __init__ ( self ) : self._p = xml.parsers.expat.ParserCreate () self._p.StartElementHandler = self.start_element self._p.EndElementHandler = self.end_element self._p.CharacterDataHandler = self.char_data self._realCell = {} self._inOut = {} # Handler functions ######################################### def start_element ( self, name, attrs ) : global BV, I, I0, I2, I3, A, CK, CMD, CMD0, CIN, Q, NQ, S # Modification of attributes if name == 'model' : virtName = str(attrs['name']) BV.append ( virtName ) for key in attrs : if key == 'i' : I.append ( virtName ) elif key == 'i0' : I0.append ( virtName ) elif key == 'i2' : I2.append ( virtName ) elif key == 'i3' : I3.append ( virtName ) elif key == 'a' : A.append ( virtName ) elif key == 'ck' : CK.append ( virtName ) elif key == 'cmd' : CMD.append ( virtName ) elif key == 'cmd0' : CMD0.append ( virtName ) elif key == 'cin' : CIN.append ( virtName ) elif key == 'q' : Q.append ( virtName ) elif key == 'nq' : NQ.append ( virtName ) elif key == 'sout' : S.append ( virtName ) ################################ def end_element ( self, name ) : pass ############################## def char_data ( self, data ) : pass # print repr(data) # Parsing a file ################ def Parse ( self, nameFile ) : self._p.ParseFile ( open ( nameFile, "r" ) ) # Given the tab of the name of the cells, contruction of a tab giving the name of the generators (first letter uppered) for name in BV : chaine = re.search ( "([a-z])(.+)", name ) name_g = chaine.group(1).upper() + chaine.group(2) BVg.append ( name_g ) ############## class WeightParser : def __init__ ( self ) : self._p = xml.parsers.expat.ParserCreate () self._p.StartElementHandler = self.start_element self._p.EndElementHandler = self.end_element self._p.CharacterDataHandler = self.char_data self._weightTime = {} self._weightArea = {} # Handler functions ######################################### def start_element ( self, name, attrs ) : if name == 'model' : virtName = str(attrs['name']) if 'time' in attrs : temp = float(attrs['time']) else : # print 'Warning: no weight done in the file, weight put to 1.' temp = 1 self._weightTime[virtName] = temp if 'area' in attrs : temp = float(attrs['area']) else : # print 'Warning: no weight done in the file, weight put to 1.' temp = 1 self._weightArea[virtName] = temp ################################ def end_element ( self, name ) : pass ############################## def char_data ( self, data ) : pass # print repr(data) # Parsing a file ################ def Parse ( self, nameFile ) : self._p.ParseFile ( open ( nameFile, "r" ) )