2014-12-13 3 views
0

Я написал следующий 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

Любой помощь на том, как считаны правильные значения и исправить ошибка оценивается. Моделирование было выполнено в Изиме.

ответ

0

Ничего, я нашел свою ошибку. reg [15: 0] memory [22: 0] должно быть регистром [15: 0] memory [60: 0], так как оно относится к общим номерам слов в памяти. Я, хотя это интерпретировалось как биты, необходимые для представления адреса.

+0

Нет ничего плохого в написании 'reg [15: 0] memory [60: 0]' but 'reg [15: 0] memory [0:60]' будет более распространенным. – Morgan

Смежные вопросы