<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://simhard.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=PSL%2FA_Practical_Introduction_to_PSL%2FIntroduction</id>
		<title>PSL/A Practical Introduction to PSL/Introduction - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://simhard.com/wiki/index.php?action=history&amp;feed=atom&amp;title=PSL%2FA_Practical_Introduction_to_PSL%2FIntroduction"/>
		<link rel="alternate" type="text/html" href="http://simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/Introduction&amp;action=history"/>
		<updated>2026-04-12T11:28:40Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.21.3</generator>

	<entry>
		<id>http://simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/Introduction&amp;diff=3023&amp;oldid=prev</id>
		<title>ANA: Новая страница: «{{PSL TOC}}  PSL is a property specification language. It is a means to express ''properties'' of a design, and in addition to specify how verification tools shou…»</title>
		<link rel="alternate" type="text/html" href="http://simhard.com/wiki/index.php?title=PSL/A_Practical_Introduction_to_PSL/Introduction&amp;diff=3023&amp;oldid=prev"/>
				<updated>2013-10-09T20:03:20Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «{{PSL TOC}}  PSL is a property specification language. It is a means to express &amp;#039;&amp;#039;properties&amp;#039;&amp;#039; of a design, and in addition to specify how verification tools shou…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{PSL TOC}}&lt;br /&gt;
