コード例 #1
0
def always(*args):
    callinfo = _getCallInfo()
    sigargs = []
    for arg in args:
        if isinstance(arg, _Signal):
            arg._read = True
            arg._used = True
            sigargs.append(arg)
        elif isinstance(arg, _WaiterList):
            arg.sig._read = True
            arg.sig._used = True
            sigargs.append(arg.sig)
        elif not isinstance(arg, delay):
            raise AlwaysError(_error.DecArgType)
    sigdict = _get_sigdict(sigargs, callinfo.symdict)

    def _always_decorator(func):
        if not isinstance(func, FunctionType):
            raise AlwaysError(_error.ArgType)
        if _isGenFunc(func):
            raise AlwaysError(_error.ArgType)
        if func.__code__.co_argcount > 0:
            raise AlwaysError(_error.NrOfArgs)
        return _Always(func, args, callinfo=callinfo, sigdict=sigdict)

    return _always_decorator
コード例 #2
0
ファイル: _always_seq.py プロジェクト: cpeppenster/myhdl
def always_seq(edge, reset):
    callinfo = _getCallInfo()
    sigargs = []
    if not isinstance(edge, _WaiterList):
        raise AlwaysSeqError(_error.EdgeType)
    edge.sig._read = True
    edge.sig._used = True
    sigargs.append(edge.sig)
    if reset is not None:
        if not isinstance(reset, ResetSignal):
            raise AlwaysSeqError(_error.ResetType)
        reset._read = True
        reset._used = True
        sigargs.append(reset)
    sigdict = _get_sigdict(sigargs, callinfo.symdict)

    def _always_seq_decorator(func):
        if not isinstance(func, FunctionType):
            raise AlwaysSeqError(_error.ArgType)
        if _isGenFunc(func):
            raise AlwaysSeqError(_error.ArgType)
        if func.__code__.co_argcount > 0:
            raise AlwaysSeqError(_error.NrOfArgs)
        return _AlwaysSeq(func, edge, reset, callinfo=callinfo, sigdict=sigdict)
    return _always_seq_decorator
コード例 #3
0
ファイル: pygmyhdl.py プロジェクト: xesscorp/pygmyhdl
    def seq_logic(edge, reset=None):
        '''Decorator for sequential (clocked) logic functions in PygMyHDL.
           Creates a sequential logic block and stores it on the instance list.'''
        callinfo = myhdlinst._getCallInfo()
        sigargs = []
        if not isinstance(edge, myhdlsig._WaiterList):
            raise AlwaysSeqError(myhdlseq._error.EdgeType)
        edge.sig._read = True
        edge.sig._used = True
        sigargs.append(edge.sig)
        if reset is not None:
            if not isinstance(reset, myhdlseq.ResetSignal):
                raise AlwaysSeqError(myhdlseq._error.ResetType)
            reset._read = True
            reset._used = True
            sigargs.append(reset)
        sigdict = myhdlalways._get_sigdict(sigargs, callinfo.symdict)

        def _always_seq_decorator(func):
            if not isinstance(func, FunctionType):
                raise myhdlseq.AlwaysSeqError(myhdlseq._error.ArgType)
            if myhdlutil._isGenFunc(func):
                raise myhdlseq.AlwaysSeqError(myhdlseq._error.ArgType)
            if func.__code__.co_argcount > 0:
                raise myhdlseq.AlwaysSeqError(myhdlseq._error.NrOfArgs)
            c = myhdlseq._AlwaysSeq(func,
                                    edge,
                                    reset,
                                    callinfo=callinfo,
                                    sigdict=sigdict)
            _instances.append(c)
            return c

        return _always_seq_decorator
コード例 #4
0
def always_seq(edge, reset):
    callinfo = _getCallInfo()
    sigargs = []
    if not isinstance(edge, _WaiterList):
        raise AlwaysSeqError(_error.EdgeType)
    edge.sig._read = True
    edge.sig._used = True
    sigargs.append(edge.sig)
    if reset is not None:
        if not isinstance(reset, ResetSignal):
            raise AlwaysSeqError(_error.ResetType)
        reset._read = True
        reset._used = True
        sigargs.append(reset)
    sigdict = _get_sigdict(sigargs, callinfo.symdict)

    def _always_seq_decorator(func):
        if not isinstance(func, FunctionType):
            raise AlwaysSeqError(_error.ArgType)
        if _isGenFunc(func):
            raise AlwaysSeqError(_error.ArgType)
        if func.__code__.co_argcount > 0:
            raise AlwaysSeqError(_error.NrOfArgs)
        return _AlwaysSeq(func,
                          edge,
                          reset,
                          callinfo=callinfo,
                          sigdict=sigdict)

    return _always_seq_decorator
コード例 #5
0
ファイル: _always.py プロジェクト: StudentESE/myhdl
def always(*args):
    callinfo = _getCallInfo()
    sigargs = []
    for arg in args:
        if isinstance(arg, _Signal):
            arg._read = True
            arg._used = True
            sigargs.append(arg)
        elif isinstance(arg, _WaiterList):
            arg.sig._read = True
            arg.sig._used = True
            sigargs.append(arg.sig)
        elif not isinstance(arg, delay):
            raise AlwaysError(_error.DecArgType)
    sigdict = _get_sigdict(sigargs, callinfo.symdict)

    def _always_decorator(func):
        if not isinstance(func, FunctionType):
            raise AlwaysError(_error.ArgType)
        if _isGenFunc(func):
            raise AlwaysError(_error.ArgType)
        if func.__code__.co_argcount > 0:
            raise AlwaysError(_error.NrOfArgs)
        return _Always(func, args, callinfo=callinfo, sigdict=sigdict)
    return _always_decorator
コード例 #6
0
def always_comb(func):
    callinfo = _getCallInfo()
    if not isinstance(func, FunctionType):
        raise AlwaysCombError(_error.ArgType)
    if _isGenFunc(func):
        raise AlwaysCombError(_error.ArgType)
    if func.__code__.co_argcount > 0:
        raise AlwaysCombError(_error.NrOfArgs)
    c = _AlwaysComb(func, callinfo=callinfo)
    return c
コード例 #7
0
ファイル: _always_comb.py プロジェクト: StudentESE/myhdl
def always_comb(func):
    callinfo = _getCallInfo()
    if not isinstance(func, FunctionType):
        raise AlwaysCombError(_error.ArgType)
    if _isGenFunc(func):
        raise AlwaysCombError(_error.ArgType)
    if func.__code__.co_argcount > 0:
        raise AlwaysCombError(_error.NrOfArgs)
    c = _AlwaysComb(func, callinfo=callinfo)
    return c
コード例 #8
0
ファイル: pygmyhdl.py プロジェクト: xesscorp/pygmyhdl
 def comb_logic(func):
     '''Decorator for combinational logic functions in PygMyHDL.
        Create a combinational logic block and store it on the instance list.'''
     callinfo = myhdlinst._getCallInfo()
     if not isinstance(func, FunctionType):
         raise myhdlcomb.AlwaysCombError(myhdlcomb._error.ArgType)
     if myhdlutil._isGenFunc(func):
         raise myhdlcomb.AlwaysCombError(myhdlcomb._error.ArgType)
     if func.__code__.co_argcount > 0:
         raise myhdlcomb.AlwaysCombError(myhdlcomb._error.NrOfArgs)
     c = myhdlcomb._AlwaysComb(func, callinfo=callinfo)
     _instances.append(c)
     return c