Add mii_mode attribute to GMII and RGMII models

This commit is contained in:
Alex Forencich
2020-12-24 14:35:16 -08:00
parent e7a3850dd2
commit a8a1bbde30
2 changed files with 23 additions and 5 deletions

View File

@@ -137,6 +137,7 @@ class GmiiSource(object):
self.queue = deque() self.queue = deque()
self.ifg = 12 self.ifg = 12
self.mii_mode = False
self.queue_occupancy_bytes = 0 self.queue_occupancy_bytes = 0
self.queue_occupancy_frames = 0 self.queue_occupancy_frames = 0
@@ -209,7 +210,10 @@ class GmiiSource(object):
self.log.info("TX frame: %s", frame) self.log.info("TX frame: %s", frame)
frame.normalize() frame.normalize()
if self.mii_select is not None and self.mii_select.value: if self.mii_select is not None:
self.mii_mode = bool(self.mii_select.value.integer)
if self.mii_mode:
mii_data = [] mii_data = []
mii_error = [] mii_error = []
for b, e in zip(frame.data, frame.error): for b, e in zip(frame.data, frame.error):
@@ -262,6 +266,8 @@ class GmiiSink(object):
self.queue = deque() self.queue = deque()
self.sync = Event() self.sync = Event()
self.mii_mode = False
self.queue_occupancy_bytes = 0 self.queue_occupancy_bytes = 0
self.queue_occupancy_frames = 0 self.queue_occupancy_frames = 0
@@ -336,7 +342,10 @@ class GmiiSink(object):
if not dv_val: if not dv_val:
# end of frame # end of frame
if self.mii_select is not None and self.mii_select.value: if self.mii_select is not None:
self.mii_mode = bool(self.mii_select.value.integer)
if self.mii_mode:
odd = True odd = True
sync = False sync = False
b = 0 b = 0

View File

@@ -56,6 +56,7 @@ class RgmiiSource(object):
self.queue = deque() self.queue = deque()
self.ifg = 12 self.ifg = 12
self.mii_mode = False
self.queue_occupancy_bytes = 0 self.queue_occupancy_bytes = 0
self.queue_occupancy_frames = 0 self.queue_occupancy_frames = 0
@@ -113,7 +114,7 @@ class RgmiiSource(object):
self.ctrl <= 0 self.ctrl <= 0
continue continue
if self.mii_select is None or not self.mii_select.value: if not self.mii_mode:
# send high nibble after rising edge, leading in to falling edge # send high nibble after rising edge, leading in to falling edge
self.data <= d >> 4 self.data <= d >> 4
self.ctrl <= en ^ er self.ctrl <= en ^ er
@@ -131,7 +132,10 @@ class RgmiiSource(object):
self.log.info("TX frame: %s", frame) self.log.info("TX frame: %s", frame)
frame.normalize() frame.normalize()
if self.mii_select is not None and self.mii_select.value: if self.mii_select is not None:
self.mii_mode = bool(self.mii_select.value.integer)
if self.mii_mode:
mii_data = [] mii_data = []
mii_error = [] mii_error = []
for b, e in zip(frame.data, frame.error): for b, e in zip(frame.data, frame.error):
@@ -187,6 +191,8 @@ class RgmiiSink(object):
self.queue = deque() self.queue = deque()
self.sync = Event() self.sync = Event()
self.mii_mode = False
self.queue_occupancy_bytes = 0 self.queue_occupancy_bytes = 0
self.queue_occupancy_frames = 0 self.queue_occupancy_frames = 0
@@ -268,7 +274,10 @@ class RgmiiSink(object):
if not dv_val: if not dv_val:
# end of frame # end of frame
if self.mii_select is not None and self.mii_select.value: if self.mii_select is not None:
self.mii_mode = bool(self.mii_select.value.integer)
if self.mii_mode:
odd = True odd = True
sync = False sync = False
b = 0 b = 0