Введение
Стадия верификации разработки электронной схемы. Проверка формального соответствия является частью автоматизированного проектирования электронных устройств (EDA), широко используемой при разработке цифровых интегральных схем для формального доказательства того, что два представления схемы демонстрируют идентичное поведение.
Formal equivalence checking process is a part of electronic design automation (EDA), commonly used during the development of digital integrated circuits, to formally prove that two representations of a circuit design exhibit exactly the same behavior.
Проверка эквивалентности и уровни абстрагирования
В целом, существует широкий спектр возможных определений функциональной эквивалентности, охватывающих сравнения между различными уровнями абстракции и различной детализацией временных характеристик. Наиболее распространенным подходом является рассмотрение задачи эквивалентности машин, которая определяет две синхронные конструкторские спецификации функционально эквивалентными, если, такт за тактом, они генерируют абсолютно идентичную последовательность выходных сигналов для любой допустимой последовательности входных сигналов. Разработчики микропроцессоров используют проверку эквивалентности для сравнения функций, определенных для архитектуры набора команд (ISA), с реализацией на уровне передачи регистров (RTL), обеспечивая, чтобы любая программа, выполняемая на обеих моделях, вызывала идентичное обновление содержимого основной памяти. Это более общая задача. Процесс проектирования системы требует сравнения модели уровня транзакций (TLM), например, написанной на SystemC, с соответствующей спецификацией RTL. Такая проверка приобретает все большую актуальность в среде разработки систем на кристалле (SoC).
Эквивалентность синхронных машин
Поведение на уровне передачи регистров (RTL) цифровой микросхемы обычно описывается с помощью языка описания аппаратуры, такого как Verilog или VHDL. Это описание является золотой эталонной моделью, которая детально описывает, какие операции будут выполнены в течение какого тактового цикла и какими аппаратными блоками. После того, как разработчики логики, посредством моделирования и других методов верификации, подтвердили описание передачи регистров, схема обычно преобразуется в сетевой список (netlist) с помощью инструмента логического синтеза. Эквивалентность не следует путать с функциональной корректностью, которая должна быть установлена посредством функциональной верификации. Исходный сетевой список обычно подвергается ряду преобразований, таких как оптимизация, добавление структур для обеспечения тестируемости (DFT) и т.д., прежде чем он будет использован в качестве основы для размещения логических элементов в физической компоновке. Современное программное обеспечение для физического проектирования иногда также вносит существенные изменения (например, заменяет логические элементы эквивалентными, но с другой мощностью драйвера и/или площадью) в сетевой список. На каждом этапе очень сложной многоступенчатой процедуры исходная функциональность и поведение, описанное исходным кодом, должны быть сохранены. К моменту изготовления окончательной фотошаблона цифровой микросхемы, множество различных EDA-программ и, возможно, ручные правки изменяют сетевой список. В теории, инструмент логического синтеза гарантирует, что первый сетевой список логически эквивалентен исходному коду RTL. Все программы, которые впоследствии в процессе вносят изменения в сетевой список, также, в теории, обеспечивают, чтобы эти изменения были логически эквивалентны предыдущей версии. На практике программы содержат ошибки, и было бы серьезным риском предполагать, что все этапы от RTL до окончательного сетевого списка фотошаблона выполнены без ошибок. Кроме того, в реальной жизни дизайнеры часто вносят ручные изменения в сетевой список, обычно известные как Engineering Change Orders (ECO), тем самым внося дополнительный фактор ошибок. Поэтому, вместо того чтобы слепо полагаться на отсутствие ошибок, необходим этап верификации для проверки логической эквивалентности окончательной версии сетевого списка исходному описанию схемы (золотой эталонной модели). Исторически одним из способов проверки эквивалентности было повторное моделирование, с использованием окончательного сетевого списка, тестовых случаев, разработанных для верификации корректности RTL. Этот процесс называется логическим моделированием на уровне элементов (gate-level logic simulation). Однако проблема в том, что качество проверки не выше качества тестовых случаев. Кроме того, моделирование на уровне элементов печально известно своей низкой скоростью выполнения, что является серьезной проблемой, поскольку размер цифровых схем продолжает экспоненциально расти. Альтернативным решением является формальное доказательство того, что код RTL и синтезированный из него сетевой список имеют абсолютно одинаковое поведение во всех (релевантных) случаях. Этот процесс называется формальной проверкой эквивалентности и является задачей, изучаемой в более широкой области формальной верификации. Формальная проверка эквивалентности может быть выполнена между любыми двумя представлениями схемы: RTL ↔ netlist, netlist ↔ netlist или RTL ↔ RTL, хотя последний случай встречается редко по сравнению с первыми двумя. Как правило, инструмент формальной проверки эквивалентности также с высокой точностью указывает, в какой точке существует различие между двумя представлениями.
Обобщения
Проверка эквивалентности ретаймированных схем: Иногда полезно перемещать логику с одной стороны регистра на другую, что усложняет задачу проверки. Проверка последовательной эквивалентности: Иногда две машины совершенно различны на комбинационном уровне, но должны выдавать одинаковые выходные сигналы при одинаковых входных сигналах. Классическим примером являются две идентичные машины состояний с разными кодировками состояний. Поскольку эту задачу нельзя свести к комбинационной, требуются более общие методы. Эквивалентность программ, то есть проверка того, эквивалентны ли две чётко определённые программы, принимающие N входов и выдающие M выходов: концептуально, программное обеспечение можно представить в виде машины состояний (именно это делает комбинация компилятора, поскольку компьютер вместе с его памятью образуют очень большую машину состояний). Тогда, теоретически, различные методы проверки свойств могут гарантировать, что они выдают одинаковые результаты. Эта задача ещё сложнее, чем проверка последовательной эквивалентности, поскольку выходные данные двух программ могут появляться в разное время, но она решаема, и исследователи над ней работают.