-
-
-def op_sim(dut, a, b, op, inv_a=0, imm=0, imm_ok=0, zero_a=0):
- yield dut.issue_i.eq(0)
- yield
- yield dut.src_i[0].eq(a)
- yield dut.src_i[1].eq(b)
- yield dut.oper_i.insn_type.eq(op)
- yield dut.oper_i.invert_a.eq(inv_a)
- yield dut.oper_i.imm_data.imm.eq(imm)
- yield dut.oper_i.imm_data.imm_ok.eq(imm_ok)
- yield dut.oper_i.zero_a.eq(zero_a)
- yield dut.issue_i.eq(1)
- yield
- yield dut.issue_i.eq(0)
- yield
- yield dut.rd.go.eq(0b11)
- while True:
- yield
- rd_rel_o = yield dut.rd.rel
- print ("rd_rel", rd_rel_o)
- if rd_rel_o:
- break
- yield
- yield dut.rd.go.eq(0)
- req_rel_o = yield dut.wr.rel
- result = yield dut.data_o
- print ("req_rel", req_rel_o, result)
- while True:
- req_rel_o = yield dut.wr.rel
- result = yield dut.data_o
- print ("req_rel", req_rel_o, result)
- if req_rel_o:
- break
- yield
- yield dut.wr.go[0].eq(1)
- yield
- result = yield dut.data_o
- print ("result", result)
- yield dut.wr.go[0].eq(0)
- yield
- return result
-
-
-def scoreboard_sim(dut):
- result = yield from op_sim(dut, 5, 2, InternalOp.OP_ADD, inv_a=0,
- imm=8, imm_ok=1)
- assert result == 13
-
- result = yield from op_sim(dut, 5, 2, InternalOp.OP_ADD)
- assert result == 7
-
- result = yield from op_sim(dut, 5, 2, InternalOp.OP_ADD, inv_a=1)
- assert result == 65532
-
- result = yield from op_sim(dut, 5, 2, InternalOp.OP_ADD, zero_a=1,
- imm=8, imm_ok=1)
- assert result == 8
-
- result = yield from op_sim(dut, 5, 2, InternalOp.OP_ADD, zero_a=1)
- assert result == 2
-
-
-def test_compunit():
- from alu_hier import ALU
- from soc.fu.alu.alu_input_record import CompALUOpSubset
-
- m = Module()
- alu = ALU(16)
- dut = MultiCompUnit(16, alu, CompALUOpSubset)
- m.submodules.cu = dut
-
- vl = rtlil.convert(dut, ports=dut.ports())
- with open("test_compunit1.il", "w") as f:
- f.write(vl)
-
- run_simulation(m, scoreboard_sim(dut), vcd_name='test_compunit1.vcd')
-
-
-def test_compunit_regspec1():
- from alu_hier import ALU
- from soc.fu.alu.alu_input_record import CompALUOpSubset
-
- inspec = [('INT', 'a', '0:15'),
- ('INT', 'b', '0:15')]
- outspec = [('INT', 'o', '0:15'),
- ]
-
- regspec = (inspec, outspec)
-
- m = Module()
- alu = ALU(16)
- dut = MultiCompUnit(regspec, alu, CompALUOpSubset)
- m.submodules.cu = dut
-
- vl = rtlil.convert(dut, ports=dut.ports())
- with open("test_compunit_regspec1.il", "w") as f:
- f.write(vl)
-
- run_simulation(m, scoreboard_sim(dut), vcd_name='test_compunit1.vcd')
-
-
-if __name__ == '__main__':
- test_compunit()
- test_compunit_regspec1()