Задачи отображения Verilog
Отображение системных задач в основном используется для отображения информационных и отладочных сообщений для отслеживания потока моделирования из файлов журнала, а также помогает ускорить отладку. Существуют разные группы задач отображения и форматов, в которых они могут печатать значения.
Отображение/запись задач
Синтаксис
Оба $display
и $write
отображать аргументы в том порядке, в котором они появляются в списке аргументов.
$display(<list_of_arguments>);
$write(<list_of_arguments>);
$write
не добавляет символ новой строки
до конца строки, а $display
делает, и это видно из приведенного ниже примера.
Пример
module tb;
initial begin
$display ("This ends with a new line ");
$write ("This does not,");
$write ("like this. To start new line, use newline char
");
$display ("This always start on a new line !");
end
endmodule
Журнал моделирования ncsim> run This ends with a new line This does not,like this. To start new line, use newline char Hi there ! ncsim: *W,RNQUIE: Simulation is complete.
Стробы Verilog
$strobe
печатает окончательные значения переменных в конце текущего дельта-шага по времени и имеет аналогичный формат, такой как $display
.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1;
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
end
endmodule
Обратите внимание, что $strobe
показывает окончательное обновленное значение переменной b во время 10 нс, что составляет 0x2E и $display
улавливает это только в следующей дельте симуляции на 11 нс.
ncsim> run [$display] time=10 a=0x2d b=0x2d [$strobe] time=10 a=0x2d b=0x2e [$display] time=11 a=0x2d b=0x2e [$strobe] time=11 a=0x2d b=0x2e ncsim: *W,RNQUIE: Simulation is complete. ncsim> exit
Непрерывные мониторы Verilog
$monitor
помогает автоматически распечатывать значения переменных или выражений всякий раз, когда изменяется переменная или выражение в списке аргументов. Он достигает аналогичного эффекта при вызове $display
после каждого обновления любого из его аргументов.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1 b <= 8'hA4;
#5 b <= a - 8'h33;
#10 b <= 8'h1;
end
endmodule
Обратите внимание, что $monitor
похожа на задачу, которая создается для запуска в фоновом режиме основного потока, который отслеживает и отображает изменения значений своих переменных-аргументов. Новый $monitor
задача может быть выдана любое количество раз во время моделирования.
ncsim> run [$monitor] time=10 a=0x2d b=0x2e [$monitor] time=11 a=0x2d b=0xa4 [$monitor] time=16 a=0x2d b=0xfa [$monitor] time=26 a=0x2d b=0x1 ncsim: *W,RNQUIE: Simulation is complete.
Спецификаторы формата Verilog
Чтобы печатать переменные внутри функций отображения, используйте соответствующие спецификаторы формата. должны быть указаны для каждой переменной.
Аргумент | Описание |
---|---|
%h, %H | Отображать в шестнадцатеричном формате |
%d, %D | Отображать в десятичном формате |
%b, %B | Отображать в двоичном формате |
%m, %M | Отображать иерархическое имя |
%s, %S | Отображать как строку |
%t, %T | Отображение в формате времени |
%f, %F | Отображать 'real' в десятичном формате |
%e, %E | Отображение «реального» в экспоненциальном формате |
module tb;
initial begin
reg [7:0] a;
reg [39:0] str = "Hello";
time cur_time;
real float_pt;
a = 8'h0E;
float_pt = 3.142;
$display ("a = %h", a);
$display ("a = %d", a);
$display ("a = %b", a);
$display ("str = %s", str);
#200 cur_time = $time;
$display ("time = %t", cur_time);
$display ("float_pt = %f", float_pt);
$display ("float_pt = %e", float_pt);
end
endmodule
Журнал моделирования ncsim> run a = 0e a = 14 a = 00001110 str = Hello time = 200 float_pt = 3.142000 float_pt = 3.142000e+00 ncsim: *W,RNQUIE: Simulation is complete.
Escape-последовательности Verilog
Некоторые символы считаются специальными, поскольку они используются для других целей отображения, таких как перевод строки, табуляция и перевод формы. Чтобы напечатать эти специальные символы , каждое вхождение таких символов должно быть экранировано .
Аргумент | Описание |
---|---|
Символ новой строки | |
Символ табуляции | |
Персонаж | |
" | Символ " |
%% | Символ % |
module tb;
initial begin
$write ("Newline character
");
$display ("Tab character stop");
$display ("Escaping " %%");
/*
// Compilation errors
$display ("Without escaping "); // ERROR : Unterminated string
$display ("Without escaping ""); // ERROR : Unterminated string
*/
end
endmodule
Журнал моделирования ncsim> run Newline character Tab character stop Escaping " % ncsim: *W,RNQUIE: Simulation is complete.
Verilog