migen icon indicating copy to clipboard operation
migen copied to clipboard

migen/fhdl/tracer.py: update get_var_name() from amaranth

Open maribu opened this issue 1 year ago • 0 comments

This fixes exceptions when running the litedram tests. See below for the log of one of the test failures this fixes. The other test failures are pretty much identical.

______________________________________________________________________________________________________ TestSimSerializers.test_sim_serializer_16_phase90 ______________________________________________________________________________________________________

self = <test.test_phy_utils.TestSimSerializers testMethod=test_sim_serializer_16_phase90>

    def test(self):
        new = default.copy()
        new.update(kwargs)
>       self.serializer_test(**new)

test/test_phy_utils.py:106:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test/test_phy_utils.py:54: in serializer_test
    dut = Serializer(clk=clk, clkdiv=clkdiv, i_dw=data_width, o_dw=1)
litedram/phy/utils.py:240: in __init__
    if i is None: i = Signal(i_dw)
/usr/lib/python3.11/site-packages/migen/fhdl/structure.py:395: in __init__
    self.backtrace = _tracer.trace_back(name)
/usr/lib/python3.11/site-packages/migen/fhdl/tracer.py:111: in trace_back
    varname = get_var_name(frame)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

frame = <frame at 0x7f1d84062b90, file '/home/maribu/Repos/software/aports/testing/py3-litex/src/litedram-2023.12/litedram/phy/utils.py', line 240, code __init__>

    def get_var_name(frame):
        code = frame.f_code
        call_index = frame.f_lasti
        while call_index > 0 and opname[code.co_code[call_index]] == "CACHE":
            call_index -= 2
        while True:
            call_opc = opname[code.co_code[call_index]]
            if call_opc in("EXTENDED_ARG",):
                call_index += 2
            else:
                break
        if call_opc not in _call_opcodes:
            return None
        index = call_index+_call_opcodes[call_opc]
        while True:
            opc = opname[code.co_code[index]]
            if opc == "STORE_NAME" or opc == "STORE_ATTR":
                name_index = int(code.co_code[index+1])
                return code.co_names[name_index]
            elif opc == "STORE_FAST":
                name_index = int(code.co_code[index+1])
                return code.co_varnames[name_index]
            elif opc == "STORE_DEREF":
                name_index = int(code.co_code[index+1])
                if version_info >= (3, 11):
                    name_index -= code.co_nlocals
>               return code.co_cellvars[name_index]
E               IndexError: tuple index out of range

/usr/lib/python3.11/site-packages/migen/fhdl/tracer.py:64: IndexError

maribu avatar Jan 11 '24 09:01 maribu