HOME       UP       PREV       NEXT (RPC (Remote-Procedure Call) Interface Between Compilations)  

Hard Pause Mode: Complete Clock Cycle Control

Some code interacts with net-level interfaces and precise clock-cycle prescription is needed.

     // This method describes the operations required to rx an Ethernet frame from the PHY/MAC.
        static public int ReceivePacket()
        {
            rx_dst_rdy_n = !true;
            Kiwi.Pause();
            bool start = !rx_sof_n && !rx_src_rdy_n; // The start condition
            int i;
            bool doneReading;

            if (true) // Process one packet
            {
                // Wait for SOF and SRC_RDY
                while (!start)
                {
                    Kiwi.Pause(); // Wait for a clock tick
                    start = !rx_sof_n && !rx_src_rdy_n; // Check for start of frame
                }

                // Read in the entire frame
                i = 0;
                doneReading = false;

                // Read the remaining bytes
                while (!doneReading)
                {
                    if (!rx_src_rdy_n)
                    {
                        rx_buffer[i] = rx_data;
                        Console.WriteLine("EtherLink RX byte {0} {1}", i, rx_data);
                        i++;
                    }
                    doneReading = !rx_eof_n;
                    Kiwi.Pause();
                }

            }
          rx_dst_rdy_n = !false; // No longer ready to receive.
          start = false; // No longer at start of frame
          return i;
       }

5: (C) 2011, DJ Greaves, S Singh, University of Cambridge, Computer Laboratory.