PSL/A Practical Introduction to PSL/Introduction/ru
- 1. Introduction (en)
- 2. Basic Temporal Properties (en)
- 3. Some Philosophy (en)
- 4. Weak vs. Strong Temporal Operators (en)
- 5. SERE Style (en)
PSL - это язык спецификации свойств. Это средство выразить свойства проекта и, в дополнение, показать, как программы верификации должны использовать эти свойства. Например, свойство может быть утверждение - это означает, что проект в спорных ситуациях должен вести себя так, как описано в свойстве. Свойство, также, может быть предположение - это означает, что проект в спорных ситуациях ожидает входных данных, чтобы вести себя так, как описано в свойстве. PSL, также, предоставляет другие директивы, например средства определения сценариев, которые должны быть покрыты.
PSL гораздо больше, чем просто язык утверждений. Тем не менее, утверждения - это сердце PSL, и многие пользователи PSL используют его только из-за возможностей утверждений. Таким образом, перед тем как мы разберем весь язык, пару слов о том, что на самом деле дают нам эти утверждения. Многие языки программирования (например Java) и языки описания аппаратуры (например VHDL) содержат утверждающие конструкции. Утверждающие конструкции предоставляются пользователю возможность во время выполнения или во время моделирования, что нужное условие выполняется и выдать сообщение об ошибке или предупреждении, если оно не выполняется. PSL утверждения похожи по своей сущности, но куда как более масштабные. В дополнение к простым Булевым условиям, PSL условия могут содержат временные операторы, которые разрешают пользователю описывать отношения по времени. Например, PSL утверждение assert always (a -> next b);
показывает, что когда бы сигнал а не принимал значение, сигнал b должен принять значение в следующем цикле.
Java и VHDL утверждения встраиваются в исполняемый код, и должны быть проверены, когда достигается точка выполнения,на которой они появляются. PSL утверждения, с другой стороны, типично располагаются отдельно, и делают утверждения о коде, не являясь его частью. (Пока некоторые программы поддерживают встроенные PSL утверждения, встроенное утверждение по-прежнему не является частью кода, в том смысле, что нет возможности поместить PSL утверждение внутрь исполняемого утверждения. Встроенные PSL утверждения располагаются рядом с кодом и они определены, но не являются частью кода.)
PSL был создан, чтобы быть математически строгим, с результатом таким, что спецификация PSL точная и автоматически русифицируемая. Таким образом, аппаратная спецификация написанная на PSL читается машиной и может использоваться как вход для программ верификации. В дополнение, PSL был создам для легкого чтения и записи, таким образом PSL спецификация читается человеком и используется для документации, в целях уточнения спорных моментов из английской спецификации.
Окончательное определение PSL можно найти в IEEE Std 1850-2005. В этой книге, нашей целью является получить более спокойное, легко воспринимаемое представление языка, а также углубиться в изучение его тонкостей. Мы покроем весь PSL, а также, для полноты, включим BNF и формальную семантику, в качестве приложений.
Структура языка PSL базируется на четырех слоях - Булевый слой, временной слой, слой верификации и слой моделирования - и представляются в нескольких вариантах, что влияет на синтаксис в ограниченной форме. Четыре слоя это:
- Булевый слой состоит из Булевых выражений, это выражения, значения которого могут быть правда или ложь. Например,
a
Булево выражение. PSL интерпретирует высокий уровень сигнала, как правда, аa
низкий уровень, как ложь, независимо от того, какой уровень для сигнала, считается активным. Таким образом, если сигналa
активный-высокий, Булево выражениеa
имеет значение правда, когдаa
утверждается, и ложь, когда не утверждается. А если сигнал b активный-низкий, Булево выражениеb
принимает значение ложь, когдаb
утверждается, и правда, когда не утверждается. Далее в этой книге, мы будем считать, что все сигналы имеют активный высокий уровень, если не указано иначе. Конечно, проще принять активный низкий уровень для примера свойств за счет перехода a из!a
и наоборот. Булевый слой состоит из Булевых выражений определенного варианта. Например,a && !b
- это Булево выражение в варианте Verilog, означает, чтоa
утверждается, аb
нет,a[31:0]==b[31:0]
- это Булево выражение варианта Verilog, означает, что 32-х битные векторыa[31:0]
иb[31:0]
эквивалентны, иaddr1[127:0]==128’b0
- это булево выражение варианта Verilog, означает, что 128-и битный векторaddr1[127:0]
имеет нулевое значение.
- Временной слой состоит из временных свойств, которые описывают взаимоотношения между Булевыми выражениями по времени. Например,
always (req -> next ack)
временное свойство, выражающее, что когда бы ни (always
) не утверждался сигналreq
, далее (->
) в следующем цикле (next
), утверждается сигналack
.
- слой верификации состоит из директив, которые описывают, как временные свойства должны использоваться программами верификации. Например, утверждение
always (req -> next ack);
- это директива верификации, которая говорит программе верифицировать, что свойствоalways (req -> next ack);
выполняется. Другая директива верификации включает инструкцию предположения, а не верификации, того что конкретное временное свойство выполняется или определяет критерий зоны покрытия. Слой верификации также предоставляет возможность группировать PSL утверждения в verification units.
vunit example1 { assert never (a and b); } |
vunit example1 { assert never (a && b); } |
(i) VHDL вариант | (ii) Verilog вариант |
---|---|
Рис. 1.1: Один и тот же vunit в двух различных вариантах |
- Слой моделирования предоставляет возможности моделирования поведения входов проекта, и декларировать и передавать поведение вспомогательным сигналам и переменным. Эта часть слоя моделирования - просто подмножество какого-либо варианта. Например, декларация вспомогательных сигналов в варианте Verilog предполагает синтаксис Verilog.
Пять вариантов PSL соответствуют языкам описания аппаратуры Verilog и VHDL, языку GDL, языку описания среды RuleBase, и SystemVerilog и SystemC. Т.к. все варианты имеют некоторое влияние на синтаксис - например, это влияет на синтаксис Булевых выражений - большинство языков имеют схожий синтаксис.
Рисунок 1.1 показывает спецификацию PSL для VHDL и Verilog вариантов. В каждом случаи, в спецификации говориться, что сигналы a и b взаимоисключающиеся. Пока PSL пользователь не проводит много времени, думая о границах между слоями, мы будем указывать на них в первом примере. Булевы выражения a and b
в VHDL варианте и a && b
в Verilog варианте, принадлежать Булевому слою и описывают ситуацию, в которой оба сигнала a
и b
утверждаются. Ключевое слово never относиться к временному слою и показывает, что Булево выражение не ожидает своего выполнения в цикле. Вместе, ключево слово never и Булевы выражения a and b
в VHDL варианте или a && b
в Verilog варианте, формируют свойство. Ключевое слово assert принадлежит слою верификации и инструктирует программу верификации на проверку того, что свойство выполняется в ходе тестирования проекта. Ключевое слово vunit также принадлежит слою верификации и представляет имя юнита верификации (example1
). Слой, моделирования в данном примере, не используется.
Далее в книге, и\мы будем использовать Verilog вариант, если не указано иное. В основном мы сфокусируем наше внимание на временном слое, который является сердцем языка, и будем широко использовать Булевый слой. В глава 10 кратко обговорим различые аспекты Булевого слоя, слоя моделирования и слоя верификации, не затронутые в других главах. Также, мы сделаем предположение, что ‘true
был определен, как 1’b1
(т.е. Verilog выражение, которое выполняется в каждом цикле) и, что ‘false
опреден, как 1’b0
(т.е. Verilog выражение, которое не выполняется).