Skip to content
Snippets Groups Projects
Commit 80826478 authored by Patrick Robbe's avatar Patrick Robbe
Browse files

Remove config_PLL script

parent a95cb41f
No related branches found
No related tags found
1 merge request!11link
"""
config_PLLs.py -- module to initialize the internal and external PLLs
Author
JPC : 17/04/2018
JPC : 18/09/18 passed number of card as parameter
"""
import time
import os
import pathtocomponents
import sys
from fpga_comp import Arria10
from si534x_comp import Si534x
from xcvr_comp import xcvr
def main():
if (len(sys.argv) != 2):
print "Missing argument"
print "Syntax : config_PLLs <Nb_of_card> where Nb_of_pcie_slot = 0 or 2"
exit()
elif (sys.argv[1] == "0"):
print
print "===== Target board = 0"
dev = 0
elif (sys.argv[1] == "2"):
print
print "===== Target board = 2"
dev = 2
else:
print "Wrong argument"
print "Syntax : config_PLLs <Nb_of_card> where Nb_of_pcie_slot = 0 or 2"
exit()
# Program PLLs
devices = \
{1: "SI5345_U23",
2: "SI5345_U48",
3: "SI5344_U54"
}
ports = \
{1: [0, 1, 2, 3],
2: [0, 1, 3, 4, 8],
3: [0, 1]
}
# EJ os.chdir("../../../FC0/devices_lli/components")
os.chdir("../Python/components")
# print os.getcwd()
# Modif 17-01-2019 EJ EP changement des 3 fichiers programmation PLL
#files = \
#{1: "../data/Si5345-RevD-JIT1_40_jitter1_input0_40MHz-Registers.txt",
#2: "../data/Si5345-RevD-JIT2_40_jitter2_input0_40MHz-Registers.txt",
#3: "../data/Si5344-RevD-TFC_40-Registers.txt"
#}
files = \
{1: "../data/Si5345-RevB-JIT1_255-JIT1_240_jitter1_input1_255MHz_new-Registers.txt",
2: "../data/Si5345-RevB-JIT2_255-JIT2_240_jitter2_input1_255MHz_new-Registers.txt",
3: "../data/Si5344-RevB-TFC_127-Registers.txt"
}
expected_frequency = \
{1: ["40.0789 MHz", "240.4734 MHz", "Undefined", "40.0789 MHz"],
2: ["40.0789 MHz", "240.4734 MHz", "Undefined", "40.0789 MHz"],
3: ["40.0789 MHz", "Undefined", "Undefined", "Undefined"]
}
freq = {"SI5344_U54": {
0: "tfc_refclk",
1: "sys_clk_40"},
"SI5345_U23": {
0: "gbt_refclk0",
1: "gbt_refclk1",
2: "gbt_refclk2",
3: "gbt_refclk3"},
"SI5345_U48": {
0: "gbt_refclk4",
1: "gbt_refclk5",
3: "gbt_refclk6",
4: "gbt_refclk7",
8: "sys_clk_240"},
"SI53344": {
0: "ext_refclk0",
1: "ext_refclk1",
2: "ext_refclk2",
3: "ext_refclk3",
4: "ext_refclk4",
5: "ext_refclk5",
6: "ext_refclk6",
7: "ext_refclk7",
8: "ext_sys_clk"},
"SI5340": {
0: "oscillator or face plate clock"}
}
#dev = 0 # Creates a list of objects with the 3 PLLs
add = 0x68
pll = [Si534x(dev, bus, add) for bus in devices.keys()]
print
# Set reset for transceivers
print "===== Setting GBT reset"
fpga = Arria10(0)
fpga.init_reset_gbt()
print
time.sleep(5)
for i in devices.keys(): # programs the 3 PLLs
print "===== Programming PLL ", devices[i], "====="
pll[i - 1].program_with_file(files[i], devices[i]) # i-1 because list index starts with 0
print "..... wait to stabilize"
time.sleep(7)
for input in range(0, 4):
pll[i-1].enable_los(input)
pll[i-1].enable_oof(input)
for j in range(0,4):
status, loss_of_signal = pll[i - 1].read_loss_of_signal(j)
print "..... Input ", j," :",
if loss_of_signal == True:
print "Loss of signal, ",
else:
print "Input clock present, ",
status, oof = pll[i - 1].read_out_of_frequency(j)
if oof == True:
print "Out of frequency"
else:
print "Nominal frequency", "(", expected_frequency[i][j],")"
print
status, val = pll[i-1].read_run_mode()
print "..... PLL mode =", val
status, val = pll[i - 1].read_loss_of_lock() # i-1 because list index starts with 0
print ".....",devices[i],
if val == True:
print "Loss of lock"
else:
print "Locked"
print
# Measure clocks
for key, value in sorted(freq.iteritems()): # scan frequencies
print "===== Measuring frequencies generated by device ", key, "====="
for port in value.keys():
status, frequency_read = fpga.read_pll_port_frequency(key, port)
print " Port ", port, " : ", frequency_read, "(", value[port], ")"
# Calibrate all fPLLs
print "===== Calibrating fPLLs ====="
trans = xcvr(dev)
trans.calibrate_pll_all()
print "..... fPLL calibrations done"
print
# Calibrate all PHYs
print "===== Calibrating PHYs ====="
trans.calibrate_phy_all()
print "..... PHY calibrations done"
print
# Clear reset for transceivers
print "===== Clearing GBT reset"
fpga.clear_reset_gbt()
print
if __name__ == "__main__":
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment