Невозможно прочитать файл ввода данных в verilog

Я пытаюсь прочитать данные из внешнего файла с именем «data.in» на скамейке отдыха Verilog. Я пытаюсь сохранить данные из файла в двух переменных, data1 и data2. Вот некоторая часть входного файла. Только шестнадцатеричные данные должны быть прочитаны. Комментарии читать не надо.

// This is a generated input file.
//
//  rj
// Left      Right        No.
   003E      002E      // r1
   002E      0017      // r2
   0026      0030      // r3
   0005      002C      // r4
   0034      0015      // r5
   000B      0023      // r6
   0007      0021      // r7
   0028      0001      // r8
   0007      0012      // r9
    //
//  Coefficient u
   00D3      0034      // 1
   0116      01F2      // 2
   0016      0154      // 3
   01D0      002E      // 4

Я уже пробовал memread, fscanf, но не повезло. любая помощь велика. заранее спасибо.


person Virbhadra Rathod    schedule 16.10.2015    source источник
comment
Попробуйте использовать $readmemh. Вы можете посмотреть этот вопрос stackoverflow.com/questions/628603/ для более подробной информации.   -  person ssgr    schedule 16.10.2015
comment
Спасибо @ssgr за вашу помощь, я уже пробовал это, но с помощью $readmemh я не получаю данные из одной строки, он обращается ко всему файлу как к одной строке.   -  person Virbhadra Rathod    schedule 16.10.2015


Ответы (1)


Если у вас нет ограничений, которые не позволяют вам это сделать, самый простой способ — использовать $readmemh в одной переменной и впоследствии разделить данные по мере необходимости:

  reg [15:0] data[26]; // Make this is total number of 16-bit values to read from the file
  reg [15:0] data1[13]; // Also make these as long as needed, which I assume they are already
  reg [15:0] data2[13];
  integer i;  
  ...
  initial begin
    $readmemh("data.in", data);
    for (i = 0; i < 26; i  = i + 1) begin
      if (i % 2) begin // Right
        data2[i / 2] = data[i];
      end
      else begin // Left
        data1[i / 2] = data[i];
      end
    end
  end

Приведенное выше позволит вам прочитать данные в массивы с правым и левым разделением данных. Вы всегда можете пропустить этот шаг, зная, что левые данные находятся в четных элементах data, а правые данные — в нечетных элементах.

person Unn    schedule 16.10.2015