2010-12-01 22 views
8

Estoy tratando de implementar un microcontrolador en un FPGA, y tengo que darle una ROM para su programa. Si uso $ readmemb, ¿se sintetizará correctamente en una ROM? Si no, ¿cuál es la forma estándar de hacer esto?

Respuesta

15

Me gustaría modificar la respuesta de George para decir que depende de la herramienta de síntesis si $readmemb es o no sintetizable. guía

de Altera Recommended HDL Coding Styles incluye ejemplo 10-31 (página 10-38), lo que demuestra una ROM inferirse de $readmemb (reproduce a continuación):

module dual_port_rom (
    input [(addr_width-1):0] addr_a, addr_b, 
    input clk, 
    output reg [(data_width-1):0] q_a, q_b 
); 
    parameter data_width = 8; 
    parameter addr_width = 8; 
    reg [data_width-1:0] rom[2**addr_width-1:0]; 
    initial // Read the memory contents in the file 
      // dual_port_rom_init.txt. 
    begin 
     $readmemb("dual_port_rom_init.txt", rom); 
    end 
    always @ (posedge clk) 
    begin 
     q_a <= rom[addr_a]; 
     q_b <= rom[addr_b]; 
    end 
endmodule 

mismo modo, de Xilinx XST User Guide estados que:

Las tareas $readmemb y $readmemh se pueden utilizar para inicializar las memorias del bloque . Para obtener más información, consulte:

La inicialización de RAM desde un archivo externo ejemplos de codificación

Uso $readmemb para binario y $readmemh de representación hexadecimal . Para evitar la posible diferencia entre XST y el comportamiento del simulador , Xilinx® recomienda que use los parámetros de índice en estas tareas del sistema . Consulte el siguiente ejemplo de codificación . respuesta

$readmemb("rams_20c.data",ram, 0, 7);

+1

de mrkj es mucho mejor que la mía. Lo he eliminado – George

Cuestiones relacionadas