wishbone: add read/write simulation methods
authorSebastien Bourdeauducq <sb@m-labs.hk>
Tue, 3 Nov 2015 02:37:31 +0000 (10:37 +0800)
committerSebastien Bourdeauducq <sb@m-labs.hk>
Tue, 3 Nov 2015 02:37:31 +0000 (10:37 +0800)
misoc/interconnect/wishbone.py

index f549135e9e89d88f38874f78cd6b1681ed16e54d..990908ddcf1053e5152eae284f6f54d1bb6f2b56 100644 (file)
@@ -33,6 +33,30 @@ class Interface(Record):
             data_width=data_width,
             sel_width=data_width//8))
 
+    def _do_transaction(self):
+        yield self.cyc.eq(1)
+        yield self.stb.eq(1)
+        yield
+        while not (yield self.ack):
+            yield
+        yield self.cyc.eq(0)
+        yield self.stb.eq(0)
+
+    def write(self, adr, dat, sel=None):
+        if sel is None:
+            sel = 2**len(self.sel) - 1
+        yield self.adr.eq(adr)
+        yield self.dat_w.eq(dat)
+        yield self.sel.eq(sel)
+        yield self.we.eq(1)
+        yield from self._do_transaction()
+
+    def read(self, adr):
+        yield self.adr.eq(adr)
+        yield self.we.eq(0)
+        yield from self._do_transaction()
+        return (yield self.dat_r)
+
 
 class InterconnectPointToPoint(Module):
     def __init__(self, master, slave):