Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Задачи отображения 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

  1. Учебник Verilog
  2. Конкатенация Verilog
  3. Верилог Задания
  4. Блокировка и неблокировка Verilog
  5. Верилог-функции
  6. Верилог Задача
  7. Условная компиляция Verilog `ifdef
  8. Иерархическая справочная область Verilog
  9. Генератор часов Verilog
  10. Задачи отображения Verilog