Я написал следующий testbench в verilog, который записывает файл, а затем считывает значения обратно.«readmemh» неправильно считывает файл памяти?
// Verilog Test Fixture Template
`timescale 1 ns/1 ps
module Read_And_Write_File;
/*Add signals used for verification of the values written in SRAM*/
integer handle, channels,index;
reg [15:0] memory [22:0];
reg [22:0] mem_idx;
reg [15:0] val;
initial begin
/*Write the memory file 'SRAM.dat'using the values that are supposed to be in the SRAM after the simulation*/
handle = $fopen("SRAM.dat");
channels = handle | 1;
$display("Generating contents of file SRAM.dat");
$fdisplay(channels, "@1");
val = 16'h2121;
for(index = 0; index < 60; index = index + 1)
begin
$fdisplay(channels, "%h", val);
val=val+16'h1;
end
$fclose(handle);
/*Read the values in the file 'SRAM.dat' and compare the values with the values that were actually written in the SRAM*/
$readmemh("SRAM.dat", memory);
$display("\nContents of memory array");
mem_idx=23'h1;
for(index = 0; index < 60; index = index + 1)
begin
$display("The Value is:%h and index in hex %h",memory[mem_idx],mem_idx);
mem_idx=mem_idx+23'h1;
end
end
endmodule
Написание файла, похоже, в порядке. Однако при чтении с «readmemh» я получаю ошибку следующим образом:
ERROR: Too many words specified in datafile SRAM.dat
И я не получаю правильные значения после прочтения 23 значения:
значение равно: 2135 и индекс в шестнадцатеричной 000015
значения является: 2136 и индексом в шестнадцатеричных 000016
Значение является: хххм и индексом в шестнадцатеричных 000017
Значение является: хххм и индексом в шестнадцатеричных 000018
Любой помощь на том, как считаны правильные значения и исправить ошибка оценивается. Моделирование было выполнено в Изиме.
Нет ничего плохого в написании 'reg [15: 0] memory [60: 0]' but 'reg [15: 0] memory [0:60]' будет более распространенным. – Morgan