He creado un generador de ram de bloque (ROM de un solo puerto) en vivado usando un archivo coe en verilog. Soy capaz de leer los valores uno por vez utilizando una instrucción continua (capaz de crear una instancia del bloque ROM una vez por pulso de reloj). Aquí está mi fragmento:
module coedata(clk,rst,a);
input clk,rst;
output [31:0]a;
wire[12:0]addra,out;
wire [31:0]douta ;
count c1(clk,rst,out); // just gives count in 'out' to access address(addra)
assign addra=out;
blk_mem_gen_0 your_instance_name (
.clka(clk), // input wire clka
.addra(addra), // input wire [12 : 0] addra
.douta(douta) // output wire [31 : 0] douta
);
assign a=douta;
endmodule
Esto está bien. Puedo leer valor a través de una instancia de un reloj. Pero quiero almacenar todos estos valores en un cable 2D como [31: 0] a [0: 100]. Quiero que todos los valores estén disponibles en un pulso de reloj. (Solo suponga que hemos creado un bloque ROM suficiente)
module coedata(clk,rst);
input clk,rst;
reg [31:0]a[0:99];
wire[12:0]addra,out;
wire [31:0]douta ;
count c1(clk,rst,out,i); // just gives count in 'out-binary' to access,'i-integer' address(addra)
assign addra=out;
blk_mem_gen_0 your_instance_name (
.clka(clk), // input wire clka
.addra(addra), // input wire [12 : 0] addra
.douta(douta) // output wire [31 : 0] douta
);
assign a[i]=douta;
endmodule
Está diciendo que 'i' no es una constante.
Gracias de antemano.