Rework reset logic to better handle X/Z

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2025-09-07 13:21:40 -07:00
parent 7077200912
commit 71be7f50d5

View File

@@ -23,7 +23,7 @@ THE SOFTWARE.
"""
import cocotb
from cocotb.triggers import RisingEdge, FallingEdge
from cocotb.triggers import Edge
class Reset:
@@ -56,11 +56,14 @@ class Reset:
async def _run_reset(self, reset_signal, active_level):
while True:
if bool(reset_signal.value):
await FallingEdge(reset_signal)
self._ext_reset = not active_level
self._update_reset()
else:
await RisingEdge(reset_signal)
await Edge(reset_signal)
try:
level = bool(int(reset_signal.value))
except ValueError:
continue
if level:
self._ext_reset = active_level
self._update_reset()
else:
self._ext_reset = not active_level
self._update_reset()