МАРСОХОД

Open Source Hardware Project

Verilog System Tasks

На нашем сайте уже было несколько ознакомительных статей по языку описания аппаратуры Verilog (статьи 1, 2, 3, 4, 5). Их даже можно выкачать одним файлом:

.

Конечно, в тех ознакомительных статьях было невозможно рассказать все. Именно поэтому я продолжаю освещать некоторые возможности и особенности языка Verilog.

Сейчас речь пойдет о специальных ключевых словах языка Verilog, используемых для симуляции проектов. Симуляция очень важный этап разработки. Перед проверкой проекта в чипе FPGA или CPLD очень желательно промоделировать поведение всех его модулей.

Вообще-то и про симуляцию проекта в среде Quartus II, у меня тоже была статья. Однако, то была симуляция средствами среды Quartus II: нужно было «рисовать» входные сигналы для модуля и симулятор рассчитывал выходные сигналы и показывал все это в графическом виде. Теперь же разговор именно о средствах языка Verilog – это так называемые System Tasks. Я расскажу только о некоторых ключевых словах языка, важных для симуляции. Итак...

Ключевое слово $display.

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


$display(p1,p2,p3,…,pn);
Здесь параметры p1, p2, …, pn – это строки или выражения. Вообще, вызов этой системной функции похож по синтаксису на printf из языка C. Первый параметр, как правило – это строка форматирования, остальные параметры – это отображаемые выражения. Спецификаторы (не все!) строки форматирования вот такие:

%d или %D – отображение в десятичном виде,

%b или %B – отображение в двоичном виде,

%s или %S – отображение cтроки,

%h или %H – отображение в шестнадцатиричном виде,

%c или %C – отображение символа ASCII,

%o или %O – отображение в восьмеричном виде,

%t или %T – отображение в формате времени,

%e или %E – отображение реального числа в научном виде (например 3e10),

%f или %F – отображение реального числа в десятичном виде (например 3.14),

%g или %G – отображение реального числа либо в научном виде, либо в десятичном, как окажется  короче.

$display всегда переходит на новую строку после печати. Поэтому вызов без параметров – это печать пустой строки. Вот несколько примеров использования:


//отображение строки

$display(“Hello Verilog World!”);

-- Hello Verilog World

//отображение текущего времени симуляции (предположим сейчас время «230»)

$display($time);

-- 230

//отображение значения адреса и времени

reg [31:0]addr;

$display(“at moment %d addr is %h”,$time,addr);

-- at moment 200 addr is 1fe04400


Ключевое слово $monitor.

Язык Verilog предлагает механизм отслеживания момента изменения сигнала. Делается это с помощью $monitor. Формат параметров такой же, как и у $display:


$monitor(p1,p2,p3,…,pn);


Эта системная функция используется во время симуляции модулей. Она отслеживает момент изменения сигнала и тогда печатает на консоль информацию о сигналах, указанных в параметрах вызова. Список сигналов, за которыми идет наблюдение во время симуляции только один – тот что указан в параметрах к $monitor. Если $monitor был вызван несколько раз, то активен последний.

Отслеживание изменений сигнала с помощью $monitor может быть приостановленно командой $monitoroff, а вот возобновить отслеживание можно командой $monitoron.

Команда $stop позволяет остановить симуляцию и перевести симулятор в интерактивный режим (чтобы вручную проверить значения каких нибудь сигналов в проекте).

Команда $finish полностью останавливает симулятор.

Когда проект становится сложным и большим для его симуляции вывода на консоль симулятора может оказаться недостаточно. Тогда используют вывод сообщений в файл.

Команда $fopen позволяет открыть файл и делать вывод сообщений отладки в файл с помощью команд $fdisplay, $fmonitor, $fwrite. Вот простой пример вывода сообщения симулятора в файл:


integer handle1;

initial

begin

handle1 = $fopen(“my_dbg_file”);

$fdisplay(handle1,”string out to file”);

$fclose(handle1);

end


Если вам кажется, что отладка с помощью вывода на консоль симулятора не достаточна, то вы можете использовать просмотр сигналов в графическом виде, в виде waveform. Для этого тоже есть свои средства.

Симулятор может генерировать так называемые VCD файлы – Value Change Dump File. Это текстовые файлы, которые описывают сигналы и моменты их изменения в проекте во время симуляции. Потом эти текстовые файлы можно прочитать другими специальными программами, которые отображают сигналы в графическоми виде.

Ключевое слово $dumpfile(“my_dump_file_name”) задает имя выходного файла для создания файла дампа. Слово $dumpvars(level, module_name) сообщает симулятору какие сигналы должны быть включены в вывод согласно уровню иерархии проекта и относительно некоторого модуля. Если $dumpvars вызывается без парамеров, то все сигналы будут выведены в файл. Ключевые слова $dumpon и $dumpoff позволяют включить запись или приостановить ее.

Возникает вопрос: как мы можем использовать все эти ключевые слова в среде Altera Quartus II? Нужно воспользоваться специальными внешними симуляторами. Один из них Mentor Graphics® ModelSim. Компания Altera предлагает и бесплатную версию этого симулятора ModelSim-Altera Starter Edition. Эта среда довольно сложная в освоении, но совершенно необходимая для симуляции проектов.

Существуют и другие средства отладки и их довольно много, есть в том числе и открытые проекты. Один из них – icarus-verilog.  Возможно его освоение даже окажется проще, чем ModelSim. Постараюсь рассказать о них в следующих статьях.

 

Комментарии  

+2 #2 nckma 03.12.2012 15:36
Цитирую mara:
у меня не создаетця файл out.vcd

В тестбенче напишите
initial
begin
$dumpfile("out. vcd");
$dumpvars(0,my_testbench);
end
где my_testbench - это имя модуля тестбенча
+1 #1 mara 03.12.2012 15:21
у меня не создаетця файл out.vcd :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad: :sad:

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Статьи о разном Verilog System Tasks