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
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
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
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
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