2009-03-10 34 views
12

De repente, estoy obligado a buscar en algún código de banco de pruebas verilog que utiliza en gran medida $ readmemh, y $ writememh. Comprendí que básicamente se lee en la memoria y se escribe en la memoria. Seré feliz si puede señalar algunos recursos relacionados con esas rutinas. PD: busqué en google sin éxito. (Soy muy ... muy nuevo para Verilog)

+1

Usted no está buscando lo suficiente, entonces! Intente buscar algo como "readmem tutorial". La documentación para tu simulador también debe tener información útil. – Marty

+0

@Marty, cuando busqué "readmem tutorial" en google, esta SO es la mejor opción ... ;-))) – Alphaneo

+1

Ya está disponible un IEEE Std 1800-2012 gratuito: sección 21.4 "Carga de los datos de la matriz de memoria un archivo ", etc. – toolic

Respuesta

17

Acepto que no es muy fácil encontrar algo sobre readmem/writemem. Se puede encontrar un poco aquí: http://fullchipdesign.com/index_files/readmemh.htm

De todos modos no hay mucho que decir acerca de estas funciones, la sintaxis es:

$readmem[hb]("File",ArrayName,StartAddr,EndAddr) 
$writemem[hb]("File",ArrayName,StartAddr,EndAddr) 

Verilog es muy exigente con el formato de archivo, el número de bits en el archivo de texto tienen que coincidir con la cantidad de bits en la matriz.

Le recomiendo que juegue un poco definiendo un conjunto, llenándolo con datos, escríbalo con writememh/writememb e imprímalo después.

Algo como esto debería comenzar (¡no lo intenté!).

integer i; 
reg [7:0] memory [0:15]; // 8 bit memory with 16 entries 

initial begin 
    for (i=0; i<16; i++) begin 
     memory = i; 
    end 
    $writememb("memory_binary.txt", memory); 
    $writememh("memory_hex.txt", memory); 
end 

¡Salud!

0

Leyendo el archivo HEX sería el siguiente:

integer i; 
reg [7:0] memory [0:15]; // 8 bit memory with 16 entries 

initial begin 
    for (i=0; i<16; i++) begin 
     memory = i; 
    end 
    $readmemh("memory_binary.txt", memory); 

end 
Cuestiones relacionadas