Name Strings

SPV_INTEL_fpga_memory_attributes

Contact

To report problems with this extension, please open a new issue at:

Contributors

  • Ben Ashbaugh, Intel

  • Mohammad Fawaz, Intel

  • Joe Garvey, Intel

  • Michael Kinsner, Intel

  • Julian Packer, Intel

  • Artem Radzikhovksyy, Intel

Notice

Copyright (c) 2019-2023 Intel Corporation. All rights reserved.

Status

Final draft

Version

Last Modified Date

2023-10-03

Revision

I

Dependencies

This extension is written against the SPIR-V Specification, Version 1.5 Revision 2.

This extension requires SPIR-V 1.0.

Overview

This extension adds decorations that influence compiler generation of memory structures on an FPGA target.

Extension Name

To use this extension within a SPIR-V module, the following OpExtension must be present in the module:

OpExtension "SPV_INTEL_fpga_memory_attributes"

New capabilities

This extension introduces a new capability:

FPGAMemoryAttributesINTEL

New Decorations

Decorations added under the FPGAMemoryAttributes capability:

RegisterINTEL
MemoryINTEL
NumbanksINTEL
BankwidthINTEL
MaxPrivateCopiesINTEL
SinglepumpINTEL
DoublepumpINTEL
MaxReplicatesINTEL
SimpleDualPortINTEL
MergeINTEL
BankBitsINTEL
ForcePow2DepthINTEL
StridesizeINTEL
WordsizeINTEL
TrueDualPortINTEL

Token Number Assignments

FPGAMemoryAttributesINTEL

5824

RegisterINTEL

5825

MemoryINTEL

5826

NumbanksINTEL

5827

BankwidthINTEL

5828

MaxPrivateCopiesINTEL

5829

SinglepumpINTEL

5830

DoublepumpINTEL

5831

MaxReplicatesINTEL

5832

SimpleDualPortINTEL

5833

MergeINTEL

5834

BankBitsINTEL

5835

ForcePow2DepthINTEL

5836

StridesizeINTEL

5883

WordsizeINTEL

5884

TrueDualPortINTEL

5885

Modifications to the SPIR-V Specification, Version 1.5

Decoration

Modify Section 3.20, Decoration, adding these rows to the Decoration table:

Decoration Extra Operands Enabling Capabilities

5825

RegisterINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in logic and carried through the datapath.

FPGAMemoryAttributesINTEL

5826

MemoryINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in memory of the specified type.

Supported strings:
  • DEFAULT: Implemenation defined what memory resource is used to implement the variable

  • MLAB: data is stored in special Adaptive Logic Modules (ALMs), called memory-logic array blocks

  • BLOCK_RAM: data is stored in dedicated block RAM modules

Literal String
Memory Type

FPGAMemoryAttributesINTEL

5827

NumbanksINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a memory with the specified number of banks.

Literal Number
Banks

FPGAMemoryAttributesINTEL

5828

BankwidthINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a memory whose banks have the specified width in bytes.

Literal Number
Bank Width

FPGAMemoryAttributesINTEL

5829

MaxPrivateCopiesINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that no more than the specified number of independent copies of the memory synthesized for the variable or structure member should be created for the purpose of enabling concurrent thread or loop iteration accesses.

Literal Number
Maximum Copies

FPGAMemoryAttributesINTEL

5830

SinglepumpINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a memory that is clocked at the same rate as accesses to it.

FPGAMemoryAttributesINTEL

5831

DoublepumpINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a memory that is clocked at twice the rate of accesses to it.

FPGAMemoryAttributesINTEL

5832

MaxReplicatesINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that each copy of the memory synthesized for the variable or structure member should be replicated no more than the specified number of times for the purpose of enabling simultaneous accesses from different load/store sites in the program.

Literal Number
Maximum Replicates

FPGAMemoryAttributesINTEL

5833

SimpleDualPortINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a memory that is configured such that no memory port services both stores and loads.

FPGAMemoryAttributesINTEL

5834

MergeINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a memory that is merged with any memories synthesized from arrays or structure members that are decorated with this decoration and the same specified merge key. The mechanism of this merging is specified as a subsequent literal string.

Literal String
Merge Key

Literal String
Merge Type

FPGAMemoryAttributesINTEL

5835

BankBitsINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a banked memory system, where the bits specified determine the pointer address bits to bank on.

Literal Number, Literal Number, …​
Bank Bits

FPGAMemoryAttributesINTEL

5836

ForcePow2DepthINTEL
Apply to a variable or a structure-type member. Request that the variable or structure member should be implemented in a memory that is a power-of-2 deep. This option is enabled if the subsequent literal number specified is 1, and disabled if the subsequent literal number specified is 0.

Literal Number
Force Power-Of-2 Depth

FPGAMemoryAttributesINTEL

5883

StridesizeINTEL
Apply to a variable or a structure-type member of array type. Request, to the extent possible, that Stride Size worth of consecutive array elements be placed in the same memory bank.

Literal Number
Stride Size

FPGAMemoryAttributesINTEL

5884

WordsizeINTEL
Apply to a variable or a structure-type member of array type. Request, to the extent possible, the size in array elements of a single memory transaction.

Literal Number
Word Size

FPGAMemoryAttributesINTEL

5885

TrueDualPortINTEL
Apply to a variable or a structure-type member. Request, to the extent possible, that the variable or structure member should be implemented in a memory that is configured such that all memory ports can service both stores and loads.

FPGAMemoryAttributesINTEL

Capability

Modify Section 3.31, Capability, adding a row to the Capability table:

Capability Implicitly Declares

5824

FPGAMemoryAttributesINTEL

Validation Rules

None.

Issues

None.

Revision History

Rev Date Author Changes

A

2019-02-27

Joe Garvey

Initial public release

B

2019-03-18

Joe Garvey

Added MaxconcurrencyINTEL decoration. Fixed NumbanksINTEL capitalization

C

2019-04-23

Joe Garvey

Added SinglepumpINTEL and DoublepumpINTEL decorations

D

2019-06-06

Joe Garvey

Changed the name of MaxconcurrencyINTEL to MaxPrivateCopiesINTEL

E

2019-06-18

Joe Garvey

Added the MaxReplicatesINTEL, SimpleDualPortINTEL, and MergeINTEL decorations

F

2019-12-18

Julian Packer

Added the BankBitsINTEL decoration

G

2020-02-06

Mohammad Fawaz

Added the ForcePow2DepthINTEL decoration

H

2023-07-26

Artem Radzikhovskyy

Added StridesizeINTEL, WordsizeINTEL, TrueDualPortINTEL decorations

I

2023-10-03

Artem Radzikhovskyy

Definition clarifications; Defined supported strings in MemoryINTEL