Source code for elasticai.creator.nn.fixed_point.mac.layer
from elasticai.creator.file_generation.savable import Savable
from elasticai.creator.nn.fixed_point.math_operations import MathOperations
from elasticai.creator.nn.fixed_point.number_converter import FXPParams
from elasticai.creator.nn.fixed_point.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.vhdl.simulated_layer import SimulatedLayer
from .design import MacDesign
from .mactestbench import MacTestBench
[docs]
class MacLayer:
def __init__(self, vector_width: int, fxp_params: FXPParams):
self.ops = MathOperations(
FixedPointConfig(
total_bits=fxp_params.total_bits, frac_bits=fxp_params.frac_bits
)
)
self._vector_width = vector_width
self._fxp_params = fxp_params
self.name = "fxp_mac"
[docs]
def __call__(self, a, b):
return self.ops.matmul(a, b)
[docs]
def create_design(self, name: str) -> Savable:
return MacDesign(
fxp_params=self._fxp_params, vector_width=self._vector_width, name=name
)
[docs]
def create_testbench(self, name: str) -> MacTestBench:
return MacTestBench(
fxp_params=self._fxp_params,
uut=self.create_design("mac_wrapper_test"),
uut_name="mac_wrapper_test",
name=name,
)
[docs]
def create_simulation(self, simulator, working_dir):
return SimulatedLayer(self, simulator, working_dir=working_dir)