IP Library › Granted Patent US 11,139,904
Granted Patent B2
US 11,139,904 · App. 16/652,473 · Granted Oct 5, 2021

Clock domain crossing buffer

Inventor: Thomas Dejanovic (Sydney, AU)
Assignee: Arista Networks, Inc.
H04J3/0679G06F5/06H04J3/0638H04J3/0682H04J3/14
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,139,904
App. No.
16/652,473
Granted
Oct 5, 2021
Kind
B2
Abstract

Methods and systems for performing clock domain crossing. The method may include receiving a start signal from an ingress domain delay device at a first egress domain delay device. The start signal may be received at a first rising edge of an egress domain clock cycle. The method may also include receiving, from the first egress domain delay device at a start receive device, the start signal at a second rising edge of the egress domain clock cycle. The second rising edge may be N egress domain clock cycles after the first rising edge. The method may also include incrementing, in response to receipt of the start signal by the start receive device, a buffer read pointer of the buffer by at least N buffer addresses, and reading, after incrementing the buffer read pointer, a second data unit from the buffer at a location indicated by the buffer read pointer.

Claims (62)

1. A method for performing clock domain crossing, the method comprising:

receiving a start signal from an ingress domain delay device corresponding to an ingress clock domain at a first egress domain delay device corresponding to an egress clock domain,

wherein the start signal is received at a first rising edge of an egress domain clock cycle, and

wherein the start signal is generated in the ingress clock domain at a rising edge of an ingress clock cycle when a first data unit is written into a buffer, the buffer couples the ingress clock domain and the egress clock domain, a write buffer pointer is incremented after the first data unit is written into the buffer, and the start signal is received by the ingress domain delay device at a next falling edge of the ingress clock cycle;

receiving, from the first egress domain delay device at a start receive device, the start signal at a second rising edge of the egress domain clock cycle, wherein the second rising edge of the egress domain clock cycle is N egress domain clock cycles after the first rising edge, and “N” represents a number of the egress domain clock cycles by which the start signal is delayed;

incrementing, in response to receipt of the start signal by the start receive device, a buffer read pointer of the buffer by at least N buffer addresses to reduce latency of the clock domain crossing; and

reading, after incrementing the buffer read pointer, a second data unit from the buffer at a location indicated by the buffer read pointer.

2. The method of claim 1 , further comprising:

receiving, from the ingress domain delay device at a second egress domain delay device, the start signal at a falling edge of the egress domain clock cycle;

receiving, from the second egress domain delay device at the start receive device, a late start signal at the second rising edge of the egress domain clock cycle; and

making a determination, by the start receive device, before incrementing the buffer read pointer, that both the start signal and the late start signal are asserted,

wherein, based on the determination, the buffer read pointer of the buffer is incremented by N+1 buffer units rather than by N buffer units thereby gaining an increased reduction in latency of transferring the data unit between the ingress clock domain and the egress clock domain.

3. The method of claim 2 , further comprising, before writing the first data unit into the buffer, sampling the ingress clock cycle and the egress domain clock cycle to determine that an ingress clock frequency of the ingress clock cycle is higher than an egress clock frequency of the egress domain clock cycle.

4. The method of claim 2 , further comprising:

before writing the first data unit into the buffer, sampling the ingress clock cycle and the egress domain clock cycle to make a second determination that an ingress clock frequency is lower than an egress clock frequency; and

adjusting, based on the second determination that the ingress clock frequency is lower than the egress clock frequency, the egress domain clock cycle such that the egress clock frequency is lower than the ingress clock frequency.

5. The method of claim 3 , further comprising:

receiving, at a depth monitor device of the egress clock domain, from a write alert device a first alert that a first write has occurred in the buffer and a second alert that a second write has occurred in the buffer;

incrementing a buffer depth counter by two in response to the first alert and the second alert;

making a second determination, using the buffer depth counter, that a depth of the buffer depth counter is greater than one;

making a third determination, based on the second determination, that an idle data unit has been read from the buffer by the egress clock domain; and

incrementing, in response to the third determination, the buffer read pointer by two buffer addresses.

6. The method of claim 5 , further comprising, before the third determination:

making a fourth determination, using the buffer depth counter, that a buffer depth has exceeded a buffer depth threshold; and

sending a request to the ingress clock domain to perform a buffer depth reduction action.

7. The method of claim 5 , wherein the first alert and the second alert are received as a first toggle signal and a second toggle signal.

8. The method of claim 1 , wherein, before writing the first data unit into the buffer, the buffer write pointer and the buffer read pointer are both initialized to an initial pointer buffer address.

9. The method of claim 1 , wherein the first data unit is a portion of a set of training data units.

