1 from nmigen
import Module
, Elaboratable
, Signal
4 from enum
import Enum
, unique
14 class InternalOp(Enum
):
65 file_dir
= os
.path
.dirname(os
.path
.realpath(__file__
))
66 with
open(os
.path
.join(file_dir
, name
)) as csvfile
:
67 reader
= csv
.DictReader(csvfile
)
71 major_opcodes
= get_csv("major.csv")
74 class PowerMajorDecoder(Elaboratable
):
76 self
.opcode_in
= Signal(6, reset_less
=True)
78 self
.function_unit
= Signal(Function
, reset_less
=True)
79 self
.internal_op
= Signal(InternalOp
, reset_less
=True)
80 self
.in1_sel
= Signal(In1Sel
, reset_less
=True)
81 self
.in2_sel
= Signal(In2Sel
, reset_less
=True)
82 self
.in3_sel
= Signal(In3Sel
, reset_less
=True)
83 self
.out_sel
= Signal(OutSel
, reset_less
=True)
85 def elaborate(self
, platform
):
89 with m
.Switch(self
.opcode_in
):
90 for row
in major_opcodes
:
91 opcode
= int(row
['opcode'])
93 comb
+= self
.function_unit
.eq(Function
[row
['unit']])
94 comb
+= self
.internal_op
.eq(InternalOp
[row
['internal op']])
95 comb
+= self
.in1_sel
.eq(In1Sel
[row
['in1']])
96 comb
+= self
.in2_sel
.eq(In2Sel
[row
['in2']])
97 comb
+= self
.in3_sel
.eq(In3Sel
[row
['in3']])
98 comb
+= self
.out_sel
.eq(OutSel
[row
['out']])
102 return [self
.opcode_in
,