Язык SVA представляет некое подмножество языка SystemVerilog, что дает возможность применять метод верификации на основе SVA без полного изучения SystemVerilog. Семантика языка SVA схожа с PSL, но есть и ряд новых, по сравнению с языком PSL, возможностей.
Структура языка SVA нагляднее всего представляется, как показано на рис. 3. В основе любого SystemVerilog утверждения лежат булевы выражения, которые принимают значения ИСТИНА или ЛОЖЬ. В приведенном выше примере SystemVerilog утверждения используется два булевых выражения: «(CMD != `IDLE)» и «CMD_ACCEPT».

Рис. 3. Структура языка SVA

Рис. 3. Структура языка SVA

Последовательности описывают поведение проекта во времени и строятся на основе булевых выражений. Выражение «(CMD != `IDLE)» – это простая последовательность, состоящая из одного выражения. Сложные последовательности строятся с использованием временных задержек, которые задаются с помощью оператора «##»:

Рис. 4. Пример последовательности

Рис. 4. Пример последовательности

Свойства определяют отношение между логическими выражениями и последовательностями. Для сигналов ADDR и CMD, изображенных на рис. 2 выполняется свойство: адрес ADDR не меняется, пока на шине CMD стоит команда.

 property stable_addr;
@(posedge Clk) disable iff (~reset)
((CMD != `IDLE) && !CMD_ACCEPT) |=> $stable(ADDR);
endproperty 		

Свойство с именем stable_addr осуществляет проверку по переднему фронту тактового сигнала («@(posedge Clk)»). При активном сигнале reset проверка не выполняется («disable iff (~reset)»). Проверка того, что адрес не меняется, должна происходить только по событию. В данном случае событием является наличие команды на шине CMD. Для этого используется операция импликации.
Пока к свойству не применена директива (assert, assume, cover, expect), проверка выполнения свойства не начинается.