mirror of
https://github.com/m-labs/artiq.git
synced 2025-02-03 06:10:18 +08:00
Change to testing different types of I/O LVDS
Signed-off-by: Egor Savkin <es@m-labs.hk>
This commit is contained in:
parent
1e1aa62c03
commit
036af1ebff
@ -75,11 +75,13 @@ class SinaraTester(EnvExperiment):
|
|||||||
dev = self.get_device(name)
|
dev = self.get_device(name)
|
||||||
if "led" in name: # guess
|
if "led" in name: # guess
|
||||||
self.leds[name] = dev
|
self.leds[name] = dev
|
||||||
|
elif "board" in desc and desc["board"] == "dio_lvds":
|
||||||
|
self.ttl_lvds_outs[name] = self.get_device(name)
|
||||||
else:
|
else:
|
||||||
self.ttl_outs[name] = dev
|
self.ttl_outs[name] = dev
|
||||||
elif (module, cls) == ("artiq.coredevice.ttl", "TTLInOut"):
|
elif (module, cls) == ("artiq.coredevice.ttl", "TTLInOut"):
|
||||||
if "board" in desc and desc["board"] == "dio_lvds":
|
if "board" in desc and desc["board"] == "dio_lvds":
|
||||||
self.ttl_lvds[name] = self.get_device(name)
|
self.ttl_lvds_ins[name] = self.get_device(name)
|
||||||
else:
|
else:
|
||||||
self.ttl_ins[name] = self.get_device(name)
|
self.ttl_ins[name] = self.get_device(name)
|
||||||
elif (module, cls) == ("artiq.coredevice.urukul", "CPLD"):
|
elif (module, cls) == ("artiq.coredevice.urukul", "CPLD"):
|
||||||
@ -160,6 +162,8 @@ class SinaraTester(EnvExperiment):
|
|||||||
self.leds = sorted(self.leds.items(), key=lambda x: x[1].channel)
|
self.leds = sorted(self.leds.items(), key=lambda x: x[1].channel)
|
||||||
self.ttl_outs = sorted(self.ttl_outs.items(), key=lambda x: x[1].channel)
|
self.ttl_outs = sorted(self.ttl_outs.items(), key=lambda x: x[1].channel)
|
||||||
self.ttl_ins = sorted(self.ttl_ins.items(), key=lambda x: x[1].channel)
|
self.ttl_ins = sorted(self.ttl_ins.items(), key=lambda x: x[1].channel)
|
||||||
|
self.ttl_lvds_ins = sorted(self.ttl_lvds_ins.items(), key=lambda x: x[1].channel)
|
||||||
|
self.ttl_lvds_outs = sorted(self.ttl_lvds_outs.items(), key=lambda x: x[1].channel)
|
||||||
self.urukuls = sorted(self.urukuls.items(), key=lambda x: (x[1].cpld.bus.channel, x[1].chip_select))
|
self.urukuls = sorted(self.urukuls.items(), key=lambda x: (x[1].cpld.bus.channel, x[1].chip_select))
|
||||||
self.samplers = sorted(self.samplers.items(), key=lambda x: x[1].cnv.channel)
|
self.samplers = sorted(self.samplers.items(), key=lambda x: x[1].cnv.channel)
|
||||||
self.zotinos = sorted(self.zotinos.items(), key=lambda x: x[1].bus.channel)
|
self.zotinos = sorted(self.zotinos.items(), key=lambda x: x[1].bus.channel)
|
||||||
@ -249,45 +253,83 @@ class SinaraTester(EnvExperiment):
|
|||||||
else:
|
else:
|
||||||
print("FAILED")
|
print("FAILED")
|
||||||
|
|
||||||
@kernel
|
|
||||||
def set_ttl_lvds(self, ttl_to_output, ttl_to_input):
|
|
||||||
self.core.break_realtime()
|
|
||||||
ttl_to_input.input()
|
|
||||||
delay(50*ms)
|
|
||||||
ttl_to_output.output()
|
|
||||||
delay(50*ms)
|
|
||||||
|
|
||||||
def test_ttl_lvds_outs(self):
|
def test_ttl_lvds_outs(self):
|
||||||
print("*** LVDS TTL outputs are tested along with LVDS TTL inputs.")
|
print("*** Testing LVDS TTL output channels")
|
||||||
|
|
||||||
def test_ttl_lvds(self):
|
if len(self.ttl_lvds_ins) == 0:
|
||||||
print("*** Testing LVDS TTL.")
|
print("No available inputs for testing. Skipping...")
|
||||||
|
return
|
||||||
|
|
||||||
|
ttl_index = 0
|
||||||
|
default_ttl_in_name, _ = self.ttl_lvds_ins[ttl_index]
|
||||||
|
|
||||||
|
ttl_in_name = input(f"TTL device to use as an input (default: {default_ttl_in_name}): ")
|
||||||
|
|
||||||
|
if not ttl_in_name:
|
||||||
|
ttl_in_name = default_ttl_in_name
|
||||||
|
|
||||||
|
ttl_index = next(i for i, v in enumerate(self.ttl_lvds_ins) if v[0] == ttl_in_name)
|
||||||
|
ttl_index = ttl_index - (ttl_index % 4)
|
||||||
|
|
||||||
|
ttl_in_chunk = self.ttl_lvds_ins[ttl_index : ttl_index + 4]
|
||||||
|
|
||||||
|
list_of_ins = ', '.join(map(lambda x: x[0], ttl_in_chunk))
|
||||||
print("LVDS TTL channels are tested in groups of 4.")
|
print("LVDS TTL channels are tested in groups of 4.")
|
||||||
print("Insert one end of Ethernet cable into first group (marked as CH 0..3)")
|
print(f"Insert one end of Ethernet cable into the group of inputs ({list_of_ins})")
|
||||||
print(" of the first LVDS card and press ENTER when done.")
|
print("and press ENTER when done.")
|
||||||
input()
|
|
||||||
#print(", ".join(self.ttl_lvds))
|
for i, ttl_out_chunk in enumerate(chunker(self.ttl_lvds_outs, 4)):
|
||||||
for i, ttl_chunk in enumerate(chunker(self.ttl_lvds[4:], 4)):
|
list_of_outs = ', '.join(map(lambda x: x[0], ttl_out_chunk))
|
||||||
print(f"Connect first group (CH 0..3) to group #{i + 2} (LVDS card #{(i + 1) // 4}, CH{((i + 1) % 4 ) * 4}..{((i + 1) % 4 ) * 4 + 3}). Press ENTER when done.")
|
print(f"Connect input group ({list_of_ins}) to ({list_of_outs}). Press ENTER when done.")
|
||||||
input()
|
input()
|
||||||
for x in range(4):
|
for x in range(4):
|
||||||
ttl_in, ttl_in_dev = self.ttl_lvds[0]
|
ttl_in, ttl_in_dev = ttl_in_chunk[x]
|
||||||
ttl_out, ttl_out_dev = ttl_chunk[x]
|
ttl_out, ttl_out_dev = ttl_out_chunk[x]
|
||||||
print(f"Testing {ttl_in} with {ttl_out}... ", end="")
|
print(f"Testing {ttl_in} with {ttl_out}... ", end="")
|
||||||
|
|
||||||
self.set_ttl_lvds(ttl_out_dev, ttl_in_dev)
|
if self.test_ttl_in(ttl_out_dev, ttl_in_dev):
|
||||||
forward_test_result = self.test_ttl_in(ttl_out_dev, ttl_in_dev)
|
|
||||||
|
|
||||||
self.set_ttl_lvds(ttl_in_dev, ttl_out_dev)
|
|
||||||
reverse_test_result = self.test_ttl_in(ttl_in_dev, ttl_out_dev)
|
|
||||||
|
|
||||||
if forward_test_result and reverse_test_result:
|
|
||||||
print("PASSED")
|
print("PASSED")
|
||||||
continue
|
else:
|
||||||
if not forward_test_result:
|
print("FAILED")
|
||||||
print(f"FAILED: from {ttl_out} to {ttl_in}")
|
|
||||||
if not reverse_test_result:
|
def test_ttl_lvds_ins(self):
|
||||||
print(f"FAILED: from {ttl_in} to {ttl_out}")
|
print("*** Testing LVDS TTL input channels")
|
||||||
|
|
||||||
|
if len(self.ttl_lvds_outs) == 0:
|
||||||
|
print("No available inputs for testing. Skipping...")
|
||||||
|
return
|
||||||
|
|
||||||
|
ttl_index = 0
|
||||||
|
default_ttl_out_name, _ = self.ttl_lvds_outs[ttl_index]
|
||||||
|
|
||||||
|
ttl_out_name = input("TTL device to use as an output (default: {}): ".format(default_ttl_out_name))
|
||||||
|
|
||||||
|
if not ttl_out_name:
|
||||||
|
ttl_out_name = default_ttl_out_name
|
||||||
|
|
||||||
|
ttl_index = next(i for i, v in enumerate(self.ttl_lvds_outs) if v[0] == ttl_out_name)
|
||||||
|
ttl_index = ttl_index - (ttl_index % 4)
|
||||||
|
|
||||||
|
ttl_out_chunk = self.ttl_lvds_outs[ttl_index : ttl_index + 4]
|
||||||
|
|
||||||
|
list_of_outs = ', '.join(map(lambda x: x[0], ttl_out_chunk))
|
||||||
|
print("LVDS TTL input channels are tested with LVDS TTL output channels in groups of 4.")
|
||||||
|
print(f"Insert one end of Ethernet cable into the group of outputs ({list_of_outs})")
|
||||||
|
print("and press ENTER when done.")
|
||||||
|
|
||||||
|
for i, ttl_in_chunk in enumerate(chunker(self.ttl_lvds_ins, 4)):
|
||||||
|
list_of_ins = ', '.join(map(lambda x: x[0], ttl_in_chunk))
|
||||||
|
print(f"Connect output group ({list_of_outs}) to ({list_of_ins}). Press ENTER when done.")
|
||||||
|
input()
|
||||||
|
for x in range(4):
|
||||||
|
ttl_in, ttl_in_dev = ttl_in_chunk[x]
|
||||||
|
ttl_out, ttl_out_dev = ttl_out_chunk[x]
|
||||||
|
print(f"Testing {ttl_in} with {ttl_out}... ", end="")
|
||||||
|
|
||||||
|
if self.test_ttl_in(ttl_out_dev, ttl_in_dev):
|
||||||
|
print("PASSED")
|
||||||
|
else:
|
||||||
|
print("FAILED")
|
||||||
|
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
|
Loading…
Reference in New Issue
Block a user