Nunca lo probé, así que acabo de abrir mi pequeña Guía de referencia dorada de Verilog del sistema para la sintaxis exacta. Encontré una descripción de $fopen
pero también encontré algunas correcciones que hice al texto.
$fopen( "filename" , "mode [b] [+] ");
el modo puede ser r (leer), w (escribir), a (anexar).
b es para binario
El + final está abierto para leer y escribir.
fd = $fopen("example","rb+");
Lo siguiente me funcionó devolviendo 0x0, 0x01 ... 0xFF de un archivo de prueba de 256 bytes:
reg [7:0] binv;
integer fd;
integer loop;
initial
begin
fd = $fopen("C:\tmp\hex256.bin","rb");
if (fd==0)
begin
$display("Could not open file '%s'","c:\tmp\test.bin");
$stop;
end
for (loop=0; loop<256; loop=loop+1)
begin
binv = $fgetc(fd);
$display("0x%02X",binv);
end
end
También me hice una prueba rápida dejando la 'b' fuera. La lectura va desde 0x00..0x19. Después de eso produce 0xFF. A partir de eso, interpreto que 0x1A (Control-Z) se ve como un EOF. Sin embargo, como esa es una característica de Windows / DOS, bien podría ser que en un sistema Unix / Linux el programa funcionaría incluso en modo texto. Seguiría usando "rb", ya que lo hace compatible y también aclaro a otros lectores de su código, que está trabajando con archivos binarios