DocsTech
/
ICARUS VERILOG
/

~ cd 9. интерактивный режим vvp

Команда vvp имеет интерактивный режим отладки, в котором вы можете остановить симуляцию и просмотреть ее текущее состояние. Существует несколько способов войти в режим отладки, но если вы попали в интерактивный режим отладки, то все действия будут одинаковыми. Рассмотрим пример ниже:
...
Копировать
module clock(output reg clock);
  initial clock = 1'b1;
  always #100 clock = !clock;
endmodule // clock

module main;

  reg [2:0] foo;
  wire             clk;

  clock foo_clock(clk);

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

  initial begin
     foo = 3'b000;
    #250 $stop;
  end

endmodule

В последующих примерах мы будем использовать приведенный выше пример программы.

9.1. Вход в интерактивный режим

Первый и наиболее распространенный метод заключается в том, чтобы поместить вызовы системных задач «$stop» в симуляцию в те моменты, когда вы хотите, чтобы симуляция прервалась и перешла в интерактивный режим. В примере выше есть $stop, поэтому вывод выглядит следующим образом:
...
Копировать
../foo.vl:25: $stop called at 250 (1s)
** VVP Stop(0) **
** Flushing output streams.
** Current simulation time is 250 ticks.
> 
Вы можете получить интерактивную справку, используя команду «help»:
...
Копировать
> help
Commands can be from the following table of base commands,
or can be invocations of system tasks/functions.

cd       - Synonym for push.
cont     - Resume (continue) the simulation
finish   - Finish the simulation.
help     - Get help.
list     - List items in the current scope.
load     - Load a VPI module, a la vvp -m.
ls       - Shorthand for "list".
pop      - Pop one scope from the scope stack.
push     - Descend into the named scope.
step     - Single-step the scheduler for 1 event.
time     - Print the current simulation time.
trace    - Control statement tracing (on/off) when the code is instrumented.
where    - Show current scope, and scope hierarchy stack.

If the command name starts with a '$' character, it
is taken to be the name of a system task, and a call is
built up and executed. For example, "$display foo" will
call the function as $display(foo).
Перевод текста вывода после команды help:
...
Копировать
Команды могут быть из следующей таблицы базовых команд, а могут быть вызовами системных задач/функций.

cd - Синоним команды push.
cont - Возобновить (продолжить) симуляцию
finish - Завершить симуляцию.
help - Получить справку.
list - Перечислить элементы в текущей области видимости.
load - Загрузить модуль VPI, а-ля vvp -m.
ls - сокращение от «list».
pop - Вытащить одну область из стека областей видимости.
push - Спуститься в именованную область видимости.
step - Однократный шаг планировщика для 1 события.
time - Вывести текущее время моделирования.
trace - Управление трассировкой операторов (вкл/выкл), когда код инструментирован.
where - Показать текущую область видимости и стек иерархии областей видимости.

Если имя команды начинается с символа '$', оно воспринимается как имя системной задачи, строится и выполняется вызов. Например, «$display foo» вызовет функцию как $display(foo).
Вы также можете перейти в интерактивный режим на терминале, прервав выполнение символом «^C» (Control-C). Движок vvp перехватывает терминальное прерывание и переводит вас в интерактивную подсказку:
...
Копировать
^C** VVP Stop(0) **
** Flushing output streams.
** Current simulation time is 533928600 ticks.
> 

Это может быть полезно, если вы подозреваете, что ваша симуляция застряла в бесконечном цикле, и хотите разобраться, что происходит.

И наконец, вы можете передать vvp флаг командной строки «-s», чтобы он выполнил команду «$stop» в начале симуляции, до выполнения любых других событий. Это может быть полезно для ручной настройки некоторых деталей моделирования.

9.2. Просмотр дизайна

Теперь, когда вы находитесь в интерактивной подсказке, вы можете просмотреть дизайн.
...
Копировать
> ls
2 элемента в этой области видимости:
...
Копировать
> ls
2 items in this scope:
package : $unit
module  : main
> cd main
> ls
3 items in this scope:
reg     : foo[2:0]
module  : foo_clock
net     : clk
> where
module main
> $display foo
1
> cd foo_clock
> where
module foo_clock
module main
> ls
2 items in this scope:
port    : clock -- output
reg     : clock

В приведенном выше примере команды ‘cd’ и ‘pop’ опускаются в область видимости или поднимаются обратно на один уровень. Команда ‘where’ показывает стек области видимости, а команда ‘ls’ перечисляет элементы, присутствующие в области видимости. С помощью этих команд можно свободно перемещаться по иерархии областей проектирования.

Также в режиме отладки можно вызывать системные задачи. Примером этого является вызов функции «$display». В целом, любую системную задачу можно вызвать в текущем контексте, передав в качестве аргументов объекты, включенные в командную строку. Аргументами могут быть переменные или сети, а также различные виды литералов:
...
Копировать
> ls
2 items in this scope:
port    : clock -- output
reg     : clock
> $display "Hello, World! " 10 " " clock
Hello, World!          10 1

Это отличный способ вызова пользовательских системных задач. И системная задача, о которой знает vvp, может быть вызвана таким образом.

9.3. Выход из интерактивного режима

После того как вы закончили исследования в интерактивном режиме, вы можете возобновить симуляцию или завершить выполнение. Возобновить симуляцию можно командой «cont», а завершить — командой «finish». Последнее равносильно выполнению системной задачи «$finish».

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