Hallo Community,
ich versuche gerade RMII in VHDL umzusetzen (GHDL und Gtkwave).
Dabei bin ich gerade über etwas gestolpert, bei dem ich aufgrund meiner
noch fehlenden Expertise gar nicht weiß ob das überhaupt möglich ist.
Also ich möchte aus dem RMII Signal CRS_DV (Rev 1.2) das Signal RX_DV
extrahieren (wie im Bild).
Eine Lösung wäre erst nach der letzten fallenden Flanke von CRS_DV (Rev
1.2) die nächste fallende Flanke von REF_CLK abzuwarten und dann dort
auszuwerten ob
1 | if falling_edge(REF_CLK) then
|
2 | if (CRS = '0') AND (CRS_DV = '0') AND (DIBIT = das richtige) then
|
3 | RX_DV <= '0';
|
4 | end if;
|
5 | end if;
|
Damit wäre aber RX_DV synchron zur fallenden Flanke von REF_CLK und
damit einen halben Takt zu spät.
Damit ich nun RX_DV wirklich synchron zur steigenden Flanke von REF_CLK
setzen kann (wie im Bild), müsste ich zeitgleich bei der steigenden
Flanke von REF_CLK prüfen ob CRS_DV gerade auch eine steigende Flanke
hat.
Ist das möglich? Oder gibt es eine andere Lösung?
PS: RMII Spezifikation habe ich voll verstanden nur alle Möglichkeiten
von VHDL sind mir noch unklar :-)
PS2: Aus den RXD Daten oder der Anzahl der Bits kann man keine
Rückschlüsse
ziehen, es könnten auch noch viele weitere Flanken beim CRS_DV folgen.
Vielen Dank im Voraus.