2
0
mirror of https://github.com/m-labs/artiq.git synced 2024-12-29 13:13:34 +08:00
artiq/soc/artiqlib/rtio/phy.py

30 lines
782 B
Python
Raw Normal View History

from migen.fhdl.std import *
from migen.genlib.cdc import MultiReg
2014-07-26 06:23:35 +08:00
from artiqlib.rtio.rbus import create_rbus
2014-07-26 06:23:35 +08:00
class SimplePHY(Module):
def __init__(self, pads, output_only_pads=set()):
2014-07-26 06:23:35 +08:00
self.rbus = create_rbus(0, pads, output_only_pads)
self.loopback_latency = 3
2014-07-26 06:23:35 +08:00
###
for pad, chif in zip(pads, self.rbus):
o_pad = Signal()
2014-07-26 06:23:35 +08:00
self.sync += If(chif.o_stb, o_pad.eq(chif.o_value))
if pad in output_only_pads:
self.comb += pad.eq(o_pad)
else:
ts = TSTriple()
i_pad = Signal()
2014-07-26 06:23:35 +08:00
self.sync += ts.oe.eq(chif.oe)
self.comb += ts.o.eq(o_pad)
self.specials += MultiReg(ts.i, i_pad), \
ts.get_tristate(pad)
i_pad_d = Signal()
self.sync += i_pad_d.eq(i_pad)
2014-07-26 06:23:35 +08:00
self.comb += chif.i_stb.eq(i_pad ^ i_pad_d), \
chif.i_value.eq(i_pad)