PSL/A Practical Introduction to PSL/Introduction/ru — различия между версиями
Valentin (обсуждение | вклад) |
Valentin (обсуждение | вклад) |
||
Строка 70: | Строка 70: | ||
* ''Булевый слой'' состоит из Булевых выражений, это выражения, значения которого могут быть правда или ложь. Например, <code>a</code> Булево выражение. PSL интерпретирует высокий уровень сигнала, как правда, а <code>a</code> низкий уровень, как ложь, независимо от того, какой уровень для сигнала, считается активным. Таким образом, если сигнал <code>a</code> активный-высокий, Булево выражение <code>a</code> имеет значение правда, когда <code>a</code> утверждается, и ложь, когда не утверждается. А если сигнал b активный-низкий, Булево выражение <code>b</code> принимает значение ложь, когда <code>b</code> утверждается, и правда, когда не утверждается. Далее в этой книге, мы будем считать, что все сигналы имеют активный высокий уровень, если не указано иначе. Конечно, проще принять активный низкий уровень для примера свойств за счет перехода a из <code>!a</code> и наоборот. Булевый слой состоит из Булевых выражений определенного варианта. Например, <code>a && !b</code> - это Булево выражение в варианте Verilog, означает, что <code>a</code> утверждается, а <code>b</code> нет, <code>a[31:0]==b[31:0]</code> - это Булево выражение варианта Verilog, означает, что 32-х битные векторы <code>a[31:0]</code> и <code>b[31:0]</code> эквивалентны, и <code>addr1[127:0]==128’b0</code> - это булево выражение варианта Verilog, означает, что 128-и битный вектор <code>addr1[127:0]</code> имеет нулевое значение. | * ''Булевый слой'' состоит из Булевых выражений, это выражения, значения которого могут быть правда или ложь. Например, <code>a</code> Булево выражение. PSL интерпретирует высокий уровень сигнала, как правда, а <code>a</code> низкий уровень, как ложь, независимо от того, какой уровень для сигнала, считается активным. Таким образом, если сигнал <code>a</code> активный-высокий, Булево выражение <code>a</code> имеет значение правда, когда <code>a</code> утверждается, и ложь, когда не утверждается. А если сигнал b активный-низкий, Булево выражение <code>b</code> принимает значение ложь, когда <code>b</code> утверждается, и правда, когда не утверждается. Далее в этой книге, мы будем считать, что все сигналы имеют активный высокий уровень, если не указано иначе. Конечно, проще принять активный низкий уровень для примера свойств за счет перехода a из <code>!a</code> и наоборот. Булевый слой состоит из Булевых выражений определенного варианта. Например, <code>a && !b</code> - это Булево выражение в варианте Verilog, означает, что <code>a</code> утверждается, а <code>b</code> нет, <code>a[31:0]==b[31:0]</code> - это Булево выражение варианта Verilog, означает, что 32-х битные векторы <code>a[31:0]</code> и <code>b[31:0]</code> эквивалентны, и <code>addr1[127:0]==128’b0</code> - это булево выражение варианта Verilog, означает, что 128-и битный вектор <code>addr1[127:0]</code> имеет нулевое значение. | ||
+ | <!-- | ||
* The ''temporal layer'' consists of temporal properties which describe the relationships between Boolean expressions over time. For example, <code>always (req -> next ack)</code> is a temporal property expressing the fact that whenever (<code>always</code>) signal <code>req</code> is asserted, then (<code>-></code>) at the next cycle (<code>next</code>), signal ack is asserted. | * The ''temporal layer'' consists of temporal properties which describe the relationships between Boolean expressions over time. For example, <code>always (req -> next ack)</code> is a temporal property expressing the fact that whenever (<code>always</code>) signal <code>req</code> is asserted, then (<code>-></code>) at the next cycle (<code>next</code>), signal ack is asserted. | ||
+ | --> | ||
+ | * ''Временной слой'' состоит из временных свойств, которые описывают взаимоотношения между Булевыми выражениями по времени. Например, <code>always (req -> next ack)</code> временное свойство, выражающее, что когда бы ни (<code>always</code>) не утверждался сигнал <code>req</code>, далее (<code>-></code>) в следующем цикле (<code>next</code>), утверждается сигнал <code>ack</code>. | ||
+ | <!-- | ||
* The ''verification layer'' consists of directives which describe how the temporal properties should be used by verification tools. For example, assert <code>always (req -> next ack);</code> is a verification directive that tells the tools to verify that the property <code>always (req -> next ack)</code> holds. Other verification directives include an instruction to assume, rather than verify, that a particular temporal property holds, or to specify coverage criteria. The verification layer also provides a means to group PSL statements into ''verification units''. | * The ''verification layer'' consists of directives which describe how the temporal properties should be used by verification tools. For example, assert <code>always (req -> next ack);</code> is a verification directive that tells the tools to verify that the property <code>always (req -> next ack)</code> holds. Other verification directives include an instruction to assume, rather than verify, that a particular temporal property holds, or to specify coverage criteria. The verification layer also provides a means to group PSL statements into ''verification units''. | ||
+ | --> | ||
+ | * слой верификации состоит из директив, которые описывают, как временные свойства должны использоваться программами верификации. Например, утверждение <code>always (req -> next ack);</code> - это директива верификации, которая говорит программе верифицировать, что свойство <code>always (req -> next ack);</code> выполняется. Другая директива верификации включает инструкцию предположения, а не верификации, того что конкретное временное свойство выполняется или определяет критерий зоны покрытия. Слой верификации также предоставляет возможность группировать PSL утверждения в ''verification units''. | ||
Строка 88: | Строка 94: | ||
</source> | </source> | ||
|- | |- | ||
− | ! (i) VHDL | + | ! (i) VHDL вариант |
− | ! (ii) Verilog | + | ! (ii) Verilog вариант |
|- | |- | ||
− | !colspan=2| | + | !colspan=2| Рис. 1.1: Один и тот же vunit в двух различных вариантах |
|} | |} | ||
+ | <!-- | ||
* The ''modeling layer'' provides a means to model behavior of design inputs, and to declare and give behavior to auxiliary signals and variables. This part of the modeling layer is simply a subset of the underlying flavor. For instance, the declaration of auxiliary signals in the Verilog flavor follows Verilog syntax. | * The ''modeling layer'' provides a means to model behavior of design inputs, and to declare and give behavior to auxiliary signals and variables. This part of the modeling layer is simply a subset of the underlying flavor. For instance, the declaration of auxiliary signals in the Verilog flavor follows Verilog syntax. | ||
+ | --> | ||
+ | * ''Слой моделирования'' предоставляет возможности моделирования поведения входов проекта, и декларировать и передавать поведение вспомогательным сигналам и переменным. Эта часть слоя моделирования - просто подмножество какого-либо варианта. Например, декларация вспомогательных сигналов в варианте Verilog предполагает синтаксис Verilog. | ||
+ | <!-- | ||
The five flavors of PSL correspond to the hardware description languages | The five flavors of PSL correspond to the hardware description languages | ||
Verilog and VHDL, to the language GDL, the environment description language of the RuleBase model checker, and to SystemVerilog and SystemC. | Verilog and VHDL, to the language GDL, the environment description language of the RuleBase model checker, and to SystemVerilog and SystemC. | ||
Строка 102: | Строка 112: | ||
the syntax of Boolean expressions – the vast majority of the language is the | the syntax of Boolean expressions – the vast majority of the language is the | ||
same across flavors. | same across flavors. | ||
+ | --> | ||
+ | Пять вариантов PSL соответствуют языкам описания аппаратуры Verilog и VHDL, языку GDL, языку описания среды RuleBase, и SystemVerilog и SystemC. Т.к. все варианты имеют некоторое влияние на синтаксис - например, это влияет на синтаксис Булевых выражений - большинство языков имеют схожий синтаксис. | ||
+ | <!-- | ||
Figure 1.1 shows a PSL specification in the VHDL and Verilog flavors. In | Figure 1.1 shows a PSL specification in the VHDL and Verilog flavors. In | ||
each case, the specification states that signals a and b are mutually exclusive. | each case, the specification states that signals a and b are mutually exclusive. | ||
Строка 118: | Строка 131: | ||
name of the verification unit (<code>example1</code>). The modeling layer is not used in | name of the verification unit (<code>example1</code>). The modeling layer is not used in | ||
this example. | this example. | ||
+ | --> | ||
+ | Рисунок 1.1 показывает спецификацию PSL для VHDL и Verilog вариантов. В каждом случаи, в спецификации говориться, что сигналы a и b взаимоисключающиеся. Пока PSL пользователь не проводит много времени, думая о границах между слоями, мы будем указывать на них в первом примере. Булевы выражения <code>a and b</code> в VHDL варианте и <code>a && b</code> в Verilog варианте, принадлежать Булевому слою и описывают ситуацию, в которой оба сигнала <code>a</code> и <code>b</code> утверждаются. Ключевое слово never относиться к временному слою и показывает, что Булево выражение не ожидает своего выполнения в цикле. Вместе, ключево слово never и Булевы выражения <code>a and b</code> в VHDL варианте или <code>a && b</code> в Verilog варианте, формируют ''свойство''. Ключевое слово assert принадлежит слою верификации и инструктирует программу верификации на проверку того, что свойство выполняется в ходе тестирования проекта. Ключевое слово vunit также принадлежит слою верификации и представляет имя юнита верификации (<code>example1</code>). Слой, моделирования в данном примере, не используется. | ||
+ | <!-- | ||
In the remainder of this book we use the Verilog flavor unless stated otherwise. We focus almost exclusively on the temporal layer, which is the heart of | In the remainder of this book we use the Verilog flavor unless stated otherwise. We focus almost exclusively on the temporal layer, which is the heart of | ||
the language and makes extensive use of the Boolean layer. Chapter 10 briefly | the language and makes extensive use of the Boolean layer. Chapter 10 briefly | ||
Строка 126: | Строка 142: | ||
has been defined to be <code>1’b0</code> (i.e., a Verilog expression that does not hold at | has been defined to be <code>1’b0</code> (i.e., a Verilog expression that does not hold at | ||
any cycle). | any cycle). | ||
+ | --> | ||
+ | Далее в книге, и\мы будем использовать Verilog вариант, если не указано иное. В основном мы сфокусируем наше внимание на временном слое, который является сердцем языка, и будем широко использовать Булевый слой. В глава 10 кратко обговорим различые аспекты Булевого слоя, слоя моделирования и слоя верификации, не затронутые в других главах. Также, мы сделаем предположение, что <code>‘true</code> был определен, как <code>1’b1</code> (т.е. Verilog выражение, которое выполняется в каждом цикле) и, что <code>‘false</code> опреден, как <code>1’b0</code> (т.е. Verilog выражение, которое не выполняется). |
Текущая версия на 13:35, 25 октября 2013
- 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 выражение, которое не выполняется).