From: Jean THOMAS Date: Thu, 25 Jun 2020 10:32:49 +0000 (+0200) Subject: Add Wishbone read/write helpers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a062c7ab07998ce307630b3c8a50daa09828a2b2;p=gram.git Add Wishbone read/write helpers --- diff --git a/gram/test/utils.py b/gram/test/utils.py index 38b8010..45b1c30 100644 --- a/gram/test/utils.py +++ b/gram/test/utils.py @@ -15,7 +15,7 @@ from nmigen.back import rtlil from nmigen._toolchain import require_tool -__all__ = ["FHDLTestCase", "runSimulation"] +__all__ = ["FHDLTestCase", "runSimulation", "wb_read", "wb_write"] def runSimulation(module, process, vcd_filename="anonymous.vcd", clock=1e-6): sim = Simulator(module) @@ -103,3 +103,38 @@ class FHDLTestCase(unittest.TestCase): stdout, stderr = proc.communicate(config) if proc.returncode != 0: self.fail("Formal verification failed:\n" + stdout) + +def wb_read(bus, addr, sel, timeout=32): + yield bus.cyc.eq(1) + yield bus.stb.eq(1) + yield bus.adr.eq(addr) + yield bus.sel.eq(sel) + yield + cycles = 0 + while not (yield bus.ack): + yield + if cycles >= timeout: + raise RuntimeError("Wishbone transaction timed out") + cycles += 1 + data = (yield bus.dat_r) + yield bus.cyc.eq(0) + yield bus.stb.eq(0) + return data + +def wb_write(bus, addr, data, sel, timeout=32): + yield bus.cyc.eq(1) + yield bus.stb.eq(1) + yield bus.adr.eq(addr) + yield bus.we.eq(1) + yield bus.sel.eq(sel) + yield bus.dat_w.eq(data) + yield + cycles = 0 + while not (yield bus.ack): + yield + if cycles >= timeout: + raise RuntimeError("Wishbone transaction timed out") + cycles += 1 + yield bus.cyc.eq(0) + yield bus.stb.eq(0) + yield bus.we.eq(0)