Skip to content

Commit 769e468

Browse files
committed
Handle dynamic decoder managers
1 parent 810ad01 commit 769e468

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

coreblocks/func_blocks/fu/alu.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dataclasses import dataclass, KW_ONLY
1+
from dataclasses import dataclass, KW_ONLY, field
22
from typing import Sequence
33
from amaranth import *
44

@@ -284,7 +284,10 @@ class ALUComponent(FunctionalComponentParams):
284284
zba_enable: bool = False
285285
zbb_enable: bool = False
286286
zicond_enable: bool = False
287-
decoder_manager: AluFn = AluFn(zba_enable=zba_enable, zbb_enable=zbb_enable, zicond_enable=zicond_enable)
287+
decoder_manager: AluFn = field(init=False)
288+
289+
def get_decoder_manager(self):
290+
return AluFn(zba_enable=self.zba_enable, zbb_enable=self.zbb_enable, zicond_enable=self.zicond_enable)
288291

289292
def get_module(self, gen_params: GenParams) -> FuncUnit:
290293
return AluFuncUnit(gen_params, self.decoder_manager)

coreblocks/func_blocks/fu/lsu/dummyLsu.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,5 +161,8 @@ def get_module(self, gen_params: GenParams) -> FuncUnit:
161161
unit = LSUDummy(gen_params, bus_master)
162162
return unit
163163

164+
def get_decoder_manager(self):
165+
pass # LSU component currently doesn't have a decoder manager
166+
164167
def get_optypes(self) -> set[OpType]:
165168
return {OpType.LOAD, OpType.STORE, OpType.FENCE}

coreblocks/func_blocks/fu/shift_unit.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dataclasses import dataclass, KW_ONLY
1+
from dataclasses import dataclass, KW_ONLY, field
22
from typing import Sequence
33
from amaranth import *
44

@@ -114,7 +114,10 @@ def _(arg):
114114
class ShiftUnitComponent(FunctionalComponentParams):
115115
_: KW_ONLY
116116
zbb_enable: bool = False
117-
decoder_manager: ShiftUnitFn = ShiftUnitFn(zbb_enable=zbb_enable)
117+
decoder_manager: ShiftUnitFn = field(init=False)
118+
119+
def get_decoder_manager(self):
120+
return ShiftUnitFn(zbb_enable=self.zbb_enable)
118121

119122
def get_module(self, gen_params: GenParams) -> FuncUnit:
120123
return ShiftFuncUnit(gen_params, self.decoder_manager)

coreblocks/params/fu_params.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,17 @@ class FunctionalComponentParams(ABC):
4141
_: KW_ONLY
4242
decoder_manager: "DecoderManager" = field(init=False)
4343

44+
def __post_init__(self):
45+
if not hasattr(self, "decoder_manager"):
46+
object.__setattr__(self, "decoder_manager", self.get_decoder_manager())
47+
4448
@abstractmethod
4549
def get_module(self, gen_params: "GenParams") -> FuncUnit:
4650
raise NotImplementedError()
4751

52+
def get_decoder_manager(self) -> "DecoderManager":
53+
raise NotImplementedError()
54+
4855
def get_optypes(self) -> set["OpType"]:
4956
return self.decoder_manager.get_op_types()
5057

0 commit comments

Comments
 (0)