10. The method of claim 1 , wherein the ingress clock domain comprises a first network device and the egress clock domain comprises a second network device.

11. A system for performing clock domain crossing, the system comprising:

a first egress domain delay device of an egress clock domain, comprising circuitry, operatively connected to an ingress domain delay device of an ingress clock domain, and configured to:

receive, from the ingress domain delay device, a start signal at a first rising edge of an egress domain clock cycle,

wherein the start signal is generated in an ingress clock domain at a rising edge of an ingress clock cycle when a first data unit is written into a buffer, the buffer couples the ingress clock domain and the egress clock domain, a write buffer pointer is incremented after the first data unit is written into the buffer, and the start signal is received by the ingress domain delay device at a next falling edge of the ingress clock cycle;

a start receive device comprising circuitry, operatively connected to the first egress domain delay device, and configured to:

receive the start signal at a second rising edge of the egress domain clock cycle, wherein the second rising edge of the egress domain clock cycle is N egress domain clock cycles after the first rising edge, and “N” represents a number of the egress domain clock cycles by which the start signal is delayed; and

increment, in response to receipt of the start signal by the start receive device, a buffer read pointer of the buffer by at least N buffer addresses; and

read, after incrementing the buffer read pointer, a second data unit from the buffer at a location indicated by the buffer read pointer.

12. The system of claim 11 , further comprising:

a second egress domain delay device comprising circuitry, operatively connected to an ingress domain delay device, and configured to:

receive, from the ingress domain delay device, the start signal at a falling edge of the egress domain clock cycle;

wherein the start receive device is further configured to:

receive, from the second egress domain delay device, a late start signal at the second rising edge of the egress domain clock cycle;

make a determination, before incrementing the buffer read pointer, that both the start signal and the late start signal are asserted; and

based on the determination, increment the buffer read pointer of the buffer by N+1 buffer units rather than by N buffer units thereby gaining an increased reduction in latency of transferring the data unit between the ingress clock domain and the egress clock domain.

13. The system of claim 12 , wherein the ingress clock domain, before writing the first data unit into the buffer, is configured to sample the ingress clock cycle and the egress domain clock cycle to determine that an ingress clock frequency of the ingress clock cycle is higher than an egress clock frequency of the egress domain clock cycle.

14. The system of claim 12 , wherein the egress clock domain is configured to:

before writing the first data unit into the buffer, sample the ingress clock cycle and the egress domain clock cycle to make a second determination that an ingress clock frequency is lower than an egress clock frequency; and

adjust, based on the second determination that the ingress clock frequency is lower than the egress clock frequency, the egress domain clock cycle such that the egress clock frequency is lower than the ingress clock frequency.

15. The system of claim 13 , further comprising:

a depth monitor device comprising circuitry, operatively connected to the ingress clock domain, and configured to:

receive, from a write alert device of the ingress clock domain, a first alert that a first write has occurred in the buffer and a second alert that a second write has occurred in the buffer;

increment a buffer depth counter by two in response to the first alert and the second alert;

make a second determination, using the buffer depth counter, that a buffer depth counter is greater than one;

make a third determination, based on the second determination, that an idle data unit has been read from the buffer by the egress clock domain; and

increment, in response to the third determination, the buffer read pointer by two buffer addresses.

16. The system of claim 15 , wherein, before the third determination, the depth monitor device is further configured to:

make a fourth determination, using the buffer depth counter, that a buffer depth has exceeded a buffer depth threshold; and

send a request to the ingress clock domain to perform a buffer depth reduction action.

17. The system of claim 15 , wherein the first alert and the second alert are received as a first toggle signal and a second toggle signal.

18. The system of claim 11 , wherein, before writing the first data unit into the buffer, the buffer write pointer and the buffer read pointer are both initialized to an initial pointer buffer address.

19. The system of claim 11 , wherein the first data unit is a portion of a set of training data units.

20. The system of claim 11 , wherein the ingress clock domain is a first network device and the egress clock domain is a second network device.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 27, 2020
From: METAMAKO GENERAL PTY LTD IN ITS CAPACITY AS GENERAL PARTNER OF METAMAKO TECHNOLOGY LIMITED PARTNERSHIP
To: ARISTA NETWORKS, INC.
Reel/Frame 052505/0158 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 2, 2020
From: DEJANOVIC, THOMAS
To: METAMAKO GENERAL PTY LTD IN ITS CAPACITY AS GENERAL PARTNER OF METAMAKO TECHNOLOGY LIMITED PARTNERSHIP
Reel/Frame 052301/0761 →
Priority Claims (1)
AU 2017904204 · Oct 17, 2017 · national
Continuity (1)
Related Publication 20200235836A1 · Jul 23, 2020
Cited By (1)
US 12,602,073