The INTERFACE pragma or directive lets you explicitly define which type of RAM or
ROM is used with the storage_type=<value>
option. This defines which ports are created (single-port or dual-port). If no
storage_type
is specified, Vitis HLS uses:
- A single-port RAM by default.
- A dual-port RAM if it reduces the initiation interval or reduces latency.
The ARRAY_PARTITION and ARRAY_RESHAPE pragmas can re-configure arrays on the interface. Arrays can be partitioned into multiple smaller arrays, each implemented with its own interface. This includes the ability to partition every element of the array into its own scalar element. On the function interface, this results in a unique port for every element in the array. This provides maximum parallel access, but creates many more ports and might introduce routing issues during implementation.
By default, the array arguments in the function shown in the following code example are synthesized into a single-port RAM interface.
#include "array_RAM.h"
void array_RAM (dout_t d_o[4], din_t d_i[4], didx_t idx[4]) {
int i;
For_Loop: for (i=0;i<4;i++) {
d_o[i] = d_i[idx[i]];
}
}
A single-port RAM interface is used because the for-loop
ensures that only one element can be read and written in each clock cycle.
There is no advantage in using a dual-port RAM interface.
If the for-loop is unrolled, Vitis HLS uses a
dual-port RAM. Doing so allows multiple elements to be read at the same time and
improves the initiation interval. The type of RAM interface can be explicitly set by
applying the INTERFACE pragma or directive, and setting the storage_type
.
Issues related to arrays on the interface are typically related to throughput.
They can be handled with optimization directives. For example, if the arrays in the
example above are partitioned into individual elements, and the for-loop
is unrolled, all four elements in each array
are accessed simultaneously.
You can also use the INTERFACE pragma or directive to specify the latency of the
RAM, using the latency=<value>
option. This
lets Vitis HLS model external SRAMs with a
latency of greater than 1 at the interface.