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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta