IP Library › Granted Patent US 12,411,780
Granted Patent B2
US 12,411,780 · App. 18/191,353 · Granted Sep 9, 2025

Variable buffer size descriptor fetching for a multi-queue direct memory access system

Inventors: Chandrasekhar S. Thyamagondlu (Saratoga, CA); Tao Yu (Campbell, CA); Chiranjeevi Sirandas (Sunnyvale, CA); Nicholas Trank (San Francisco, CA)
Assignee: Xilinx, Inc.
G06F13/1673G06F9/30047G06F13/1626
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 12,411,780
App. No.
18/191,353
Granted
Sep 9, 2025
Kind
B2
Abstract

Descriptor fetch for a direct memory access system includes, in response to receiving a first data packet, fetching a plurality of descriptors including a first descriptor and a specified number of prefetched descriptors. The plurality of descriptors specify different buffer sizes. In response to processing each data packet, selectively replenishing the plurality of fetched descriptors to the specified number of prefetched descriptors.

Claims (67)

1. A method of descriptor fetch for a direct memory access system, the method comprising:

in response to receiving a data packet, fetching a plurality of descriptors including a first descriptor and a specified number of prefetched descriptors;

wherein the plurality of descriptors specify different buffer sizes;

calculating an accumulated byte length for the different buffer sizes specified by the plurality of descriptors; and

in response to detecting that the accumulated byte length is greater than or equal to a size of the data packet, processing the data packet and replenishing the plurality of descriptors to the specified number of prefetched descriptors.

2. The method of claim 1 , further comprising:

in response to receiving subsequent data packets, fetching one descriptor per subsequent data packet.

3. The method of claim 2 , wherein the fetching one descriptor per subsequent data packet is performed in response to receiving each individual data packet.

4. The method of claim 1 , wherein the specified number of prefetched descriptors is programmable.

5. The method of claim 1 , wherein the specified number of prefetched descriptors is maintained during operation of the direct memory access system.

6. The method of claim 1 , wherein the replenishing the plurality of descriptors comprises:

in response to processing each data packet:

determining a number of the prefetched descriptors consumed in processing the data packet; and

prefetching a number of additional prefetched descriptors corresponding to the number of prefetched descriptors consumed in processing the data packet.

7. The method of claim 1 , further comprising:

dynamically switching between a variable size buffer descriptor mode and a low latency mode during operation.

8. The method of claim 7 , further comprising:

for each received descriptor:

comparing a length of a buffer specified by the descriptor with a threshold length; and

in response to determining that the length of the buffer is greater than or equal to the threshold length, adding the descriptor to a queue corresponding to the descriptor and enabling a low latency mode for the queue.

9. The method of claim 8 , further comprising:

dequeuing a descriptor from a selected queue;

determining a length of a buffer specified by the descriptor;

comparing the length of the buffer to the threshold length;

determining whether the low latency mode is enabled for the selected queue; and

in response to determining that the length of the buffer is greater than or equal to the threshold length and that the low latency mode is enabled for the selected queue, processing a data packet using the descriptor in the low latency mode.

10. The method of claim 8 , further comprising:

dequeuing a descriptor from a selected queue;

determining a length of a buffer specified by the descriptor;

comparing the length of the buffer to the threshold length;

determining whether the low latency mode is enabled for the selected queue; and

in response to determining that the length of the buffer is less than the threshold length or that the low latency mode is not enabled for the selected queue, processing a data packet using the variable size buffer descriptor mode.

11. A direct memory access system having a multi-queue stream circuit, the multi-queue stream circuit comprising:

a descriptor prefetch circuit configured to receive descriptor request events for a data packet, wherein the descriptor prefetch circuit includes:

a prefetch credit circuit configured to receive the descriptor request events and issue credit to a fetch circuit for a plurality of descriptors including a first descriptor and a specified number of prefetched descriptors; and

a prefetch cache configured to receive the plurality of descriptors, wherein the plurality of descriptors specify different buffer sizes;

wherein the prefetch cache is configured to calculate an accumulated byte length for the different buffer sizes specified by the plurality of descriptors; and

wherein the prefetch cache, in response to detecting that the accumulated byte length is greater than or equal to a size of the data packet, is configured to process the data packet and replenish the plurality of descriptors to the specified number of prefetched descriptors.

12. The direct memory access system of claim 11 , wherein, in response to receiving subsequent data packets, the prefetch credit circuit is configured to issue credit to the fetch circuit to fetch one descriptor per subsequent data packet.

13. The direct memory access system of claim 12 , wherein the fetching one descriptor per subsequent data packet is initiated by the prefetch credit circuit in response to receiving each individual data packet.

14. The direct memory access system of claim 11 , wherein the specified number of prefetched descriptors is programmable.

15. The direct memory access system of claim 11 , wherein the specified number of prefetched descriptors is maintained during operation of the direct memory access system.

16. The direct memory access system of claim 11 , wherein the prefetch cache is configured to, in response to processing each data packet:

determine a number of the prefetched descriptors consumed in processing the data packet; and

prefetch a number of additional prefetched descriptors corresponding to the number of prefetched descriptors consumed in processing the data packet.

17. A direct memory access system having a multi-queue stream circuit, the multi-queue stream circuit comprising:

