В проектировании интегральных схем аппаратная эмуляция — это процесс имитации поведения одной или нескольких частей оборудования (обычно проектируемой системы) с помощью другой части оборудования, обычно специальной системы эмуляции. Модель эмуляции обычно основана на исходном коде языка описания оборудования (например, Verilog ), который компилируется в формат, используемый системой эмуляции. Целью обычно является отладка и функциональная проверка проектируемой системы. Часто эмулятор достаточно быстр, чтобы его можно было подключить к работающей целевой системе вместо еще не построенного чипа, поэтому всю систему можно отладить с помощью реальных данных. Это особый случай внутрисхемной эмуляции .
Иногда аппаратную эмуляцию можно спутать с аппаратными устройствами, такими как платы расширения с аппаратными процессорами, которые поддерживают функции программной эмуляции, например, старые дочерние платы с чипами x86, позволяющие запускать операционные системы x86 на материнских платах с различными семействами процессоров.
Большая часть повторных спинов и степпингов кремниевых интегральных схем , по крайней мере частично, вызвана функциональными ошибками и багами, непреднамеренно внесенными на этапе RTL процесса проектирования. Таким образом, комплексная функциональная проверка является ключом к снижению затрат на разработку и своевременной доставке продукта. Функциональная проверка проекта чаще всего выполняется с использованием логического моделирования и/или прототипирования на программируемых пользователем вентильных матрицах (FPGA). У каждого из них есть свои преимущества и недостатки, и часто используются оба. Логическое моделирование является простым, точным, гибким и недорогим. Однако моделирование часто недостаточно быстро для больших проектов и почти всегда слишком медленно для запуска прикладного программного обеспечения на аппаратном проекте. Прототипы на основе FPGA быстры и недороги, но время, необходимое для внедрения большого проекта в несколько FPGA, может быть очень долгим и подвержено ошибкам. Изменения для исправления недостатков проекта также требуют много времени для внедрения и могут потребовать изменения разводки платы. С традиционными инструментами поставщиков прототипы FPGA имеют мало возможностей отладки, зондирование сигналов внутри FPGA в реальном времени очень сложно, а перекомпиляция FPGA для перемещения зондов занимает слишком много времени. Это меняется с появлением более продвинутых инструментов отладки прототипов FPGA [1] , которые снимают ограничения на видимость сигнала. Обычный компромисс заключается в использовании моделирования на ранних этапах процесса проверки, когда ошибки и исправления встречаются часто, и прототипирования в конце цикла разработки, когда проект в основном завершен и требуется скорость для получения достаточного тестирования для выявления любых оставшихся ошибок на уровне системы. Прототипирование FPGA также популярно для тестирования программного обеспечения.
Ускорение моделирования может в некоторой степени устранить недостатки производительности моделирования. Здесь проект отображается в аппаратном ускорителе для работы намного быстрее, а тестовый стенд (и любой код поведенческого дизайна) продолжает работать на симуляторе на рабочей станции. Канал с высокой пропускной способностью и низкой задержкой соединяет рабочую станцию с ускорителем для обмена данными сигналов между тестовым стендом и проектом. По закону Амдаля , самое медленное устройство в цепочке будет определять достижимую скорость. Обычно это тестовый стенд в симуляторе. При очень эффективном тестовом стенде (написанном на C или на основе транзакций) канал может стать узким местом. В некоторых случаях тестовый стенд на уровне транзакций способен передавать столько же данных в эмулируемый проект, сколько и «живой» стимул.
Внутрисхемная эмуляция несколько улучшает время реализации прототипирования FPGA и обеспечивает комплексную, эффективную отладочную возможность. Эмуляция делает это за счет скорости работы и высокой стоимости ($1M+) по сравнению с прототипами FPGA ($75K). [ по мнению кого? ] Если посмотреть на эмуляцию с другой стороны, она улучшает производительность ускорения, заменяя «живой» стимул на имитируемый испытательный стенд. Этот стимул может исходить от целевой системы (разрабатываемого продукта) или от испытательного оборудования. При скорости в 10 000–100 000 раз превышающей скорость моделирования, эмуляция позволяет тестировать прикладное программное обеспечение, при этом по-прежнему обеспечивая комплексную среду отладки оборудования.
Стоит отметить, что моделирование и прототипирование подразумевают два разных стиля выполнения. Моделирование выполняет код RTL последовательно, тогда как прототип выполняется полностью параллельно. Это приводит к различиям в отладке. В моделировании:
С прототипом:
Ускорение и эмуляция больше похожи на прототипирование и кремний с точки зрения выполнения RTL и отладки, поскольку вся конструкция выполняется одновременно, как и в кремнии. Поскольку для ускорения моделирования и внутрисхемной эмуляции часто используется одно и то же оборудование, эти системы обеспечивают смесь этих двух совершенно разных стилей отладки.
Высокопроизводительные аппаратные эмуляторы предоставляют среду отладки со многими функциями, которые можно найти в логических симуляторах, а в некоторых случаях даже превосходят их возможности отладки:
Другое различие между симуляцией и ускорением и эмуляцией является следствием использования ускорителями аппаратного обеспечения для реализации – у них есть только два логических состояния – действуя так, как будет действовать кремний при изготовлении. Это подразумевает:
Эти задачи эффективно выполняются во время логического моделирования или с помощью инструмента статического временного анализа .
Ключевое традиционное различие между эмулятором и системой прототипирования FPGA заключается в том, что эмулятор обеспечивает богатую среду отладки, в то время как система прототипирования имеет мало или вообще не имеет отладочных возможностей и в основном используется после отладки проекта для создания нескольких копий для системного анализа и разработки программного обеспечения. Появляются новые инструменты, которые обеспечивают полную видимость сигнала RTL с небольшим воздействием LUT FPGA, обеспечивают большую глубину захвата и обеспечивают анализ нескольких чипов и тактовой области, чтобы обеспечить эффективную отладку, сравнимую с эмулятором. [2]