예제 #1
0
def psfresultset(libpsf, rawdir):
    if libpsf == withlibpsf:
        os.environ['USELIBPSF'] = '1'
    else:
        os.environ['USELIBPSF'] = '0'

    rs = PSFResultSet(os.path.dirname(__file__) + '/' + rawdir)

    for hierarchical_signal, refvalue in psfresultset_testvectors[rawdir]:
        ## Get result with the possibly to have several hierarchy levels
        result = rs
        for resultkey in hierarchical_signal[:-1]:
            result = result[resultkey]

        signal = hierarchical_signal[-1]
            
        assert signal in result, '%s not in %s' % (signal, result.keys())

        value = result[signal]
        if isinstance(refvalue, Waveform):
            assert_waveform_almost_equal(value, refvalue)
        else:
            assert_almost_equal(value, refvalue)


    if libpsf == withlibpsf:
        ## Verify that libpsf was really used if libpsf was set
        try:
            import libpsf
        except ImportError:
            #libpsf not available
            pass
        else:
            assert bool(int(os.environ['USELIBPSF'])), 'libpsf could not be loaded'
예제 #2
0
파일: psf.py 프로젝트: bmachiel/pywave
    def __init__(self, file_path):
        DataFile.__init__(self, file_path)
        dir, file = os.path.split(file_path)
        self.name = dir.split(os.sep)[-1]
        self.prs = PSFResultSet(dir)
        self.rootItem = None

        # build hierarchical signal list
        self.circuit = Circuit(self.name, self)
        self.circuit._sweep_set = SweepSet([])
        self.circuit._sweep_set.add_point([])
        for key in self.prs.keys():
            currentSubckt = Subcircuit(key)
            self.circuit.add_subcircuit(currentSubckt)
            result = self.prs[key]
            top_circuit = currentSubckt
            for name in result.keys():
                currentSubckt = top_circuit
                levels = str(name).split(".")
                if len(levels) > 1:
                    for level in levels[:-1]:
                        try:
                            currentSubckt = currentSubckt[level]
                        except:
                            newSubckt = Subcircuit(level)
                            currentSubckt.add_subcircuit(newSubckt)
                            currentSubckt = newSubckt
                signal_full_name = str(key) + "___" + str(name)
                try:
                    indep_type = types['unknown']
                except KeyError:
                    indep_type = type.default
                indep_name = 'unknown'
                indep_full_name = signal_full_name + "____XValues"
                indep_signal = Signal(indep_name, indep_full_name, None, indep_type)
                indep_signal._set_parent(self.circuit)
                
                try:
                    signal_type = types['unknown']
                except KeyError:
                    signal_type = type.default
                signal = Signal(levels[-1], signal_full_name, indep_signal, signal_type)
                indep_signal._data_source_info['values'] = signal
                signal._data_source_info['set'] = key
                currentSubckt.add_signal(signal)
예제 #3
0
파일: psf.py 프로젝트: bmachiel/pywave
class PSFFile(DataFile):
    """Class to represent Cadence PSF files"""

    @staticmethod
    def extensions():
        raise NotImplementedError

    @staticmethod
    def test(file_path):
        dir, file = os.path.split(file_path)
        try:
            prs = PSFResultSet(dir)
            del prs
            return True
        except:
            return False

    def __init__(self, file_path):
        DataFile.__init__(self, file_path)
        dir, file = os.path.split(file_path)
        self.name = dir.split(os.sep)[-1]
        self.prs = PSFResultSet(dir)
        self.rootItem = None

        # build hierarchical signal list
        self.circuit = Circuit(self.name, self)
        self.circuit._sweep_set = SweepSet([])
        self.circuit._sweep_set.add_point([])
        for key in self.prs.keys():
            currentSubckt = Subcircuit(key)
            self.circuit.add_subcircuit(currentSubckt)
            result = self.prs[key]
            top_circuit = currentSubckt
            for name in result.keys():
                currentSubckt = top_circuit
                levels = str(name).split(".")
                if len(levels) > 1:
                    for level in levels[:-1]:
                        try:
                            currentSubckt = currentSubckt[level]
                        except:
                            newSubckt = Subcircuit(level)
                            currentSubckt.add_subcircuit(newSubckt)
                            currentSubckt = newSubckt
                signal_full_name = str(key) + "___" + str(name)
                try:
                    indep_type = types['unknown']
                except KeyError:
                    indep_type = type.default
                indep_name = 'unknown'
                indep_full_name = signal_full_name + "____XValues"
                indep_signal = Signal(indep_name, indep_full_name, None, indep_type)
                indep_signal._set_parent(self.circuit)
                
                try:
                    signal_type = types['unknown']
                except KeyError:
                    signal_type = type.default
                signal = Signal(levels[-1], signal_full_name, indep_signal, signal_type)
                indep_signal._data_source_info['values'] = signal
                signal._data_source_info['set'] = key
                currentSubckt.add_signal(signal)

    def get_sweep_names(self):
        return []

    def get_sweep_data(self):
        return [[]]

    def get_data(self, signal):
        if signal.get_independent_signal() is None:
            values = signal._data_source_info['values']
            dep_signal = values
        else:
            dep_signal = signal
        
        set = dep_signal._data_source_info['set']
        result = self.prs[set]
        waveform = result[dep_signal.name]
        
        if signal.get_independent_signal() is None:
            return waveform.get_x()
        else:
            return waveform.get_y()