artiq/artiq/gateware/rtio/phy/wishbone.py

45 lines
1.2 KiB
Python
Raw Normal View History

2015-11-04 00:35:03 +08:00
from migen import *
from misoc.interconnect import wishbone
2015-04-15 20:39:40 +08:00
from artiq.gateware.rtio import rtlink
class RT2WB(Module):
def __init__(self, address_width, wb=None):
if wb is None:
wb = wishbone.Interface()
self.wb = wb
2015-04-15 20:39:40 +08:00
self.rtlink = rtlink.Interface(
rtlink.OInterface(
2015-11-04 00:35:03 +08:00
len(wb.dat_w),
2015-04-15 20:39:40 +08:00
address_width + 1,
suppress_nop=False),
rtlink.IInterface(
2015-11-04 00:35:03 +08:00
len(wb.dat_r),
timestamped=False)
2015-04-15 20:39:40 +08:00
)
# # #
active = Signal()
self.sync.rio += [
2015-04-15 20:39:40 +08:00
If(self.rtlink.o.stb,
active.eq(1),
wb.adr.eq(self.rtlink.o.address[:address_width]),
wb.we.eq(~self.rtlink.o.address[address_width]),
wb.dat_w.eq(self.rtlink.o.data),
2015-11-04 00:35:03 +08:00
wb.sel.eq(2**len(wb.sel) - 1)
2015-04-15 20:39:40 +08:00
),
If(wb.ack,
active.eq(0)
)
]
self.comb += [
self.rtlink.o.busy.eq(active),
wb.cyc.eq(active),
wb.stb.eq(active),
self.rtlink.i.stb.eq(wb.ack & ~wb.we),
self.rtlink.i.data.eq(wb.dat_r)
2015-04-15 20:39:40 +08:00
]