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

From: Rich, Dave <Dave_Rich_at_.....>
Date: Mon Oct 16 2006 - 05:12:36 PDT
Clearly is a subjective term. It does say "SystemVerilog extends Verilog
functions to allow the same formal arguments as tasks" I take that to
mean, except as noted elsewhere in 1800-2005, the rules for formal
arguments for functions and tasks are the same.

Dave


> -----Original Message-----
> From: Bresticker, Shalom [mailto:shalom.bresticker@intel.com]
> Sent: Monday, October 16, 2006 5:05 AM
> To: Rich, Dave
> Cc: sv-bc@server.eda.org
> Subject: RE: [sv-ac] expect statement inside function
> 
> 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:12:47 2006

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