From 9ab76e393bcdd25ce3dcd29ab73aec49da2f4b3b Mon Sep 17 00:00:00 2001 From: openpowerwtf <52765606+openpowerwtf@users.noreply.ggithub.com> Date: Tue, 19 Jul 2022 17:03:56 -0500 Subject: [PATCH] iar check and mem print test --- dev/sim/coco/A2O.py | 49 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/dev/sim/coco/A2O.py b/dev/sim/coco/A2O.py index e54e865..0daf689 100755 --- a/dev/sim/coco/A2O.py +++ b/dev/sim/coco/A2O.py @@ -5,6 +5,7 @@ from cocotb.triggers import Timer, RisingEdge from cocotb.binary import BinaryValue from cocotb.handle import Force from cocotb.handle import Release +from cocotb.result import TestSuccess from dotmap import DotMap import itertools @@ -134,6 +135,11 @@ async def A2OMonitor(dut, sim): for i in range(8): lr.append(dut.c0.xu0.lr.entry[i].reg_latch.dout) + lastComp = '' + lastCompCount = 0 + lastStack = '' + lastPrintf = '' + while ok: await RisingEdge(dut.clk_1x) @@ -141,9 +147,21 @@ async def A2OMonitor(dut, sim): if not sim.resetDone: continue + # allow registered callbacks to be called here + stack = sim.mem.dump(0x1FD00, 0x1FFFF, cols=8, trimLeadingZeros=True, trimTrailingZeros=True) + if stack != lastStack: + sim.msg('Stack:\n' + stack) + lastStack = stack + + printf = sim.mem.dump(0x1C000, 0x1C1FF, cols=8, trimLeadingZeros=True, trimTrailingZeros=True) + if printf != lastPrintf: + sim.msg('Print buffer:\n' + printf) + lastPrintf = printf + comp = '' #wtf seeing something weird here # there are cases where x's are in some bits of comp ifar's; maybe ok (predict array?) but why is completed indicated? + if iu0Comp.value == 1: comp = f'0:{sim.safeint(iu0CompIFAR.value.binstr + "00", 2):06X} ' @@ -154,6 +172,30 @@ async def A2OMonitor(dut, sim): comp = f'{comp}{sim.safeint(iuCompFlushIFAR.value.binstr + "00", 2):016X}' sim.msg(f'C0: CP {comp}') + if sim.a2o.iarPass is not None: + if sim.safeint(iu0CompIFAR.value.binstr + "00", 2) == sim.a2o.iarPass: + sim.msg(f'Passing IAR detected: {sim.a2o.iarPass:08X}') + raise TestSuccess('Test passed.') + + if sim.a2o.iarPass is not None: + if sim.safeint(iu0CompIFAR.value.binstr + "00", 2) == sim.a2o.iarPass: + sim.ok = False + sim.fail = 'Failing IAR detected' + assert False, sim.fail + break + + if sim.a2o.stopOnLoop is not None and sim.a2o.stopOnLoop > 0: + if comp == lastComp: + lastCompCount += 1 + if lastCompCount == sim.a2o.stopOnLoop: + sim.ok = False + sim.fail = 'Code hang detected' + assert False, sim.fail + break + else: + lastCompCount = 0 + lastComp = comp + if sim.a2o.traceFacUpdates: # renamables for i in range(36): @@ -183,6 +225,8 @@ async def A2OMonitor(dut, sim): sim.msg(f'LR Update:{hex(lr[arch], 16)}') lastLrCompMap[i] = arch + sim.msg(f'{me}: ended.') + # ------------------------------------------------------------------------------------------------ # Classes @@ -198,4 +242,7 @@ class A2OCore(DotMap): def __init__(self, sim): super().__init__() self.sim = sim - self.traceFacUpdates = False \ No newline at end of file + self.traceFacUpdates = False + self.stopOnLoop = 0 + self.iarPass = None + self.iarFail = None \ No newline at end of file