a descriptor prefetch circuit configured to receive descriptor request events for a data packet and dynamically switch between a variable size buffer descriptor mode and a low latency mode during operation, wherein the descriptor prefetch circuit includes:

a prefetch credit circuit configured to receive the descriptor request events and issue credit to a fetch circuit for a plurality of descriptors including a first descriptor and a specified number of prefetched descriptors; and

a prefetch cache configured to receive the plurality of descriptors, wherein the plurality of descriptors specify different buffer sizes;

wherein the prefetch cache, in response to processing each data packet, is configured to replenish the plurality of descriptors to the specified number of prefetched descriptors; and

wherein the prefetch cache includes a main linked list comprising a descriptor queueing circuit, wherein the descriptor queueing circuit is configured to, for each descriptor received:

compare a length of a buffer specified by the descriptor with a threshold length; and

in response to determining that the length of the buffer is greater than or equal to the threshold length, add the descriptor to a queue corresponding to the descriptor and enable a low latency mode for the queue.

18. The direct memory access system of claim 17 , wherein the main linked list further comprises:

a descriptor dequeuing circuit configured to:

dequeue a descriptor from a selected queue;

determine a length of a buffer specified by the descriptor;

compare the length of the buffer to the threshold length;

determine whether the low latency mode is enabled for the selected queue; and

in response to determining that the length of the buffer is greater than or equal to the threshold length and that the low latency mode is enabled for the selected queue, process a data packet using the descriptor in the low latency mode.

19. The direct memory access system of claim 17 , wherein the main linked list further comprises:

a descriptor dequeuing circuit configured to:

dequeue a descriptor from a selected queue;

determine a length of a buffer specified by the descriptor;

compare the length of the buffer to the threshold length;

determine whether the low latency mode is enabled for the selected queue; and

in response to determining that the length of the buffer is less than the threshold length or that the low latency mode is not enabled for the selected queue, process a data packet using the variable size buffer descriptor mode.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 15, 2023
From: THYAMAGONDLU, CHANDRASEKHAR S.; YU, TAO; SIRANDAS, CHIRANJEEVI; TRANK, NICHOLAS
To: XILINX, INC.
Reel/Frame 063334/0469 →
Continuity (1)
Related Publication 20240330213A1 · Oct 3, 2024
References Cited (39)
US 6701393B1 · Kemeny · 2004 [cited by applicant]
US 7047362B2 · Kim · 2006 [cited by applicant]
US 7577773B1 · Gandhi · 2009 [cited by applicant]
US 9292436B2 · Wingard · 2016 [cited by applicant]
US 9952991B1 · Bruce · 2018 [cited by applicant]
US 10474610B1 · Schelle · 2019 [cited by applicant]
US 10983920B2 · Thyamagondlu et al. · 2021 [cited by applicant]
US 11232053B1 · Thyamagondlu et al. · 2022 [cited by applicant]
US 11500779B1 · Mukherjee · 2022 [cited by examiner]
US 11983128B1 · Xu · 2024 [cited by applicant]
US 20030131198A1 · Wolrich · 2003 [cited by applicant]
US 20060173970A1 · Pope · 2006 [cited by applicant]
US 20080168259A1 · Biran · 2008 [cited by examiner]
US 20110219208A1 · Asaad · 2011 [cited by applicant]
US 20120254499A1 · Hashimoto · 2012 [cited by applicant]
US 20140181410A1 · Kalamatianos · 2014 [cited by applicant]
US 20140195788A1 · Kalogeropulos · 2014 [cited by examiner]
US 20140317357A1 · Kaplan · 2014 [cited by applicant]
US 20140344485A1 · Dondini · 2014 [cited by applicant]
US 20150180782A1 · Rimmer · 2015 [cited by applicant]
US 20150347292A1 · Fujita · 2015 [cited by applicant]
US 20160173398A1 · Reinig · 2016 [cited by applicant]
US 20160292100A1 · Olcay · 2016 [cited by applicant]
US 20170131904A1 · Rajwade · 2017 [cited by applicant]
US 20200151120A1 · Thyamagondlu · 2020 [cited by applicant]
US 20210014177A1 · Kasichainula · 2021 [cited by applicant]
US 20210064289A1 · Kanno · 2021 [cited by examiner]
US 20210117360A1 · Kutch · 2021 [cited by applicant]
US 20210303570A1 · Kodiles · 2021 [cited by applicant]
US 20220005521A1 · Sethuraman · 2022 [cited by applicant]
US 20220374150A1 · Capri · 2022 [cited by applicant]
US 20230185745A1 · Wu · 2023 [cited by applicant]
US 20230298128A1 · Puffer · 2023 [cited by applicant]
US 20240086356A1 · Ray · 2024 [cited by applicant]
US 20240118702A1 · Cella · 2024 [cited by applicant]
US 20240330191A1 · Thyamagondlu et al. · 2024 [cited by applicant]
US 20240330215A1 · Thyamagondlu et al. · 2024 [cited by applicant]
US 20240330216A1 · Thyamagondlu et al. · 2024 [cited by applicant]
US 20250004961A1 · Thyamagondlu · 2025 [cited by applicant]