Re: [sv-ac] checker: Clarification on functions & side effects

From: Srinivasan Venkataramanan <svenka3_at_.....>
Date: Wed Sep 30 2009 - 17:52:42 PDT
Dmitry,  Can you please explain why you believe a simple VOID function is
illegal/meaningless in checker? Especially referring to an earlier issue
raised by Ben/Abhishek on $display, I can think of "debug-only" functions
being used in checker, a skeleton code below, simply added a "display
function" that may potentially be reused for few cases. One may find WA by
putting $display inline etc. but my point is why exclude a void function
that someone may find it useful later on?

I also have questions on if.else, case usage in checker, will raise it
little later - once this LRM work is done from SV-AC side. I understand the
rationale of preventing them as of today is from its origin in Formal World,
but now that it is becoming lot more widely accessible, it may be good to
relook at the target usage.

Thanks
Srini
www.cvcblr.com

function bit next_window (bit win);c
  if (reset || win && end_flag == 1'b1)
    return 1'b0;
  if (!win && start_flag == 1'b1)
    return 1'b1;

  // DEBUG code
  dbg_it();
  return win;
endfunction

function void dbg_it();
  // Can generalize it some extent by passing a large array, number of
inputs etc.
   $display ("reset %0b end_flag %0b win %0b",
                 reset, end_flag, win);
endfunction : dbg_it

always @(clock)
  window <= next_window(window);




On Thu, Oct 1, 2009 at 1:10 AM, Korchemny, Dmitry <
dmitry.korchemny@intel.com> wrote:

>  Hi Ben,
>
>
>
> Yes, assignment of a variable that does not belong to the function (i.e.,
> neither its local variable, no argument) is illegal. But if a is a local
> variable in the function then a++ is legal.
>
>
>
> It also turns out that void functions are illegal (or at least,
> meaningless) in checkers.
>
>
>
> Regards,
>
> Dmitry
>
>
>
> *From:* owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] *On
> Behalf Of *ben cohen
> *Sent:* Wednesday, September 30, 2009 7:27 PM
> *To:* sv-ac@server.eda.org; Seligman, Erik
> *Subject:* [sv-ac] checker: Clarification on functions & side effects
>
>
>
> LRM states that
>
> *Functions shall be automatic (or preserve no state information) and have
> no side effects, *
>
>
>
> *1) What is a side effect?* To me a side effect is an assignment of a
> variable (free variable of the checker or a module).
>
> A function can (in a checker) only return a value.   Thus the following is
> illegal:
>
> *checker t_chk(...); *
>
> *  logic a, x, y;*
>
> * function void inc_a; *
>
> *       a ++; // same as    a=a+1 // illegal blocking assignment? *
>
> *     // a <= a+1;  // Illegal also, cannot change value of a variable*
>
> *   endfunction : a_to_1*
>
> * ap_test: assert property(@ (posedge clk) (x, inc_a()) |-> y) ;*
>
> *endchecker : t_chk*
>
>    --
>
>  *2) Can **functions be of type void in a checker? *
>
>    Since a void function must have a side effect, such as assigning a value
> to a variable, I believe that they are illegal.
>
> Function with return type of void cannot be used in/as an expression.
>
>
>
>
>
>   * *
>
>
>
> --
> This message has been scanned for viruses and
> dangerous content by *MailScanner* <http://www.mailscanner.info/>, 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* <http://www.mailscanner.info/>, and is
> believed to be clean.
>

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Sep 30 17:54:14 2009

This archive was generated by hypermail 2.1.8 : Wed Sep 30 2009 - 17:55:41 PDT