Cómo inicializar contenidos de RAM de bloque inferido (BRAM) en Verilog
Tengo problemas para inicializar el contenido de un carnero inferido en Verilog. El código para el carnero es el siguiente:
module ram(
input clock, // System clock
input we, // When high RAM sets data in input lines to given address
input [13:0] data_in, // Data lines to write to memory
input [10:0] addr_in, // Address lines for saving data to memory
input [10:0] addr_out, // Address for reading from ram
output reg data_out // Data out
);
reg [13:0] ram[2047:0];
// Initialize RAM from file
// WHAT SHOULD GO HERE?
always @(posedge clock) begin
// Save data to RAM
if (we) begin
ram[addr_in] <= data_in;
end
// Place data from RAM
data_out <= ram[addr_out];
end
endmodule
Me he encontrado con el comando $ readmemh. Sin embargo, la documentación parece escasa. ¿Cómo debo formatear el archivo que contiene los datos? Además, ¿cómo puedo pasar el archivo como argumento al crear instancias de este módulo para que pueda tener diferentes instancias de carga de este módulo desde diferentes archivos?
Quiero que el contenido inicializado esté disponible tanto para la simulación como para la implementación real. Para que el FPGA ya arranque con este contenido en RAM.
Estoy usando Vivado 2015.4 para programar un FPGA Kintex xc7k70.