toffee.debug 源代码

import pdb


[文档] def info(*args, **kwargs): print("***", end=" ") print(*args, **kwargs)
[文档] def debug(*args, **kwargs): print("Debug:", end=" ") print(*args, **kwargs)
[文档] def error(*args, **kwargs): print("Error:", end=" ") print(*args, **kwargs)
[文档] class PdbToffee(pdb.Pdb): def __init__(self, dut, *args, **kwargs): super().__init__(*args, **kwargs) self.dut = dut self.prompt = "toffee> "
[文档] def do_tstep(self, arg): if not arg: arg = 1 else: try: arg = int(arg) except Exception as e: info("parse cycles from '%s' fail: " % arg, e) return self.dut.Step(arg) self.dut.FlushWaveform()
[文档] def do_tflush(self, arg): if arg: info("flush need no args") return self.dut.FlushWaveform()
[文档] def do_tlist(self, arg): prefix = "" deep = 99 if arg: args = arg.split() deep = args[0] if len(args) > 1: prefix = args[1] try: deep = int(deep) except Exception as e: info("parse deep from '%s' fail: " % deep, e) return for s in self.dut.VPIInternalSignalList(prefix, deep): info(s)
[文档] def do_tprint(self, arg): if not arg: return arg = arg.split() name = arg[0] if len(arg) > 1: stype = arg[1] stype = stype.lower() if stype not in ["bin", "hex", "dec"]: error("invalid print type '%s'" % stype) return else: stype = "dec" signal = self.dut.GetInternalSignal(name) if signal is None: error("signal '%s' not found" % name) return if stype == "bin": info("(width: %d) value:" % signal.W(), bin(signal.value)) elif stype == "hex": info("(width: %d) value:" % signal.W(), hex(signal.value)) else: info("(width: %d) value:" % signal.W(), signal.value)
[文档] def do_tset(self, arg): if not arg: return arg = arg.split() name = arg[0] if len(arg) < 2: error("need value to set, usage: tset signal_name value") return value = arg[1] try: value = int(value) except Exception as e: error("parse value from '%s' fail: " % value, e) return signal = self.dut.GetInternalSignal(name) if signal is None: error("signal '%s' not found" % name) return signal.value = value self.dut.RefreshComb()
[文档] def do_tforce(self, arg): if not arg: return arg = arg.split() name = arg[0] if len(arg) < 2: error("need value to force, usage: force signal_name value") return value = arg[1] try: value = int(value) except Exception as e: error("parse value from '%s' fail: " % value, e) return signal = self.dut.GetInternalSignal(name) if signal is None: error("signal '%s' not found" % name) return signal.SetIgnoreSameDataWrite(False) signal.AsVPIWriteForce() signal.value = value self.dut.RefreshComb() signal.SetIgnoreSameDataWrite(True)
[文档] def do_trelease(self, arg): if not arg: return signal = self.dut.GetInternalSignal(arg) if signal is None: error("signal '%s' not found" % arg) return signal.SetIgnoreSameDataWrite(False) signal.AsVPIWriteRelease() signal.value = signal.value self.dut.RefreshComb() signal.AsVPIWriteNoDelay() signal.SetIgnoreSameDataWrite(True)
[文档] def get(dut, *args, **kwargs): return PdbToffee(dut, *args, **kwargs)