1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/x-epic-EpicSim

Клонировать/Скачать
README.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 16:56 1d9cbb6

Начало работы с EpicSim

EpicSim — это компилятор Verilog. Он подходит для использования в качестве симулятора и рекомендуется к запуску под Red Hat и CentOS. Инструкции в этом документе, как правило, применимы ко всем средам.

Проект разработан на основе icarus iverilog под LGPL. Отдельное спасибо Стивену Уильямсу (steve@icarus.com).

1. Установка из исходного кода

Если вы начинаете с исходного кода, процесс сборки должен быть максимально простым. Кто-то, кто в основном знаком с целевой системой и компиляцией C/C++, должен иметь возможность собрать исходный дистрибутив без особых усилий. Некоторые фактические навыки программирования не требуются, но могут пригодиться в случае возникновения проблем.

1.1 Необходимые условия для компиляции

Для компиляции EpicSim из исходного кода в UNIX-подобной системе вам потребуются следующие программы:

  • CMake;
  • GNU Make;
  • ISO C++ Compiler;
  • bison и flex;
  • gperf 3.0 или более поздней версии;
  • readline 4.2 или более поздней версии;
  • termcap;
  • bash.

1.2 Компиляция

Распакуйте архив tar и скомпилируйте исходный код с помощью команд:

  cd EpicSim
  mkdir build
  cd build
  cmake ..
  make install

После установки установите переменные среды с помощью команд:

  cd EpicSim
  #bash
  export PATH="target_installation_path/EpicSim/install/bin:$PATH"
  #cshell
  setenv PATH target_installation_path/EpicSim/install/bin:$PATH"

2. Hello, World!

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

  module main;
  initial
    begin
      $display("Hello, World");
      $finish ;
    end
  endmodule
  1. Организуйте, чтобы вышеуказанная программа была в текстовом файле hello.vl с помощью текстового редактора или скопируйте файл hello.vl из каталога примеров EpicSim.
  2. Скомпилируйте программу с помощью команды epicsim:
    % epicsim hello.vl
  3. Результаты этой компиляции помещаются в файл epicsim-run, и он выполняется:
    Hello, World

Скомпилированную программу также можно выполнить двумя шагами:

% epicsim-driver hello.vl -o epicsim-run 
% epicsim-vvp ./epicsim-run  
Hello, World

И вот оно, программа выполнена. Что произошло? На первом этапе команда epicsim-driver прочитала и интерпретировала исходный файл, а затем сгенерировала скомпилированный результат. Форма компиляции может быть выбрана с помощью переключателей командной строки, но форма по умолчанию — vvp, которая фактически запускается программой epicsim-vvp.

Команды epicsim-driver и epicsim-vvp — единственные команды, которые пользователи используют для вызова EpicSim. То, что на самом деле делает компилятор, контролируется переключателями командной строки. В нашем маленьком примере мы попросили компилятор скомпилировать исходную программу в форму vvp по умолчанию, которая, в свою очередь, выполняется программой epicsim-vvp.

3. Как работает EpicSim

Этот инструмент включает в себя парсер, который считывает Verilog (плюс расширения) и генерирует внутренний список соединений. Список соединений передаётся различным этапам обработки, которые преобразуют проект в более оптимальные или практические формы, а затем передаётся генератору кода для окончательного вывода. Этапы обработки и генератор кода выбираются с помощью переключателей командной строки.

3.1 Предварительная обработка

Предварительная обработка выполняется отдельной программой ivlpp. Эта программа реализует директивы include и define, создавая вывод, эквивалентный, но без директив. Результатом является один файл с директивами номеров строк, так что фактический компилятор видит только один входной файл. См. ivlpp/ivlpp.txt для получения дополнительной информации.

3.2 Анализ

Компилятор Verilog начинает с анализа файла исходного кода Verilog. Результатом анализа является список объектов Module в "pform". pform в основном является прямым отражением этапа компиляции (см. pform.h). Могут быть висячие ссылки, и ещё не ясно, какой модуль является корневым.

Можно увидеть удобочитаемую версию окончательного pform, используя флаг -P <path> для подкоманды ivl. Это заставит ivl вывести pform в... Файл с именем <path>. (Обратите внимание, что это обычно не делается, если только не производится отладка подкоманды ivl).

3.3 Детализация

Детализация берёт pform и генерирует список соединений. Драйвер выбирает (по запросу пользователя или случайному предположению) корневой модуль для детализации, разрешает ссылки и расширяет экземпляры, чтобы сформировать проект списка соединений (см. netlist.txt). Во время детализации выполняются окончательные семантические проверки и некоторые простые оптимизации. Список соединений включает в себя все поведенческие описания, а также вентили и провода.

Функция elaborate() выполняет детализацию.

Можно увидеть удобочитаемую версию окончательного, детализированного и оптимизированного списка соединений, используя флаг -N <path> для компилятора. Если детализация проходит успешно, окончательный список соединений (то есть после оптимизаций, но перед генерацией кода) будет записан в файл с именем <path>.

Детализация выполняется в два этапа:

  • Детализация областей действия и параметров;
  • Структурная и поведенческая детализация.

3.3.1 Детализация области действия

Детализация области действия проходит по pform, ища области действия и параметры. Создаётся дерево объектов NetScope и помещается в объект Design с корневым модулем, представленным корневым объектом NetScope. Большая часть кода для обработки этого шага содержится в файле elab_scope.cc.

В конце поведения elaborate_scope (после прохождения pform) выполняется сканирование дерева объектов NetScope для поиска назначений defparam, собранных во время детализации области действия. Именно тогда переопределения defparam применяются к параметрам.

3.3.2 Детализация списка соединений

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

3.4 Оптимизация

Оптимизация представляет собой набор этапов обработки, которые выполняют оптимизации, не зависящие от целевой технологии. Примерами некоторых полезных преобразований являются:

  • Устранение схем с нулевым эффектом;
  • Комбинационное сокращение;
  • Постоянное распространение.

Фактические функции, выполняемые, указываются в командной строке ivl с помощью флагов -F.

3.5 Генерация кода

Генерация кода берёт список соединений проекта и использует его для управления генератором кода (см. target.h). Это может потребовать преобразования проекта в соответствии с технологией.

Метод emit() класса Design выполняет этот шаг. Он проходит через элементы проекта, вызывая целевые функции по мере необходимости для генерации фактического вывода.

Пользователь выбирает генератор целевого кода с флагом -t в командной строке.

4 Неподдерживаемые конструкции

  • Блоки specify анализируются, но игнорируются в целом.
  • Trireg не поддерживается. Поддерживаются tri0 и tri1.
  • Примитивы tran, то есть tran, tranif1, tranif0, rtran, rtranif1 и rtranif0 не поддерживаются.
  • Управление событиями внутри неблокирующих назначений не поддерживается, например:
a <= @(posedge clk) b;

5 Часто используемые флаги/опции

-o <выходной файл>: выводит файл результатов компиляции. -f <командный файл>: считывает файлы с параметрами. -D <макрос=значение>: присваивает значение макросу. -s <корневой модуль>: устанавливает корневой модуль для детализации. T min|typ|max: выбирает тайминги (минимальный, типичный и максимальный), которые будут использоваться для моделирования. По умолчанию используется типичное значение.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/x-epic-EpicSim.git
git@api.gitlife.ru:oschina-mirror/x-epic-EpicSim.git
oschina-mirror
x-epic-EpicSim
x-epic-EpicSim
master