Verilog

Этапы разработки. Введение.

Введение

Впервые знакомясь с Verilog, возможно вы захотите попробовать некоторые примеры и попытаться сконструировать что-то новенькое. Я привел последовательность инструментов, которую можно для этого использовать. Я лично ее опробовал и убедился, что для меня она работает достаточно хорошо. Здесь я взял только часть разработки входных каскадов и биты конструкции ПЛИС последовательности инструментов, что можно сделать, не тратя значительных средств на инструменты.

 

Различные стадии разработки специализированных микросхем и ПЛИС

  • Спецификации: Текстовый процессор типа Word, Kwriter, AbiWord, Open Office.
  • Высокоуровневое описание: Текстовый процессор типа Word, Kwriter, AbiWord, для вывода временной зависимости используйте такие инструменты, как waveformer, либо testbencher или Word, Open Office.
  • Низкоуровневое описание (микроуровень): Текстовый процессор типа Word, Kwriter, AbiWord, для вывода временной зависимости используйте такие инструменты, как waveformer, либо testbencher или Word.
  • RTL код: Vim, Emacs, conTEXT, HDL TurboWriter
  • Симуляция: Modelsim, VCS, Verilog-XL, Veriwell, Finsim, Icarus.
  • Синтез : Design Compiler, FPGA Compiler, Synplify, Leonardo Spectrum. Вы можете бесплатно скачать их у поставщиков ПЛИС, например, Altera и Xilinx.
  • Размещение и трассировка : Для ПЛИС используйте инструмент размещения и трассировки от поставщиков ПЛИС. Инструменты СИС требуют дорогих инструментов размещения и трассировки, таких как Apollo. Студенты могут использовать LASI, Magic.
  • Аппаратная проверка: Для СИС и ПЛИС чипы необходимо испытать в реальной среде. Конструкция платы, драйверы устройств должны быть на своих местах.

Типичная последовательность разработки

design_flow.gif

 

Specification

Техзадание

High level design

Проектирование архитектуры

Low level design

Проектирование низкого уровня

RTL coding

Кодирование УМП

Functional verification

Функциональная проверка

Logic synthesis

Логический синтез

Gate level simulation

Моделирование на уровне логических элементов

Place and route

Размещение и трассировка

Fabrication

Производство

Post Si validation

Проверка опытных образцов

Рисунок : Типовая схема проектирования 

Спецификация

На этой стадии определяются важные параметры системы. Простой пример может быть таким: счетчик 4 бит, есть синхронный сброс, с активным высоким уровнем. При подаче высокого уровня на сброс счетчик должен обнуляться. Вы можете использовать Microsoft Word, GNU AbiWord или OpenOffice для создания спецификации. [Автор, по существу, говорит об интерфейсе системы.]

Высокоуровневое описание

На этом этапе система разделяется на функциональные блоки и описание связей между ними. Предположим, мы хотим создать микропроцессор. С этой целью мы выделяем в нем регистры, арифметическое устройство, декодер операций, интерфейс памяти и т.д. Вы можете использовать Word, Kwriter, AbiWord или OpenOffice для описания на этом уровне. [Архитектура системы.]

 high_level.gif

Static RAM

Статическая оперативная память

Port A

Порт А

Port B

Порт В

Port C

Порт С

Timer

Таймер

Рисунок : Высокоуровневая блок-схема I8155

Микроуровень (низкоуровневое описание)

На этом уровне разработчик описывает устройство каждого блока. Эти описания содержат детали машин состояний, счетчиков, мультиплексоров, декодеров и внутренних регистров. Для описания машин состояния можно использовать как специализированные средства, такие как StateCAD, так и Word. Вычерчивание диаграмм для интерфейсов всегда является хорошей идеей. На этот этап разработки уходит много времени.

micro_design.gif

Рисунок : Пример проектирования на низком уровне

RTL(УМП) кодирование

На этом этапе микроуровень преобразуется в код Verilog или VHDL, с использованием синтезируемых конструкций языка. Обычно мы используем редактор vim, но я предпочитаю conTEXT и Nedit, все это зависит от ваших предпочтений. Некоторые используют Emacs.

