Введение
Впервые знакомясь с 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.
- Аппаратная проверка: Для СИС и ПЛИС чипы необходимо испытать в реальной среде. Конструкция платы, драйверы устройств должны быть на своих местах.
Типичная последовательность разработки
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 для описания на этом уровне. [Архитектура системы.]
Static RAM |
Статическая оперативная память |
Port A |
Порт А |
Port B |
Порт В |
Port C |
Порт С |
Timer |
Таймер |
Рисунок : Высокоуровневая блок-схема I8155
Микроуровень (низкоуровневое описание)
На этом уровне разработчик описывает устройство каждого блока. Эти описания содержат детали машин состояний, счетчиков, мультиплексоров, декодеров и внутренних регистров. Для описания машин состояния можно использовать как специализированные средства, такие как StateCAD, так и Word. Вычерчивание диаграмм для интерфейсов всегда является хорошей идеей. На этот этап разработки уходит много времени.
Рисунок : Пример проектирования на низком уровне
RTL(УМП) кодирование
На этом этапе микроуровень преобразуется в код Verilog или VHDL, с использованием синтезируемых конструкций языка. Обычно мы используем редактор vim, но я предпочитаю conTEXT и Nedit, все это зависит от ваших предпочтений. Некоторые используют Emacs.
Verilog Code:
module addbit ( a , // первый вход b , // второй вход ci , // вход сигнала переноса sum , // выход суммы co // выход сигнала переноса ); //Декларирование входов input a; input b; input ci; //Декларирование выходов output sum; output co; //Типы данных портов wire a; wire b; wire ci; wire sum; wire co; //Вот отсюда идет код assign {co,sum} = a + b + ci; endmodule//Конец модуля добавления бита addbit
Симуляция
Симуляция - это процесс проверки функциональных характеристик модели на любом уровне абстракции. Мы используем симуляторы для изучения работы моделей аппаратуры: проверки соответствия RTL-кода функциональным требованиям спецификации - все ли блоки работают верно? Для проверки требуется написать тестовый код, который включает генерацию тактов, сброса и требуемых тестовых векторов. Простой пример теста для счетчика показан ниже. Обычно тратится 60-70% времени от времени отладки проекта.
Test case |
Тестовый случай |
Clock gen |
Генерация тактового импульса |
Reset logic |
Логический сброс |
Enable logic |
Логическое включение |
Counter |
Счетчик |
Monitor/Checker |
Монитор/устройство проверки |
Рисунок : Пример условий тестирования
Графики выходных сигналов, создаваемые симулятором, показывают, правильно ли работает устройство. Большинство симуляторов имеют встроенный просмотр графиков. По мере усложнения проекта, создаются тесты для самопроверки, содержащие векторы для сравнения выхода устройств с ожидаемыми значениями.
Есть другой вид симуляции, называемый симуляцией тайминга, производимый после синтеза или размещения и трассировки (P&R). Он учитывает задержки времени распространения сигнала и возможность работы с заданной тактовой частотой. Такую симуляцию часто называют SDF-симуляцией или симуляцией уровня логических вентилей.
Clock |
Тактовый импульс |
Reset |
Сброс |
enable |
Разрешающий сигнал |
Рисунок : Диаграммы для 4-разрядного счетчика
Синтез
Синтез - это процесс, в котором компилятор проекта или Synlify объединяет код RTL на языке Verilog или VHDL, целевую технологию и, ограничиваясь этим, производит технологические примитивы по описаниям RTL. При синтезе также, после получения связей между элементами, производится анализ таймингов, чтобы проверить заданное быстродействие устройства. (Важно отметить, что такой анализ утилитами синтеза делается только для логических вентилей, но не для задержки распространения сигналов в проводниках.) После синтеза обычно решаются еще две задачи, перед тем, как производить трассировку:
- Формальная верификация : Проверяет правильность преобразования RTL(УМП) в логические элементы.
- Вставка цепи сканирования : Вставляет цепь сканирования в корпус СИС.
HDL code |
Код HDL |
Tech lib |
Техническая библиотека |
Synthesis tool |
Инструмент синтеза |
Netlist |
Таблица соединений |
Рисунок : Последовательность синтеза
Размещение и трассировка
Список узлов (HDL). Это язык, используемый для описания цифровыхнетлист) в формате Verilog, произведенный утилитой синтеза, импортируется в утилиту P&R. Производится размещение всех логических элементов и регистров, проводятся цепи тактового сигнала и сброса. После этого блок является выполненным в смысле размещения и трассировки. На выходе P&R утилиты получается файл GDS, такие файлы используются при изготовлении заказных микросхем на производстве. Обычно утилиты трассировки используются для получения файлов SDF, которые обратно аннотируются относительно нетлистов из P&R в утилитах статического анализа подобных Prime Time, для анализа тайминга.
Up to 26 bonding pads of 125 |
До 26 контактных площадок из 125 |
Register file |
Файл регистрации |
Wiring |
Проводка |
Wiring channel |
Кабельный канал |
Shifter |
Устройство переключения регистров |
ALU |
АЛУ |
datapath |
Информационный канал |
Рисунок : Пример размещения микропроцессора
Рисунок : Триггер JK-типа
Проверка опытных образцов
После выпуска чипа из производства, его необходимо проверить в реальных рабочих условиях, перед запуском в массовую серию для рыночных поставок. Поскольку скорость симуляции RTL-кода очень невелика (несколько тактов в секунду), то всегда возможны ранее неучтенные ошибки в ходе реальной проверки.