From 05c39311eb985512bb40c9272267c56c41a8cb07 Mon Sep 17 00:00:00 2001 From: Patrick Robbe <robbe@lal.in2p3.fr> Date: Fri, 25 Jan 2019 23:23:34 +0100 Subject: [PATCH] ignore file --- .gitignore | 2 + Scripts/config_PLLs.py | 177 +++++++++++++++++++++++++++++++++++++++ Scripts/config_PLLs.py~ | 178 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 357 insertions(+) create mode 100644 .gitignore create mode 100755 Scripts/config_PLLs.py create mode 100755 Scripts/config_PLLs.py~ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5236e1e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*~ + diff --git a/Scripts/config_PLLs.py b/Scripts/config_PLLs.py new file mode 100755 index 0000000..ed1e87c --- /dev/null +++ b/Scripts/config_PLLs.py @@ -0,0 +1,177 @@ +""" + 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("../devices_lli/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() diff --git a/Scripts/config_PLLs.py~ b/Scripts/config_PLLs.py~ new file mode 100755 index 0000000..b493cd1 --- /dev/null +++ b/Scripts/config_PLLs.py~ @@ -0,0 +1,178 @@ +# -*- coding: utf8 -*- +""" + 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("../devices_lli/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() -- GitLab