blob: b3520703ffba00cdbda3dd0a6012ba535ca6c03a [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
'''Test the implementation of OTBNState.'''
import py
from sim.constants import ErrBits, Status
from testutil import prepare_sim_for_asm_str
def test_ext_regs_success(tmpdir: py.path.local) -> None:
'''Check the contents of the external registers after a successful run.'''
simple_asm = """
nop
ecall
"""
sim = prepare_sim_for_asm_str(simple_asm, tmpdir, False)
sim.run(verbose=False, dump_file=None)
assert sim.state.ext_regs.read('ERR_BITS', False) == 0
assert sim.state.ext_regs.read('FATAL_ALERT_CAUSE', False) == 0
# The CMD register is write-only from software.
assert sim.state.ext_regs.read('CMD', from_hw=True) == 0
# Only INTR_STATE.done is set
assert sim.state.ext_regs.read('INTR_STATE', False) == (1 << 0)
# STATUS must be IDLE
assert sim.state.ext_regs.read('STATUS', False) == Status.IDLE
def test_ext_regs_err_bits_bad(tmpdir: py.path.local) -> None:
'''Test an invalid instruction is reflected in ERR_BITS.'''
invalid_jump_asm = """
jal x0, 10
ecall
"""
sim = prepare_sim_for_asm_str(invalid_jump_asm, tmpdir, False)
sim.run(verbose=False, dump_file=None)
assert sim.state.ext_regs.read('ERR_BITS', False) == ErrBits.BAD_INSN_ADDR
assert sim.state.ext_regs.read('FATAL_ALERT_CAUSE', False) == 0