DocsTech
/
ICARUS VERILOG
/

~ cd 2. начало работы с icarus verilog

Прежде чем приступить к рассмотрению примеров, приведем несколько замечаний о соглашениях. Во-первых, командные строки и последовательности принимают одинаковые аргументы во всех поддерживаемых операционных средах, включая Linux, Windows и различные системы Unix. Когда пример команды показан на рисунке, общий символ подсказки «% » заменяет любую строку подсказки, подходящую для вашей системы. В Windows команды вызываются в командном окне.

Во-вторых, при создании файла для хранения кода Verilog принято использовать суффикс «.v» или «.vl». Это не требование Icarus Verilog, а полезное соглашение. Некоторые люди также используют суффиксы «.ver» или даже «.vlg». В примерах, приведенных в этом курсе, будет использоваться суффикс «.v».

Итак, давайте начнем. Учитывая, что вы собираетесь использовать Icarus Verilog как часть процесса проектирования, первое, что нужно сделать как проектировщику, — это научиться компилировать и выполнять даже самый тривиальный проект. Для целей моделирования мы используем в качестве примера самую тривиальную симуляцию — простую программу “Hello, World”.
...
Копировать
module hello;
  initial
    begin
      $display("Hello, World");
      $finish ;
    end
endmodule
С помощью текстового редактора поместите программу в текстовый файл hello.v, а затем скомпилируйте эту программу командой:
...
Копировать
% iverilog -o hello hello.v
Результаты компиляции будут помещены в файл «hello», поскольку флаг «-o» указывает компилятору, куда поместить скомпилированный результат. Далее выполните скомпилированную программу следующим образом:
...
Копировать
% vvp hello
Hello, World

И вот она, программа выполнена. Что же произошло? Первый шаг, команда «iverilog», прочитала и интерпретировала исходный файл, а затем сгенерировала скомпилированный результат. Форма компиляции может быть выбрана с помощью переключателей командной строки, но по умолчанию используется формат «vvp», который, собственно, и запускается позже, по мере необходимости. Команда «vvp» второго шага интерпретировала файл «hello» из первого шага, что привело к выполнению программы.

Команды «iverilog» и «vvp» являются наиболее важными командами, доступными пользователям Icarus Verilog. Команда «iverilog» — это компилятор, а команда «vvp» — механизм выполнения симуляции. То, какой именно вывод создает компилятор, контролируется переключателями командной строки, но обычно он выдает вывод в стандартном формате vvp, который, в свою очередь, выполняется программой vvp.

По мере роста и усложнения проектов они приобретают иерархию в виде модулей, которые инстанцируются внутри других, и становится удобно организовывать их в несколько файлов. Общепринятым является написание одного модуля умеренного размера в одном файле (или группировка связанных крошечных модулей в одном файле), а затем объединение файлов дизайна вместе во время компиляции. Например, модель счетчика в файле counter.v
...
Копировать
module counter(out, clk, reset);

  parameter WIDTH = 8;

  output [WIDTH-1 : 0] out;
  input              clk, reset;

  reg [WIDTH-1 : 0]   out;
  wire               clk, reset;

  always @(posedge clk or posedge reset)
    if (reset)
      out <= 0;
    else
      out <= out + 1;

endmodule // counter
и тестовый стенд в файле counter_tb.v
...
Копировать
module test;

  /* Создание сброса, который пульсирует один раз. */
  reg reset = 0;
  initial begin
     # 17 reset = 1;
     # 11 reset = 0;
     # 29 reset = 1;
     # 11 reset = 0;
     # 100 $stop;
  end

  /* Создание регулярной пульсации клоков. */
  reg clk = 0;
  always #5 clk = !clk;

  wire [7:0] value;
  counter c1 (value, clk, reset);

  initial
     $monitor("At time %t, value = %h (%0d)",
              $time, value, value);
endmodule // test

записываются в разные файлы.

Команда «iverilog» поддерживает многофайловые конструкции двумя способами. Самый простой — перечислить файлы в командной строке:
...
Копировать
% iverilog -o my_design counter_tb.v counter.v
% vvp my_design

Эта команда компилирует проект, разбросанный по двум входным файлам, и генерирует скомпилированный результат в файл «my_design». Это работает для небольших и средних конструкций(проектов), но становится громоздким при большом количестве файлов.

Другая техника — использование командного файла, который перечисляет входные файлы в текстовом файле. Например, создайте текстовый файл «file_list.txt» с файлами, перечисленными в отдельных строках:
...
Копировать
counter.v
counter_tb.v
Затем скомпилируйте и выполните проект с помощью такой команды:
...
Копировать
% iverilog -o my_design -c file_list.txt
% vvp my_design

Техника командного файла явно поддерживает гораздо более крупные проекты, просто избавляя вас от необходимости перечислять все исходные файлы в командной строке. Перечислите файлы, которые являются частью проекта или RTL-схемы, в командном файле и используйте флаг «-c», чтобы указать iverilog читать командный файл как список входных файлов Verilog.

По мере усложнения конструкции, проектов или RTL-схем в них всегда появляется множество модулей Verilog, представляющих иерархию конструкции. Как правило, есть один модуль верхнего уровня, который включает в себя экземпляры другие модули низкого уровня, но не объявляются экземплярами никаких других модулей. Он называется корневым модулем или модулем верхнего уровня. Icarus Verilog выбирает в качестве корневых (корней может быть несколько) все модули, которые не объявляются экземплярами другими модулями. Если таких модулей нет, компилятор не сможет выбрать корень, и проектировщик должен использовать ключ «-sroot» для определения корневого модуля, например, так:
...
Копировать
% iverilog -s main -o hello hello.v

Если есть несколько корней-кандидатов, все они будут проработаны. Компилятор сделает это, даже если существует много корневых модулей, которые вы не собираетесь моделировать или которые не влияют на моделирование. Это может произойти, например, если вы включили исходный файл, содержащий множество модулей, но на самом деле интересуетесь только некоторыми из них. Флаг «-s» определяет конкретный корневой модуль, а также отключает автоматический поиск других корневых модулей. Вы можете использовать эту возможность для предотвращения инстанцирования нежелательных корневых модулей.

По мере увеличения размеров конструкций или проектов они распространяются на многие десятки и даже сотни файлов. Когда RTL-схемы становится настолько сложным, требуются более продвинутые методы управления исходным кодом. Они описаны в последующих главах, а также другие продвинутые методы управления конструкциями, поддерживаемые Icarus Verilog.

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