Verilog Code:
  1. module addbit (
  2. a , // первый вход
  3. b , // второй вход
  4. ci , // вход сигнала переноса
  5. sum , // выход суммы
  6. co // выход сигнала переноса
  7. );
  8. //Декларирование входов
  9. input a;
  10. input b;
  11. input ci;
  12. //Декларирование выходов
  13. output sum;
  14. output co;
  15. //Типы данных портов
  16. wire a;
  17. wire b;
  18. wire ci;
  19. wire sum;
  20. wire co;
  21. //Вот отсюда идет код
  22. assign {co,sum} = a + b + ci;
  23.  
  24. endmodule//Конец модуля добавления бита addbit

Симуляция

Симуляция - это процесс проверки функциональных характеристик модели на любом уровне абстракции. Мы используем симуляторы для изучения работы моделей аппаратуры: проверки соответствия RTL-кода функциональным требованиям спецификации - все ли блоки работают верно? Для проверки требуется написать тестовый код, который включает генерацию тактов, сброса и требуемых тестовых векторов. Простой пример теста для счетчика показан ниже. Обычно тратится 60-70% времени от времени отладки проекта.

 vcount_tb.gif

Test case

Тестовый случай

Clock gen

Генерация тактового импульса

Reset logic

Логический сброс

Enable logic

Логическое включение

Counter

Счетчик

Monitor/Checker

Монитор/устройство проверки

 Рисунок : Пример условий тестирования

Графики выходных сигналов, создаваемые симулятором, показывают, правильно ли работает устройство. Большинство симуляторов имеют встроенный просмотр графиков. По мере усложнения проекта, создаются тесты для самопроверки, содержащие векторы для сравнения выхода устройств с ожидаемыми значениями. 

Есть другой вид симуляции, называемый симуляцией тайминга, производимый после синтеза или размещения и трассировки (P&R). Он учитывает задержки времени распространения сигнала и возможность работы с заданной тактовой частотой. Такую симуляцию часто называют SDF-симуляцией или симуляцией уровня логических вентилей.

vcount_sim.gif

Clock

Тактовый импульс

Reset

Сброс

enable

Разрешающий сигнал

Рисунок : Диаграммы для 4-разрядного счетчика

Синтез

Синтез - это процесс, в котором компилятор проекта или Synlify объединяет код RTL на языке Verilog или VHDL, целевую технологию и, ограничиваясь этим, производит технологические примитивы по описаниям RTL. При синтезе также, после получения связей между элементами, производится анализ таймингов, чтобы проверить заданное быстродействие устройства. (Важно отметить, что такой анализ утилитами синтеза делается только для логических вентилей, но не для задержки распространения сигналов в проводниках.) После синтеза обычно решаются еще две задачи, перед тем, как производить трассировку:

  • Формальная верификация : Проверяет правильность преобразования RTL(УМП) в логические элементы.
  • Вставка цепи сканирования : Вставляет цепь сканирования в корпус СИС.

 syn_flow.gif

HDL code

Код HDL

Tech lib

Техническая библиотека

Synthesis tool

Инструмент синтеза

Netlist

Таблица соединений

Рисунок : Последовательность синтеза

Размещение и трассировка

Список узлов (HDL). Это язык, используемый для описания цифровыхнетлист) в формате Verilog, произведенный утилитой синтеза, импортируется в утилиту P&R. Производится размещение всех логических элементов и регистров, проводятся цепи тактового сигнала и сброса. После этого блок является выполненным в смысле размещения и трассировки. На выходе P&R утилиты получается файл GDS, такие файлы используются при изготовлении заказных микросхем на производстве. Обычно утилиты трассировки используются для получения файлов SDF, которые обратно аннотируются относительно нетлистов из P&R в утилитах статического анализа подобных Prime Time, для анализа тайминга.

placement.gif

Up to 26 bonding pads of 125

До 26 контактных площадок из 125

Register file

Файл регистрации

Wiring

Проводка

Wiring channel

Кабельный канал

Shifter

Устройство переключения регистров

ALU

АЛУ

datapath

Информационный канал

Рисунок : Пример размещения микропроцессора

route.gif

Рисунок : Триггер JK-типа

Проверка опытных образцов

После выпуска чипа из производства, его необходимо проверить в реальных рабочих условиях, перед запуском в массовую серию для рыночных поставок. Поскольку скорость симуляции RTL-кода очень невелика (несколько тактов в секунду), то всегда возможны ранее неучтенные ошибки в ходе реальной проверки.