migen
migen copied to clipboard
migen/fhdl/tracer.py: update get_var_name() from amaranth
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