import os
from enum import Enum, unique
+@unique
class Function(Enum):
ALU = 0
LDST = 1
+@unique
+class InternalOp(Enum):
+ OP_ADD = 0
+ OP_AND = 1
+ OP_B = 2
+ OP_BC = 3
+ OP_CMP = 4
+ OP_LOAD = 5
+ OP_MUL_L64 = 6
+ OP_OR = 7
+ OP_RLC = 8
+ OP_STORE = 9
+ OP_TDI = 10
+ OP_XOR = 11
+
def get_csv(name):
file_dir = os.path.dirname(os.path.realpath(__file__))
with open(os.path.join(file_dir, name)) as csvfile:
self.opcode_in = Signal(6, reset_less=True)
self.function_unit = Signal(Function, reset_less=True)
+ self.internal_op = Signal(InternalOp, reset_less=True)
def elaborate(self, platform):
m = Module()
comb = m.d.comb
opcode = int(row['opcode'])
with m.Case(opcode):
comb += self.function_unit.eq(Function[row['unit']])
+ comb += self.internal_op.eq(InternalOp[row['internal op']])
return m
import sys
import unittest
sys.path.append("../")
-from decoder import PowerDecoder, Function, major_opcodes
+from decoder import PowerDecoder, Function, InternalOp, major_opcodes
class DecoderTestCase(FHDLTestCase):
def test_function_unit(self):
comb = m.d.comb
opcode = Signal(6)
function_unit = Signal(Function)
+ internal_op = Signal(InternalOp)
m.submodules.dut = dut = PowerDecoder()
comb += [dut.opcode_in.eq(opcode),
- function_unit.eq(dut.function_unit)]
+ function_unit.eq(dut.function_unit),
+ internal_op.eq(dut.internal_op)]
sim = Simulator(m)
def process():
result = yield function_unit
expected = Function[row['unit']].value
self.assertEqual(expected, result)
+
+ result = yield internal_op
+ expected = InternalOp[row['internal op']].value
+ self.assertEqual(expected, result)
sim.add_process(process)
- with sim.write_vcd("test.vcd", "test.gtkw", traces=[opcode, function_unit]):
+ with sim.write_vcd("test.vcd", "test.gtkw", traces=[opcode, function_unit, internal_op]):
sim.run()
def test_ilang(self):