Читать и писать из TXT в Verilog - PullRequest
0 голосов
/ 07 марта 2019

Прежде всего я хочу сказать, что я выполняю симуляцию в ADS (Advanced Design System 2017) через модель Verilog, скомпилированную в ModelSim.

Моя цель - загрузка данных из файла .txt втестовый стенд в качестве входных данных для запуска симуляции, а затем сохранить результаты этого моделирования в другом файле .txt.

Вот содержимое входного тестового файла .txt с именем "param.txt":

1
2
3
4
5

А вот мой код испытательного стенда Verilog:

`include "disciplines.vams"


module resistor(p,n);
electrical p,n;
parameter real R=50.0;
integer file;
integer out;
real pwm_A[0:10];
integer i;
integer count;


analog begin

    @(initial_step) // Initial Conditions
    begin


////////////// Read

file=$fopen("param.txt","r");

    if (file)  $display("File was opened successfully : %0d", file);
    else       $display("File was NOT opened successfully : %0d", file);

    for (i=1; i<=5; i=i+1) begin  
         count = $fscanf(file,"%d",pwm_A[i]);
    end



////////////// Write


out=$fopen("out.txt","w");

    for (i=1; i<=5; i=i+1) begin  
        $fwrite(out,"%d\n",pwm_A[i]);
    end


$fclose(file);
$fclose(out);


end

// Simulation (doesnt matter)
V(p,n) <+ R * I(p,n);


end
endmodule

Симуляция выдает эту ошибку:

Error: Incorrect target supplied to integer-valued $fscanf field.

Может кто-нибудь обнаружить проблему?

Заранее спасибо.

1 Ответ

3 голосов
/ 07 марта 2019

Вы объявили pwm как массив вещественных значений, используя спецификатор формата %d для чтения и записи файла. Вам нужно либо

i) изменить pwm на массив целых чисел или

ii) измените спецификатор формата %d на %f в вызовах системных функций $fscanf и $fwrite.

Спецификатор формата %d ожидает чтения и запишет десятичное целое число.

...