IP Library Granted Patent US 10,810,011
Granted Patent B2
US 10,810,011 · App. 14/940,585 · Granted Oct 20, 2020

Implementing 128-bit SIMD operations on a 64-bit datapath

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 10,810,011
App. No.
14/940,585
Granted
Oct 20, 2020
Kind
B2
Abstract

A method of implementing a processor architecture and corresponding system includes operands of a first size and a datapath of a second size. The second size is different from the first size. Given a first array of registers and a second array of registers, each register of the first and second arrays being of the second size, selecting a first register and corresponding second register from the first array and the second array, respectively, to perform operations of the first size. Advantageously, this allows a user, who is interfacing with the hardware processor through software, to provide data to the processor agnostic to the size of the registers and datapath bit-width of the processor.

Claims (46)

1. A method of implementing a processor architecture, the method comprising:

provisioning the processor with operands of a first size and a datapath of a second size that is different than the first size; and

given a first array of registers and a second array of registers, each register of the first array and the second array being of the second size and comprised in a register file, selecting, by at least one multiplexer comprised in the register file, in response to receiving select values, one of a first register and a second register from the first array and the second array, respectively, to perform operations of the first size on the datapath of the second size, wherein the first register and the second register correspond to each other, and wherein the selecting the one of the first register and the second register is based on a clock cycle of the processor relative to an instruction received.

2. The method of claim 1 , wherein each register of the first array corresponds with a particular register of the second array, and wherein bits stored in the first register of the first array and bits stored in the corresponding second register of the second array represent an operand, of the operands, of the first size.

3. The method of claim 2 , wherein the first register of the first array, corresponding with the second register of the second array, stores a plurality of bits of a different significance than a plurality of bits stored in the second register of the second array.

4. The method of claim 1 , wherein the selecting the one of the first register and the second register includes selecting the first register in response to receiving a first non-null select value of the select values, and selecting the second register in response to receiving a second non-null select value of the select values.

5. The method of claim 1 , wherein the selecting the one of the first register and the second register includes selecting the first register in response to receiving a first non-null select value of the select values, and not selecting the second register in absence of receiving a second non-null select value of the select values.

6. The method of claim 1 , further comprising:

performing a first operation, of the operations, on data of the first register and performing a second operation, of the operations, on data of the corresponding second register at a functional unit, wherein the first operation and the second operation are related to a same instruction.

7. The method of claim 1 , further comprising:

after beginning an operation, of the operations, on data of the first register:

issuing a stall cycle; and

reading data of the corresponding second register during the stall cycle.

8. The method of claim 1 , further comprising:

returning a result of the first size, wherein the result is stored partially in a first destination register and partially in a corresponding second destination register in the first array and the second array, respectively.

9. The method of claim 1 , further comprising:

returning a result of the second size stored in a destination register in either the first array or the second array.

10. The method of claim 6 , wherein the performing the operations of the first size includes reading bits of a first operand, of the operands, in the second register in a same clock cycle as bits of a second operand, of the operands, in the first register when the instruction is any one of a pairwise instruction and an across-vector instruction, and further includes reading bits of the first operand in a third register, of the second array, in a next clock cycle as bits of the second operand in a fourth register, of the first array, when the instruction is a pairwise instruction.

11. The method of claim 6 , wherein the performing the operations of the first size includes reading bits of a plurality of registers of the second array in a first clock cycle prior to reading bits of a plurality of registers of the first array in a second clock cycle.

12. A system for implementing a processor architecture, the system comprising:

operands of a first size and a datapath of a second size that is different than the first size: and

a register file, wherein the register file comprises:

a first array of registers, each register of the first array being of the second size;

a second array of registers, each register of the second array being of the second size; and

at least one multiplexer configured to select, in response to reception of select values, one of a first register and a second register from the first array and the second array, respectively, to perform operations of the first size on the datapath of the second size, wherein the first register and the second register correspond to each other, and wherein the at least one multiplexer is configured to select the one of the first register and the second register based on a clock cycle of the processor relative to an instruction received.

13. The system of claim 12 , wherein each register of the first array corresponds with a particular register of the second array, and wherein bits stored in the first register of the first array and bits stored in the corresponding second register of the second array represent an operand, of the operands, of the first size.

