DocsTech
/
ICARUS VERILOG
/

~ cd 12. icarus verilog с gtkwave

GTKWave — это программа для просмотра форм сигналов VCD, основанная на библиотеке GTK. Этот просмотрщик поддерживает форматы VCD и LXT для дампов сигналов. GTKWave доступен на github здесь. Большинство дистрибутивов Linux уже содержат gtkwave в готовом виде.

12.1. Генерация файлов VCD/FST для GTKWave

Дампы волновых форм записываются программой vvp из Icarus Verilog runtime. Пользователь использует системные задачи $dumpfile и $dumpvars, чтобы включить дамп осциллограмм, затем программа vvp делает все остальное. Вывод записывается в файл, указанный системной задачей $dumpfile. Если вызов $dumpfile отсутствует, компилятор выберет имя файла dump.vcd или dump.lxt или dump.fst, в зависимости от флагов времени выполнения. В приведенном ниже примере в дамп записывается все, что находится в тестовом модуле и ниже него:
...
Копировать
// Do this in your test bench

initial
begin
   $dumpfile("test.vcd");
   $dumpvars(0,test);
end
По умолчанию среда выполнения vvp генерирует дамп VCD. По умолчанию он является наиболее переносимым. Однако при использовании gtkwave формат вывода FST быстрее и компактнее. Используйте расширенный аргумент «-fst», чтобы активировать вывод FST. Например, если скомпилированный вывод записывается в файл «foo.vvp», то команда:
...
Копировать
% vvp foo.vvp -fst <other-plusargs>
приведет к тому, что вывод дампфайла будет записан в формате FST. При отсутствии какой-либо специальной команды $dumpfile этот файл будет называться dump.fst, который можно просмотреть командой:
...
Копировать
% gtkwave dump.fst

12.2 Рабочий пример

Сначала о самой конструкции:
...
Копировать
module counter(out, clk, reset);

  parameter WIDTH = 8;

  output [WIDTH-1 : 0] out;
  input            clk, reset;

  reg [WIDTH-1 : 0]   out;
  wire            clk, reset;

  always @(posedge clk)
    out <= out + 1;

  always @reset
    if (reset)
      assign out = 0;
    else
      deassign out;

endmodule // counter
Затем файл симуляции:
...
Копировать
module test;

  /* Make a reset that pulses once. */
  reg reset = 0;
  initial begin
     $dumpfile("test.vcd");
     $dumpvars(0,test);

     # 17 reset = 1;
     # 11 reset = 0;
     # 29 reset = 1;
     # 5  reset =0;
     # 513 $finish;
  end

  /* Make a regular pulsing clock. */
  reg clk = 0;
  always #1 clk = !clk;

  wire [7:0] value;
  counter c1 (value, clk, reset);

  initial
     $monitor("At time %t, value = %h (%0d)",
              $time, value, value);
endmodule // test
Скомпилируйте, запустите и просмотрите осциллограммы с помощью этих команд:
...
Копировать
% iverilog -o dsn counter_tb.v counter.v
% vvp dsn
% gtkwave test.vcd

Нажмите на «test», затем на «c1» в верхнем левом поле на GTKWave, затем перетащите сигналы в поле Signals. Вы сможете добавлять сигналы для отображения, сканируя по диапазону.

Главная
Курсы
Вебинары
1. Руководство по установке Icarus Verilog
2. Начало работы с Icarus Verilog
3. Симуляция с помощью Icarus Verilog
4. Флаги командной строки iverilog
5. Формат командного файла
6. Атрибуты
7. IVLPP — препроцессор IVL
8. Флаги командной строки VVP
9. Интерактивный режим VVP
10. VVP как библиотека
11. Флаги командной строки vhdlpp
12. Icarus Verilog с GTKWave
13. Использование VPI
14. Расширения Icarus Verilog
Закрыть