From b0bc05ed80c029ced53d29a3181b4aaf0fefe185 Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Fri, 10 Jul 2020 21:22:52 +0200 Subject: [PATCH] Add banks --- fpga_device_manager/Banks.py | 43 +++++++++++++++++++++++++ fpga_device_manager/res/data/banks.json | 20 ++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 fpga_device_manager/Banks.py create mode 100644 fpga_device_manager/res/data/banks.json diff --git a/fpga_device_manager/Banks.py b/fpga_device_manager/Banks.py new file mode 100644 index 0000000..2a63526 --- /dev/null +++ b/fpga_device_manager/Banks.py @@ -0,0 +1,43 @@ +"""Module that manages FPGA banks.""" +import json +from typing import Optional, Tuple, Iterable, Generator, Iterator + +_banks = {} + +VOLTAGES = {1.2, 1.5, 1.8, 2.5, 3.3} + + +class FPGABank: + """Represents a bank on the FPGA.""" + def __init__(self, name, voltage=3.3): + self.name = name + self.voltage = voltage + + +def init(filename: str) -> None: + """ + Initializes the FPGA bank database by loading the bank configuration from the specified filename. The file must be + in JSON format and contains bank settings, indexed by the FPGA's bank names. + + :param filename: FPGA bank configuration file + """ + global _banks + _banks = {} + + try: + with open(filename, "r") as file: + bank_data = json.load(file) + + for bank, bank_args in bank_data.items(): + voltage = bank_args["voltage"] + if voltage in VOLTAGES: + _banks[bank] = FPGABank(name=bank, + voltage=voltage) + else: + raise Exception("invalid voltage") + + except OSError as e: + raise Exception("failed to load bank data file: %s" % e) + +def get_voltage(bank_id: int) -> float: + return _banks.get(str(bank_id), _banks["0"]).voltage diff --git a/fpga_device_manager/res/data/banks.json b/fpga_device_manager/res/data/banks.json new file mode 100644 index 0000000..e17e741 --- /dev/null +++ b/fpga_device_manager/res/data/banks.json @@ -0,0 +1,20 @@ +{ + "0": { + "voltage": 3.3 + }, + "1": { + "voltage": 2.5 + }, + "2": { + "voltage": 3.3 + }, + "3": { + "voltage": 2.5 + }, + "4": { + "voltage": 3.3 + }, + "5": { + "voltage": 3.3 + } +} \ No newline at end of file -- GitLab