~ 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.fst12.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. Вы сможете добавлять сигналы для отображения, сканируя по диапазону.