[sv-bc] assertions in always_comb blocks - sensitivity list - FYI

From: Bresticker, Shalom <shalom.bresticker_at_.....>
Date: Tue Sep 11 2007 - 04:36:03 PDT
 <<[sv-ac] immediate assertions in always_comb>>  <<RE: [sv-ac]
immediate assertions in always_comb>>  <<RE: [sv-ac] immediate
assertions in always_comb>>  <<RE: [sv-ac] immediate assertions in
always_comb>>  <<RE: [sv-ac] immediate assertions in always_comb>>  
<<RE: [sv-ac] immediate assertions in always_comb>> 

Shalom Bresticker
Intel Jerusalem LAD DA
+972 2 589-6852
+972 54 721-1033

---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



attached mail follows:


Hi,

 

I have a question regarding immediate assertions in always_comb

 

 For example

 

always_comb

begin

  a = b; 

  assert (a ==c)

end

 

is similar  to

 

always @(b) 

begin

  a = b;

  assert (a == c)

end

 

so if "c" is not equal to "a" at times where "b" does not change, it does not fail the assertion.

This is a bit counter intuitive to me since always comb models wiring. It would have been 

more intuitive if c was added to the sensitivity list as well.

 

Do other people share my intuition? Any problem with adding all signals that are not

on the left hand side of an assignment to the sensitivity list?

 

Doron

 

---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

-- 
This message has been scanned for viruses and 
dangerous content by MailScanner <http://www.mailscanner.info/> , and is 
believed to be clean. 


attached mail follows:


Doron,

> begin
>   a = b; 
>   assert (a ==c)
> end
>  
> is similar  to
>  
> always @(b) 
> begin
>   a = b;
>   assert (a == c)
> end
>
> [...] It would have been more intuitive if c was
> added to the sensitivity list as well.


I'm not quite sure why you omitted 'c' from 
the second block's event control.  Surely
always_comb constructs its "sensitivity list"
from *every* net and variable that participates 
in an expression (with some exceptions, as listed
in 9.2.2.2.1); and "a==c" in your assert is 
just an expression?  And we can reliably assume
that the value of 'a' cannot change except by 
execution of the always_comb, since it is forbidden
to write to a variable from anywhere else if it
is written from within an always_comb.

There is another issue: always_comb processes
execute once from top to bottom at time zero,
which the alternative form would not necessarily
do.  To mimic always_comb in that respect, it's
necessary to put the @(b,c) just before the "end":

  always begin
    a = b;
    assert (a==c);
    @(b,c);
  end

Please excuse me if I've missed your point.
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24 1AW, UK
Tel: +44 (0)1425 471223                   Email: jonathan.bromley@doulos.com
Fax: +44 (0)1425 471573                           Web: http://www.doulos.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


attached mail follows:


Hi Doron,

 

I agree that 'c' should be part of sensitivity list in the equivalent example. Jonathan as already pointed out the LRM section which makes it clear.

 

Manisha

 

 

 

From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On Behalf Of Bustan, Doron
Sent: Tuesday, September 11, 2007 3:34 PM
To: sv-ac@server.eda-stds.org
Subject: [sv-ac] immediate assertions in always_comb

 

Hi,

 

I have a question regarding immediate assertions in always_comb

 

 For example

 

always_comb

begin

  a = b; 

  assert (a ==c)

end

 

is similar  to

 

always @(b) 

begin

  a = b;

  assert (a == c)

end

 

so if "c" is not equal to "a" at times where "b" does not change, it does not fail the assertion.

This is a bit counter intuitive to me since always comb models wiring. It would have been 

more intuitive if c was added to the sensitivity list as well.

 

Do other people share my intuition? Any problem with adding all signals that are not

on the left hand side of an assignment to the sensitivity list?

 

Doron

 

---------------------------------------------------------------------
Intel Israel (74) Limited
 
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.


-- 
This message has been scanned for viruses and 
dangerous content by MailScanner <http://www.mailscanner.info/> , and is 
believed to be clean. 


-- 
This message has been scanned for viruses and 
dangerous content by MailScanner <http://www.mailscanner.info/> , and is 
believed to be clean. 


attached mail follows:


Hi Jonathan,

I think you understand me correctly, it is only the 
LRM language interpretation that is different.

The LRM says

"9.2.2.2.1 Implicit always_comb sensitivities

The implicit sensitivity list of an always_comb includes the expansions
of the longest static prefix of each variable or select expression that
is read within the block or within any function called within the block
with
the following exceptions:

a) Any expansion of a variable declared within the block or within any
function called within the block

b) Any expression that is also written within the block or within any
function called within the block.

For the definition of the longest static prefix, see 11.5.3. 

