С ростом сложности интегральных схем появилась необходимость во все более полном моделировании разрабатываемых микросхем перед их передачей в производство. Для решения этой задачи были разработаны языки описания аппаратуры (HardwareDescriptionLanguages, HDL). Их основным назначением было моделирование процессов, происходящих в цифровых микросхемах, на различных уровнях. При этом большое количество ошибок, проистекающих из-за некорректного планирования или допущенных конструктивных промахов, оказалось возможным идентифицировать уже на этапе моделирования, что существенно дешевле, чем исправлять ошибки путем повторного изготовления полупроводниковой пластины. Поскольку с уменьшением технологических норм стоимость технологической подготовки производства полупроводниковых микросхем существенно растет, их предварительное моделирование становится все более и более актуальным. Также эффективным является прототипирование цифровых устройств с помощью программируемых логических интегральных схем (ПЛИС).
Несмотря на то, что главным назначением HDL является моделирование цифровых устройств, в них было выделено синтезируемое подмножество – набор конструкций, которые могут быть преобразованы в список связей цифровых компонентов и далее в топологическое представление интегральной микросхемы или в конфигурационный поток для программирования ПЛИС. Кроме того, различные реализации HDL добавляют к стандартам специфические расширения, зависящие от конкретного производителя. Эти расширения в общем случае не являются переносимыми, поэтому на них следует обращать внимание при создании HDL-описаний, которые предполагается переносить в другие системы проектирования. Соотношение между подмножествами языков описания аппаратуры можно представить следующим рисунком:
Рис. 2.1 Соотношение между подмножествами конструкций
в языках описания аппаратуры
В настоящее время наиболее распространенными являются языки описания аппаратуры VHDL и VerilogHDL (Verilog). Они имеют одинаковые области применения, схожи по основным характеристикам, и отличаются в основном грамматикой. В целом можно сказать, что модули на Verilog являются более компактными, чем аналогичные модули на VHDL, однако это является следствием большей структурированности VHDL и более строгих требований к контролю типов и форматам описания основных синтезируемых конструкций. При этом алгоритмы синтеза схемотехнического представления цифровых систем являются настолько схожими по характеристикам, что не имеет практического смысла переходить с одного языка описания аппаратуры на другой, рассчитывая на улучшение параметров синтезированной схемы только вследствие более эффективной программы синтеза. В то же время, синтезаторы различных производителей могут давать различные результаты для относительно сложных цифровых узлов.
Стандарт на язык описания аппаратуры VHDL содержится в документе IEEE 1076. В настоящий момент основной для проектирования является версия стандарта от 2000 года.
При разработке цифровых систем используется понятие уровней абстрагирования. Их смысл состоит в том, что при смене технологических процессов, полупроводниковых материалов, схемотехнических решений для элементарных цифровых узлов и прочих низкоуровневых деталей реализации было бы нежелательным терять ранее полученные результаты, касающиеся общей архитектуры системы и порядка соединения компонентов. Поэтому изменения в цифровые системы вносятся на различных уровнях, так что детали реализации конкретных цифровых узлов (например, триггера или сумматора) скрыты от разработчика общей структуры цифрового устройства. Впоследствии, если будет сконструирован более эффективный вариант триггера, все схемы, созданные с использованием такого компонента, могут быть использованы без необходимости их коренного пересмотра.
Обычно говорят о следующих уровнях абстрагирования:
1. Поведенческий (behaviorallevel)
2. Уровень регистровых передач (RTL, registertransferlevel)
3. Вентильный уровень (gatelevel)
4. Топологический уровень (cellslevel)
5. Физический уровень (switch/masklevel)
Описание на поведенческом уровне является наиболее отдаленным от конкретной технической реализации и представляет цифровые модули в виде «черных ящиков» с заданной функциональностью. Языки описания аппаратуры предоставляют достаточно средств для работы на этом уровне, что обеспечивает высокую производительность труда разработчика цифровых устройств.
Уровень регистровых передач подразумевает представление цифрового устройства в виде схемы соединения регистров и комбинаторной логики.
На вентильном уровне производится детализация схемы до базовых логических элементов (вентилей). Таким образом, комбинаторные выражения, представляемые на предыдущем уровне в общем виде, получают развернутую форму, что позволяет определить требуемую сложность схемы, уточнить занимаемую ей площадь и задержки распространения сигналов.
На топологическом уровне цифровое устройство представляется в виде координат расположения отдельных фрагментов (ячеек), соответствующих имеющимся в технологической библиотеке компонентам.
Физический уровень содержит сведения о размещении и параметрах физических устройств (транзисторов), непосредственно реализующих необходимые функции.
Проектирование с использованием языков описания аппаратуры обычно производится с перекрытием поведенческого уровня и уровня регистровых передач. Это связано с тем, что конструкции, описываемые на поведенческом уровне, могут оказаться слишком неэффективными для используемой аппаратной базы именно в силу максимального абстрагирования (дистанцирования) от деталей реализации. Использование RTL-представления позволяет конкретизировать пожелания разработчика к способу реализации наиболее ответственных узлов и снизить степень влияния алгоритмов синтеза на получаемый результат.
Близко к RTL-представлению находится также структурный подход к описанию схем, при котором схема описывается с помощью указания цифровых элементов из конкретной библиотеки компонентов и схемы их соединения. Сравним следующие способы представления элемента 2И на VHDL.
out_с <= in_aandin_b;
Данный текст транслируется программой синтеза с получением требуемого цифрового узла. Способ реализации и используемые для этого компоненты автоматически определяются средствами синтеза, используя в качестве входной информации выражение на языке описания аппаратуры. Такой подход к получению компонентов в англоязычной литературе обозначается как inference.
Другой подход основан на использовании ссылки на библиотечный компонент.
and2_inst0 : and2 port map (a =>in_a, b =>in_b, c =>out_c);
Приведенное описание служит указанием на то, что требуется использовать некоторый модуль and2, имеющий входы a и b, а также выход c. Детали реализации такого модуля должны быть представлены в библиотеке, поставляемой фирмой-производителем САПР, а выводы конкретного экземпляра, названного and2_inst0, должны быть подключены к цепям in_a, in_b, out_c соответственно. Поскольку создается экземпляр («пример», instance) библиотечного компонента, подход обозначается как instantiation.
Сравнение представленных подходов делает очевидным тот факт, что использование instantiated-компонентов сопряжено с более сложным форматом их описания и потенциальными проблемами отладки схемы, поскольку никакого анализа поведения и логической корректности подключения выводов не производится. Разработчик, используя instantiation, должен представлять себе дальнейшее поведение создаваемой им схемы, и ответственен за правильное подключение внешних сигналов. Напротив, средства синтеза в процессе создания inferred-компонентов способны выбрать корректное с точки зрения схемотехники решение, основываясь на достаточно абстрактном описании желаемого результата.
Развитие средств автоматического проектирования делает доступным автоматический синтез эффективных схем для все большего числа цифровых узлов. В настоящее время исключениями для ПЛИС, требующими использования instantiation, являются в основном специфичные компоненты, такие как буферы специального назначения, схемы формирования тактового сигнала, скоростные приемопередатчики и прочие компоненты, которые не могут быть представлены в виде HDL-описания. Кроме того, в ситуациях, когда различные настройки программ синтеза дают отличающиеся результаты, не устраивающие опытного разработчика, он имеет возможность ликвидировать эту неопределенность, непосредственно указав на библиотечные компоненты, с помощью которых он хотел бы реализовать требуемый фрагмент цифровой системы. Наконец, сборка цифровой системы на верхнем уровне иерархии также может быть произведена путем перечисления экземпляров компонентов и порядка их соединения. Такое описание является альтернативой графическому представлению схемы на верхнем уровне и в ряде случаев может оказаться более удобным, поскольку не зависит от конкретной версии редактора графического представления схем.