Estoy tratando de entender cuál es el propósito de la RAM distribuida como concepto. Según tengo entendido, se implementa utilizando LUT tal como lo son los registros. Sin embargo, los registros parecen ser mucho más flexibles:
input bit [4:0] addr1;
input bit [4:0] addr2;
input bit [4:0] addr3;
output int res;
int register[32];
always_ff @(posedge clk) begin
for (int i = 0; i < 32; i++) begin
if (i == addr1 || i == addr2 || i == addr3) begin
register[i]++;
end
end
res = register[addr1] + register[addr2] + register[addr3];
end
Sin embargo, la RAM distribuida solo permite un número limitado de accesos por ciclo. ¿Se compila de forma más óptima?