&lt;br /&gt;
PSL is a property specification language. It is a means to express ''properties''&lt;br /&gt;
of a design, and in addition to specify how verification tools should use those&lt;br /&gt;
properties. For example, a property may be ''asserted'' – this specifies that the&lt;br /&gt;
design in question is expected to behave as described by the property. A&lt;br /&gt;
property may also be ''assumed'' – this specifies that the design in question&lt;br /&gt;
expects its inputs to behave as described by the property. PSL also provides&lt;br /&gt;
other directives, for instance a means to specify scenarios that should be&lt;br /&gt;
''covered''.&lt;br /&gt;
&lt;br /&gt;
PSL is much more than simply an assertion language. Nevertheless, assertions are at the heart of PSL, and many PSL users will use PSL only for its&lt;br /&gt;
assertion capabilities. Thus, before we examine the complete language, a few&lt;br /&gt;
words about what exactly a PSL assertion is are in order. Many programming languages (for example Java) and hardware description languages (for&lt;br /&gt;
example VHDL) contain assert constructs. An assert construct provides the&lt;br /&gt;
user with a way to check at run time or at simulation time that a certain&lt;br /&gt;
condition holds, and to report a warning or an error if it does not. PSL assertions are similar in motivation, but much more extensive in their scope. In&lt;br /&gt;
addition to simple Boolean conditions, a PSL assertion can contain ''temporal''&lt;br /&gt;
operators that allow the user to describe relations over time. For example,&lt;br /&gt;
the PSL assertion &amp;lt;code&amp;gt;assert always (a -&amp;gt; next b);&amp;lt;/code&amp;gt; specifies that whenever&lt;br /&gt;
signal a holds, signal b must hold on the next cycle.&lt;br /&gt;
&lt;br /&gt;
Java and VHDL assertions are designed to be embedded in executable&lt;br /&gt;
code, and to be checked whenever execution reaches the point at which they&lt;br /&gt;
appear. PSL assertions, on the other hand, typically stand alone, making a&lt;br /&gt;
statement ''about'' the code without being a part of it. (While some tools support&lt;br /&gt;
embedded PSL assertions, an embedded assertion is still not part of the code&lt;br /&gt;
in the sense that there is no way to nest PSL assertions inside of executable&lt;br /&gt;
statements. Embedded PSL assertions are located near the code they specify,&lt;br /&gt;
but they are still about the code and not a part of it.)&lt;br /&gt;
&lt;br /&gt;
PSL was designed to be mathematically rigorous, with the result that a&lt;br /&gt;
PSL specification is both precise and automatically verifiable. Thus, a hardware specification written in PSL is machine readable and can be used as&lt;br /&gt;
input to verification tools. In addition, PSL was designed to be easy to read&lt;br /&gt;
and write, thus a PSL specification is human readable and can be used for&lt;br /&gt;
documentation in order to clarify subtle points of an English specification.&lt;br /&gt;
&lt;br /&gt;
The definitive definition of PSL can be found in IEEE Std 1850-2005. In&lt;br /&gt;
this book, our goal is to give a more relaxed, user-friendly introduction to the&lt;br /&gt;
language, as well as an in-depth discussion of its fine points. We do cover the&lt;br /&gt;
whole of PSL, and for completeness have included as well the BNF and formal&lt;br /&gt;
semantics as appendices.&lt;br /&gt;
&lt;br /&gt;
The structure of PSL is based on four layers – the Boolean layer, the&lt;br /&gt;
temporal layer, the verification layer and the modeling layer – and comes in&lt;br /&gt;
a numbers of flavors, which influence the syntax in a limited way. The four&lt;br /&gt;
layers of the language are:&lt;br /&gt;
&lt;br /&gt;
* The ''Boolean layer'' is composed of Boolean expressions, that is, expressions whose value is either true or false. For example, &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; is a Boolean expression. PSL interprets a high signal as true, and &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; low signal as false, independent of whether the signal is active-high or active-low. Thus, if signal &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; is activehigh, the Boolean expression &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; has the value true when &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; is asserted, and false when it is deasserted. And if signal b is active-low, the Boolean expression &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; has the value false when &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; is asserted and true when it is deasserted. In the remainder of this book, we will assume that all signals are active-high unless stated otherwise. Of course, it is easy to get the active-low versions of the example properties by switching a with &amp;lt;code&amp;gt;!a&amp;lt;/code&amp;gt; and vice versa. The Boolean layer consists of any Boolean expression in the underlying flavor. For example, &amp;lt;code&amp;gt;a &amp;amp;&amp;amp; !b&amp;lt;/code&amp;gt; is a Boolean expression in the Verilog flavor stating that &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; holds and &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; does not, &amp;lt;code&amp;gt;a[31:0]==b[31:0]&amp;lt;/code&amp;gt; is a Verilog-flavored Boolean expression stating that the 32-bit vectors &amp;lt;code&amp;gt;a[31:0]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;b[31:0]&amp;lt;/code&amp;gt; are equal, and &amp;lt;code&amp;gt;addr1[127:0]==128’b0&amp;lt;/code&amp;gt; is a Verilog-flavored Boolean expression stating that the 128-bit vector &amp;lt;code&amp;gt;addr1[127:0]&amp;lt;/code&amp;gt; has the value zero.&lt;br /&gt;
&lt;br /&gt;
* The ''temporal layer'' consists of temporal properties which describe the relationships between Boolean expressions over time. For example, &amp;lt;code&amp;gt;always (req -&amp;gt; next ack)&amp;lt;/code&amp;gt; is a temporal property expressing the fact that whenever (&amp;lt;code&amp;gt;always&amp;lt;/code&amp;gt;) signal &amp;lt;code&amp;gt;req&amp;lt;/code&amp;gt; is asserted, then (&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;) at the next cycle (&amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt;), signal ack is asserted.&lt;br /&gt;
&lt;br /&gt;
* The ''verification layer'' consists of directives which describe how the temporal properties should be used by verification tools. For example, assert &amp;lt;code&amp;gt;always (req -&amp;gt; next ack);&amp;lt;/code&amp;gt; is a verification directive that tells the tools to verify that the property &amp;lt;code&amp;gt;always (req -&amp;gt; next ack)&amp;lt;/code&amp;gt; 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''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| align=center&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
vunit example1 {&lt;br /&gt;
  assert never (a and b);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
vunit example1 {&lt;br /&gt;
  assert never (a &amp;amp;&amp;amp; b);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! (i) VHDL flavor&lt;br /&gt;
! (ii) Verilog flavor&lt;br /&gt;
|-&lt;br /&gt;
!colspan=2| Fig. 1.1: The same vunit in two different flavors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
The five flavors of PSL correspond to the hardware description languages&lt;br /&gt;
Verilog and VHDL, to the language GDL, the environment description language of the RuleBase model checker, and to SystemVerilog and SystemC.&lt;br /&gt;
While the flavor has some influence over the syntax – for instance, it affects&lt;br /&gt;
the syntax of Boolean expressions – the vast majority of the language is the&lt;br /&gt;
same across flavors.&lt;br /&gt;
&lt;br /&gt;
Figure 1.1 shows a PSL specification in the VHDL and Verilog flavors. In&lt;br /&gt;
each case, the specification states that signals a and b are mutually exclusive.&lt;br /&gt;
While a PSL user typically does not spend a lot of time thinking about the&lt;br /&gt;
boundaries between the various layers, we will point them out in this first&lt;br /&gt;
example. The Boolean expressions a and b in the VHDL flavor and &amp;lt;code&amp;gt;a &amp;amp;&amp;amp; b&amp;lt;/code&amp;gt;&lt;br /&gt;
in the Verilog flavor belong to the Boolean layer and describe the situation&lt;br /&gt;
in which both signal &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; and signal &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; are asserted. The keyword never belongs&lt;br /&gt;
to the temporal layer and indicates that the Boolean expression is expected&lt;br /&gt;
to hold in no cycle. Together, the temporal keyword never and the Boolean&lt;br /&gt;
expressions &amp;lt;code&amp;gt;a and b&amp;lt;/code&amp;gt; in the VHDL flavor or &amp;lt;code&amp;gt;a &amp;amp;&amp;amp; b&amp;lt;/code&amp;gt; in the Verilog flavor form&lt;br /&gt;
a ''property''. The keyword assert belongs to the verification layer and instructs&lt;br /&gt;
the verification tool to check that the property holds in the design under test.&lt;br /&gt;
The keyword vunit also belongs to the verification layer and introduces the&lt;br /&gt;
name of the verification unit (&amp;lt;code&amp;gt;example1&amp;lt;/code&amp;gt;). The modeling layer is not used in&lt;br /&gt;
this example.&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
the language and makes extensive use of the Boolean layer. Chapter 10 briefly&lt;br /&gt;
discusses various aspects of the Boolean, modeling and verification layers not&lt;br /&gt;
covered elsewhere. Throughout, we will assume that &amp;lt;code&amp;gt;‘true&amp;lt;/code&amp;gt; has been defined to&lt;br /&gt;
be &amp;lt;code&amp;gt;1’b1&amp;lt;/code&amp;gt; (i.e., a Verilog expression that holds at every cycle) and that &amp;lt;code&amp;gt;‘false&amp;lt;/code&amp;gt;&lt;br /&gt;
has been defined to be &amp;lt;code&amp;gt;1’b0&amp;lt;/code&amp;gt; (i.e., a Verilog expression that does not hold at&lt;br /&gt;
any cycle).&lt;/div&gt;</summary>
		<author><name>ANA</name></author>	</entry>

	</feed>