ariths-gen-mig/wire_components.py

49 lines
1.5 KiB
Python

# KOMPONENTY PROPOJU
class wire():
def __init__(self, name: str, value: int = 0, index: int = 0):
self.name = name
self.value = value
self.index = index
def get_declaration_c(self):
return f" uint8_t {self.name} = 0;\n"
def get_wire_value_c(self, offset: int = 0):
return f"(({self.name} >> {offset}) & 0x01)"
def return_wire_value_c(self, offset: int = 0):
return f"({self.name} & 0x01) << {offset}"
class bus():
# Inicializace sbernice
def __init__(self, prefix: str = "bus", N: int = 1):
self.bus = [wire(name=prefix, index=i) for i in range(N)]
self.prefix = prefix
self.N = N
def __index__(self, wire):
return self.bus.index(wire)
# Pripojeni vystupniho vodice vnitrni komponenty na vstup jine komponenty
# (nebo drat vystupni sbernice obvodu)
def connect(self, out_wire_index: int, inner_component_out_wire: wire):
self.bus[out_wire_index] = inner_component_out_wire
def get_wire_value_c(self, offset: int = 0):
self.bus[offset].get_wire_value_c(offset)
def return_wire_value_c(self, offset: int = 0):
self.bus[offset].return_wire_value_c(offset)
def get_declaration_c(self):
if self.N > 8:
return f" uint64_t {self.prefix} = 0;\n"
else:
return f" uint8_t {self.prefix} = 0;\n"
def get_wire(self, wire_index: int):
return self.bus[wire_index]