~ cd 9. интерактивный режим 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. Вход в интерактивный режим
../foo.vl:25: $stop called at 250 (1s)
** VVP Stop(0) **
** Flushing output streams.
** Current simulation time is 250 ticks.
>
> 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).
Команды могут быть из следующей таблицы базовых команд, а могут быть вызовами системных задач/функций.
cd - Синоним команды push.
cont - Возобновить (продолжить) симуляцию
finish - Завершить симуляцию.
help - Получить справку.
list - Перечислить элементы в текущей области видимости.
load - Загрузить модуль VPI, а-ля vvp -m.
ls - сокращение от «list».
pop - Вытащить одну область из стека областей видимости.
push - Спуститься в именованную область видимости.
step - Однократный шаг планировщика для 1 события.
time - Вывести текущее время моделирования.
trace - Управление трассировкой операторов (вкл/выкл), когда код инструментирован.
where - Показать текущую область видимости и стек иерархии областей видимости.
Если имя команды начинается с символа '$', оно воспринимается как имя системной задачи, строится и выполняется вызов. Например, «$display foo» вызовет функцию как $display(foo).
^C** VVP Stop(0) **
** Flushing output streams.
** Current simulation time is 533928600 ticks.
>
Это может быть полезно, если вы подозреваете, что ваша симуляция застряла в бесконечном цикле, и хотите разобраться, что происходит.
И наконец, вы можете передать vvp флаг командной строки «-s», чтобы он выполнил команду «$stop» в начале симуляции, до выполнения любых других событий. Это может быть полезно для ручной настройки некоторых деталей моделирования.
9.2. Просмотр дизайна
> ls
> 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’ перечисляет элементы, присутствующие в области видимости. С помощью этих команд можно свободно перемещаться по иерархии областей проектирования.
> 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».