Hierarchical function calls and function calls from packages are
analyzed as normal functions. References to class objects and method
calls of class objects do not add anything to the sensitivity list of an
always_comb."

I am not sure what "variable or select expression that is read" means.
My interpretation was everything on the right hand side of an
assignment.
I guess that your interpretation is as good as mine (maybe better.)

I see that Manisha agrees with you so, I will let it go.

Thanks

Doron

-----Original Message-----
From: Jonathan Bromley [mailto:jonathan.bromley@doulos.com] 
Sent: Tuesday, September 11, 2007 1:21 PM
To: Bustan, Doron; sv-ac@server.eda-stds.org
Subject: RE: [sv-ac] immediate assertions in always_comb

Doron,

> begin
>   a = b; 
>   assert (a ==c)
> end
>  
> is similar  to
>  
> always @(b) 
> begin
>   a = b;
>   assert (a == c)
> end
>
> [...] It would have been more intuitive if c was
> added to the sensitivity list as well.


I'm not quite sure why you omitted 'c' from 
the second block's event control.  Surely
always_comb constructs its "sensitivity list"
from *every* net and variable that participates 
in an expression (with some exceptions, as listed
in 9.2.2.2.1); and "a==c" in your assert is 
just an expression?  And we can reliably assume
that the value of 'a' cannot change except by 
execution of the always_comb, since it is forbidden
to write to a variable from anywhere else if it
is written from within an always_comb.

There is another issue: always_comb processes
execute once from top to bottom at time zero,
which the alternative form would not necessarily
do.  To mimic always_comb in that respect, it's
necessary to put the @(b,c) just before the "end":

  always begin
    a = b;
    assert (a==c);
    @(b,c);
  end

Please excuse me if I've missed your point.
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24
1AW, UK
Tel: +44 (0)1425 471223                   Email:
jonathan.bromley@doulos.com
Fax: +44 (0)1425 471573                           Web:
http://www.doulos.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


attached mail follows:


> I am not sure what "variable or select expression that is read" means.
> My interpretation was everything on the right hand side of an
> assignment.

It's definitely not restricted to that;  for example
the expression in an if() or case() test most certainly
must contribute to the block's sensitivity, as would
any expression supplied as an actual argument to a 
function.  I agree that "is read" in the LRM is not 
crystal-clear, which is why I generally re-phrase it 
as "participates in an expression".  I don't think
that distorts the meaning.

The problem gets *much* more interesting if you add
the ability to put concurrent assertions into 
always_comb.  Should the always_comb then be 
sensitised to the *sampled* (Preponed) values
of signals in the assertion?  Should it be 
sensitised to signals in the assertion at all?
Sorry, I haven't read that proposal yet, so
I don't know what has already been suggested
about this.
-- 
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24 1AW, UK
Tel: +44 (0)1425 471223                   Email: jonathan.bromley@doulos.com
Fax: +44 (0)1425 471573                           Web: http://www.doulos.com

The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


attached mail follows:


Hi Jonathan,

I think that there is no problem with concurrent assertions in
always_comb blocks, at least in the current version of the LRM.
According to it the concurrent assertions in the always_comb blocks
shall be controlled by an explicitly specified clocking event (or
inferred from the default clocking). Therefore the procedure sensitivity
list does not affect the simulation of the concurrent assertion.

Thanks,
Dmitry

-----Original Message-----
From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On
Behalf Of Jonathan Bromley
Sent: Tuesday, September 11, 2007 1:54 PM
To: Bustan, Doron; sv-ac@server.eda-stds.org
Subject: RE: [sv-ac] immediate assertions in always_comb

> I am not sure what "variable or select expression that is read" means.
> My interpretation was everything on the right hand side of an
> assignment.

It's definitely not restricted to that;  for example
the expression in an if() or case() test most certainly
must contribute to the block's sensitivity, as would
any expression supplied as an actual argument to a 
function.  I agree that "is read" in the LRM is not 
crystal-clear, which is why I generally re-phrase it 
as "participates in an expression".  I don't think
that distorts the meaning.

The problem gets *much* more interesting if you add
the ability to put concurrent assertions into 
always_comb.  Should the always_comb then be 
sensitised to the *sampled* (Preponed) values
of signals in the assertion?  Should it be 
sensitised to signals in the assertion at all?
Sorry, I haven't read that proposal yet, so
I don't know what has already been suggested
about this.
-- 
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24
1AW, UK
Tel: +44 (0)1425 471223                   Email:
jonathan.bromley@doulos.com
Fax: +44 (0)1425 471573                           Web:
http://www.doulos.com

The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Tue Sep 11 04:38:41 2007

This archive was generated by hypermail 2.1.8 : Tue Sep 11 2007 - 04:38:59 PDT