serdes-transceiver/short_pulse_tx.py

51 lines
1.4 KiB
Python

from migen import *
from migen.build.platforms.sinara import kasli, efc
from sync_serdes import MultiLineTX
from bidirectionalIO import BiDirectionalIO
from eem_helpers import generate_pads
from kasli_crg import TransceiverCRG
class ShortPulseTX(Module):
def __init__(self, i_pads, o_pads):
# TX serdes
self.submodules.tx = MultiLineTX()
# TX PHY
self.submodules.channel = BiDirectionalIO(i_pads, o_pads)
self.comb += [
# Transmitter to SERDES
self.channel.i.eq(self.tx.ser_out),
self.channel.t.eq(self.tx.t_out),
# # SERDES to receiver
# self.rx.ser_in_no_dly.eq(self.channel.o),
# Hardwire TX with 1 pulse signal
self.tx.txdata.eq(0b00000000000000010000)
]
if __name__ == "__main__":
platform = efc.Platform()
# Generate pads for the I/O blocks
for eem in range(2):
generate_pads(platform, eem)
data_eem = 0
i_pads = [
platform.request("dio{}".format(data_eem), i) for i in range(4)
]
o_pads = [
platform.request("dio{}".format(data_eem), i+4) for i in range(4)
]
crg = TransceiverCRG(platform, platform.request("gtp_clk"))
top = ShortPulseTX(i_pads, o_pads)
top.submodules += crg
output_dir = "{}_{}_build".format("efc", "master")
platform.build(top, build_dir=output_dir)