2 from nmigen
import (Module
, Signal
, Cat
, Repl
, Mux
, Const
, Array
)
3 from nmutil
.pipemodbase
import PipeModBase
4 from nmutil
.clz
import CLZ
5 from soc
.fu
.trap
.pipe_data
import TrapInputData
, TrapOutputData
6 from soc
.decoder
.power_enums
import InternalOp
8 from soc
.decoder
.power_fields
import DecodeFields
9 from soc
.decoder
.power_fieldsn
import SignalBitRange
12 def array_of(count
, bitwidth
):
14 for i
in range(count
):
15 res
.append(Signal(bitwidth
, reset_less
=True))
19 class LogicalMainStage(PipeModBase
):
20 def __init__(self
, pspec
):
21 super().__init
__(pspec
, "main")
22 self
.fields
= DecodeFields(SignalBitRange
, [self
.i
.ctx
.op
.insn
])
23 self
.fields
.create_specs()
26 return TrapInputData(self
.pspec
)
29 return TrapOutputData(self
.pspec
)
31 def elaborate(self
, platform
):
34 op
, a
, b
= self
.i
.ctx
.op
, self
.i
.a
, self
.i
.b
37 comb
+= self
.o
.ctx
.eq(self
.i
.ctx
)