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 12:56:14 -07:00
parent 7136dddd0a
commit dcb9a6bd02

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()