[sv-bc] RE: [sv-ac] expect statement inside function

From: Bresticker, Shalom <shalom.bresticker_at_.....>
Date: Mon Oct 16 2006 - 05:04:32 PDT
Dave,

10.4.4 c) says that a function must have at least one input argument.

Does 1800 actually say clearly that this is not required in SV?

Thanks,
Shalom

> -----Original Message-----
> From: Rich, Dave [mailto:Dave_Rich@mentor.com]
> Sent: Monday, October 16, 2006 1:56 PM
> To: Bresticker, Shalom; Soumya Jyoti Wadader; sv-ac@server.eda.org
> Cc: sv-bc@server.eda.org
> Subject: RE: [sv-ac] expect statement inside function
> 
> Even without the footnote, the rules of 1364-2005 10.4.4 a) apply.
Only
> the rules of 10.4.4 c) and d) have been removed by 1800-2005.
> 
> Dave
> 
> 
> > -----Original Message-----
> > From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org]
> On
> > Behalf Of Bresticker, Shalom
> > Sent: Monday, October 16, 2006 4:38 AM
> > To: Soumya Jyoti Wadader; sv-ac@server.eda.org
> > Cc: sv-bc@server.eda.org
> > Subject: RE: [sv-ac] expect statement inside function
> >
> > Yes, "function_statement ::= statement", but in the 1364-2005 BNF,
> that
> > has a footnote:
> >
> > "1) Function statements are limited by the rules of 10.4.4."
> >
> > That footnote is missing from the 1800 BNF, probably because section
> > 10.4.4 of 1364-2005 was not copied into 1800.
> >
> > Shalom
> >
> >
> > > -----Original Message-----
> > > From: owner-sv-ac@server.eda.org
[mailto:owner-sv-ac@server.eda.org]
> > On
> > > Behalf Of Soumya Jyoti Wadader
> > > Sent: Monday, October 16, 2006 1:25 PM
> > > To: sv-ac@server.eda.org
> > > Subject: [sv-ac] expect statement inside function
> > >
> > > I have a quary regarding an 'expect' statement  inside function.
> > > According to v2k LRM 1364_2001  LRM section:
> > >                                                   10.3.4 Function
> > rules
> > >                                                           a) A
> > function
> > > definition shall not contain any time-controlled statements that
> > is,any
> > > statements introduced with #,@,or wait .
> > >
> > > But IEEE SV LRM says that:
> > >             A.2.6 (BNF)
> > >                    A.2.6 Function declarations
> > >                                function_body_declaration ::=
> > >                                                            {
> > > function_statement_or_null }
> > >                                function_statement_or_null ::=
> > >
> > > function_statement
> > >                                   function_statement ::= statement
> > >                                statement ::= [ block_identifier :
]
> {
> > > attribute_instance } statement_item
> > >                                   statement_item ::= |
> > > expect_property_statement
> > >                       A.2.10    expect_property_statement ::=
> > >                                                        expect (
> > > property_spec ) action_block
> > >
> > > So, from SV LRM it is clear that we can use 'expect' inside
> function,
> > In
> > > IEEE SV LRM section: 17.16, says that "The expect statement can be
> > > incorporated in any procedural code, including tasks or class
> > methods."
> > > I have an example where I use 'expect' statement as :
> > >
> > > module expect9 ( clk,  reset,  out );
> > >     input clk;
> > >     input reset;
> > >     output[7:0] out;
> > >     wire clk;
> > >     wire reset;
> > >     reg[7:0] out;
> > >     always @( posedge clk or posedge reset )
> > >       begin
> > >            if( reset == 1'b1 )
> > >            out <= 0;
> > >            else
> > >                out <= out + 1;
> > >       end
> > >
> > > sequence seq;
> > > @(posedge clk) out[0] ##1 !out[0] ##2 (out[2])[*4];
> > >  endsequence
> > >
> > >  property p1;
> > > @(posedge clk)
> > > reset ##1 !reset |=> seq ##1 (!out[6])[*2] ;
> > >  endproperty
> > >
> > > function reg assert_func (input bit clk);
> > > expect (p1)
> > >    begin
> > >      $display(" EXPECT STATMENT HOLDs INSIDE THE FUNCTION");
> > >      return 0;
> > >    end
> > >  else
> > >    begin
> > >     $display(" EXPECT STATMENT DOES'NT HOLDs");
> > >     return 1;
> > >    end
> > > endfunction
> > >
> > >  always@(posedge clk)
> > >   begin
> > >    reg r;
> > >    r = assert_func(clk);
> > >     end
> > > endmodule
> > >
> > >  function does not allow any time control expression, so how can I
> use
> > > 'expect' statement inside function?
> > >
> > >
Received on Mon Oct 16 05:04:54 2006

This archive was generated by hypermail 2.1.8 : Mon Oct 16 2006 - 05:05:02 PDT