Cache clock edge event objects

This commit is contained in:
Alex Forencich
2021-12-03 19:06:43 -08:00
parent 3325568406
commit 2af7852006
12 changed files with 68 additions and 41 deletions

View File

@@ -166,8 +166,11 @@ class RgmiiSource(Reset):
er = 0
en = 0
clock_rising_edge_event = RisingEdge(self.clock)
clock_falling_edge_event = FallingEdge(self.clock)
while True:
await RisingEdge(self.clock)
await clock_rising_edge_event
# send high nibble after rising edge, leading in to falling edge
self.data.value = d >> 4
@@ -232,11 +235,11 @@ class RgmiiSource(Reset):
self.active = False
self.idle_event.set()
await FallingEdge(self.clock)
await clock_falling_edge_event
# send low nibble after falling edge, leading in to rising edge
self.data.value = d & 0x0F
self.ctrl.value = en
# send low nibble after falling edge, leading in to rising edge
self.data.value = d & 0x0F
self.ctrl.value = en
class RgmiiSink(Reset):
@@ -339,21 +342,24 @@ class RgmiiSink(Reset):
dv_val = 0
er_val = 0
clock_rising_edge_event = RisingEdge(self.clock)
clock_falling_edge_event = FallingEdge(self.clock)
while True:
await RisingEdge(self.clock)
# capture low nibble on rising edge
d_val = self.data.value.integer
dv_val = self.ctrl.value.integer
await FallingEdge(self.clock)
# capture high nibble on falling edge
d_val |= self.data.value.integer << 4
er_val = dv_val ^ self.ctrl.value.integer
await clock_rising_edge_event
if self.enable is None or self.enable.value:
# capture low nibble on rising edge
d_val = self.data.value.integer
dv_val = self.ctrl.value.integer
await clock_falling_edge_event
# capture high nibble on falling edge
d_val |= self.data.value.integer << 4
er_val = dv_val ^ self.ctrl.value.integer
if frame is None:
if dv_val:
# start of frame