periph: add Peripheral base class
[lambdasoc.git] / lambdasoc / test / _wishbone.py
1 def wb_read(bus, addr, sel, timeout=32):
2 yield bus.cyc.eq(1)
3 yield bus.stb.eq(1)
4 yield bus.adr.eq(addr)
5 yield bus.sel.eq(sel)
6 yield
7 cycles = 0
8 while not (yield bus.ack):
9 yield
10 if cycles >= timeout:
11 raise RuntimeError("Wishbone transaction timed out")
12 cycles += 1
13 data = (yield bus.dat_r)
14 yield bus.cyc.eq(0)
15 yield bus.stb.eq(0)
16 return data
17
18 def wb_write(bus, addr, data, sel, timeout=32):
19 yield bus.cyc.eq(1)
20 yield bus.stb.eq(1)
21 yield bus.adr.eq(addr)
22 yield bus.we.eq(1)
23 yield bus.sel.eq(sel)
24 yield bus.dat_w.eq(data)
25 yield
26 cycles = 0
27 while not (yield bus.ack):
28 yield
29 if cycles >= timeout:
30 raise RuntimeError("Wishbone transaction timed out")
31 cycles += 1
32 yield bus.cyc.eq(0)
33 yield bus.stb.eq(0)
34 yield bus.we.eq(0)