Close
0%
0%

YGMII

YG's Media Independent Interface, in case your miniMAC is on a different chip than your miniPHY

Public Chat
Similar projects worth following
0 followers
I couldnt find a MII standard that suits my needs for connecting my miniMAC to my miniPHY so I design one.
Source-clocked, 7 wires per direction: it's roughly the same footprint as the IEEE RGMII with a few new tricks.

Well I'm only developing a compact, asynchronous link here. You can use it as you like for other purposes.

Data transmission gets hard as you increase the bandwidth and not everything can be done with, or solved by, serial differential pairs. A dozen single-ended wires would do in many cases but the physics and protocols add even more constraints.

Then I wrote these logs: 
https://hackaday.io/project/203186-miniphy/log/246904-ygmii-draft 
https://hackaday.io/project/203186-miniphy/log/246914-ygmii-7

And this subject might become more important and get a life on its own so it's another spin-off.

The YGMII does more or less what RGMII does, with a few differences:

  • The datum granularity is 16 bits+framing+parity (18 bits per transaction)
  • Configuration info is embedded in the data stream, not using a separate cumbersome 2-wire interface that would be I³C if it bothered. A whole side-channel is implemented
  • Two transition minimisation methods are applied, using more wires but reducing the EMI.

Here is how I consider the pipeline so far:

  • The #miniMAC - Not an Ethernet Transceiver  expands a 16-bit word into a framed 18-bit word
  • The 18-bit word is cut in 2 halves that get independently popcounted and inverted: it's "TMPI" (Transition-Minimised Parallel Interface) or "Bus Inversion" (in DDR4/DDR5 terminology)
  • Both 10-bit results are multiplexed into a 5-bit channel with NRZ/NRZI over 4 cycles
  • The 4 cycles are clocked by 2 clock signals in quadrature. The phase (0-180°) transmits one additional bit per transaction, signalling the type of transaction (data or control/config)
  • The clock signals can also work in other ways, opening the door to a sophisticated state machine. For example, a certain "aborted" clock sequence can reset the link and clear the NRZ/I register. Other patterns can trigger other behaviours.

So here you have the 7 wires. Normally you want two channels, one per direction, for a total of 14 wires. And you can create your own protocol over this.

This interface is not limited to networking and could be reused for other types of inter-chip communication, passing messages from IC to IC on a PCB, because there is inherent support for a control channel and relaxed clocking requirements.

  • Clocking

    Yann Guidon / YGDES3 hours ago 0 comments

    The interface uses 2 clock signals: this provides a reasonable EMI reduction and it also extend the protocol.

    The 2 clock wires are required to encode the 4 edges of a full transaction in normal/usual mode. The signals follows the traditional Gray counting sequence:

    00
    01
    11
    10

    and the whole transaction is ended when both signals are back to 0.

    Swapping the sigals corresponds to counting in reverse:

    00
    10
    11
    01

    This signals that the transaction contains a control or status word.

    There is a rule that only one wire can change at a time and each front updates the state of a sort of FSM.

    Naming the clock signals A and B, we get a sequence of these letters and the sequence ends when the number of As and Bs are both even.

    Thus we get these 4 basic sequences:

    AA : reset AC register  (set to current value ?)
    BB : Update link status (9 bits?) 
    ABAB : Data transaction (18 bits)
    BABA : Control transaction

    Another way to visualise is with a binary decision tree: 

    You get the idea: the protocol is extensible and we start with a few good cases that are easy to use without too much complexity.

View project log

Enjoy this project?

Share

Discussions

Does this project spark your interest?

Become a member to follow this project and never miss any updates