14. The system of claim 13 , wherein the first register of the first array, corresponding with the second register of the second array, stores a plurality of bits of a different significance than a plurality of bits stored in the second register of the second array.

15. The system of claim 12 , wherein the at least one multiplexer is configured to select the first register in response to reception of a first non-null select value of the select values, and select the second register in response to reception of a second non-null select value of the select values.

16. The system of claim 12 , wherein the at least one multiplexer is configured to select the first register in response to reception of a first non-null select value of the select values and to not select the second register in absence of reception of a second non-null select value of the select values.

17. The system of claim 12 , further comprising:

a functional unit configured to perform a first operation, of the operations, on data of the first register and perform a second operation, of the operations, on data of the corresponding second register, wherein the first operation and the second operation are related to a same instruction.

18. The system of claim 12 , further comprising:

an issue unit configured to, after beginning an operation, of the operations, on data of the first register:

issue a stall cycle; and

read data of the corresponding second register during the stall cycle.

19. The system of claim 12 , further comprising:

an output module configured to return a result of the first size, wherein the result is stored partially in a first destination register and partially in a corresponding second destination register in the first array and the second array, respectively.

20. The system of claim 12 , further comprising:

an output module configured to return a result of the second size stored in a destination register in either the first array or the second array.

21. The system of claim 17 , wherein the functional unit is further configured to read bits of a first operand, of the operands, in the second register in a same clock cycle as bits of a second operand, of the operands, in the first register based on an operation, of the operations, being based on at least one of a pairwise instruction and an across-vector instruction, and to read bits of the first operand in a third register, of the second array, in a next clock cycle as bits of the second operand in a fourth register, of the first array, when the instruction is a pairwise instruction.

22. The system of claim 17 , wherein the functional unit is further configured to read bits of a plurality of registers of the second array in a first clock cycle prior to reading bits of a plurality of registers of the first array in a second clock cycle.

23. A non-transitory computer-readable medium having computer-readable program codes embedded thereon including instructions, for implementing a processor architecture that, when executed by the processor, cause the processor to:

provision operands of a first size and a datapath of a second size that is different than the first size; and

given a first array of registers and a second array of registers, each register of the first array and the second array being of the second size and comprised in a register file, select, by at least one multiplexer comprised in the register file, in response to reception of select values, one of a first register and a second register from the first array and the second array, respectively, to perform operations of the first size on the datapath of the second size, wherein the first register and the second register correspond to each other, and wherein the selection of the one of the first register and the second register is based on a clock cycle of the processor relative to an instruction received.

24. The non-transitory computer-readable medium of claim 23 , wherein each register of the first array corresponds with a particular register of the second array, and wherein bits stored in the first register of the first array and bits stored in the corresponding second register of the second array represent an operand, of the operands, of the first size.

25. The non-transitory computer-readable medium of claim 24 , wherein the first register of the first array, corresponding with the second register of the second array, stores a plurality of bits of a different significance than a plurality of bits stored in the second register of the second array.

Assignments (6)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 15, 2020
From: CAVIUM INTERNATIONAL
To: MARVELL ASIA PTE, LTD.
Reel/Frame 053179/0320 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 17, 2020
From: CAVIUM, LLC
To: CAVIUM INTERNATIONAL
Reel/Frame 051948/0807 →
CONVERSION Recorded Oct 6, 2018
From: CAVIUM, INC.
To: CAVIUM, LLC
Reel/Frame 047202/0690 →
RELEASE OF SECURITY INTEREST Recorded Jul 6, 2018
From: JP MORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
To: CAVIUM, INC; CAVIUM NETWORKS LLC; QLOGIC CORPORATION
Reel/Frame 046496/0001 →
SECURITY AGREEMENT Recorded Aug 17, 2016
From: CAVIUM, INC.; CAVIUM NETWORKS LLC
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 039715/0449 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 13, 2015
From: KRAVITZ, DAVID; SALVI, MANAN; CARLSON, DAVID A.
To: CAVIUM, INC.
Reel/Frame 037033/0702 →