[sv-ac] 1728 mantis: "let" construct vs function

From: Mirek Forczek <mirekf_at_.....>
Date: Mon Apr 07 2008 - 07:34:11 PDT
Hi,
 
The 1728 mantis introduces 'let' construct: the motivation is given as:
 
"Including let expressions into packages (See Clause 25) is a natural way to
implement a well-structured customization for assertions."
 
there is an example also:
 
// in a package
let at_least_two(sig, rst = 1'b0) = rst || ($countones(sig) >= 2);

// in a design
reg [15:0] sig1; reg [3:0] sig2;
    always_comb begin
        q1: assert (at_least_two(sig1));
        q2: assert (at_least_two(~sig2));
    end
 
 
I'm wondering if the same could be achieved just with functions (?):
 
// in a package
function automatic bit at_least_two(sig, rst = 1'b0);
    return rst || ($countones(sig) >= 2);
endfunction

// in a design (no change at all vs 'let' version)
reg [15:0] sig1; reg [3:0] sig2;
    always_comb begin
        q1: assert (at_least_two(sig1));
        q2: assert (at_least_two(~sig2));
    end
 
 
Are there any other benefits in having 'let' construct over already existing
'function' ?
 
If it is about unbounded argument types in 'let' construct, a parametrized
function and tasks shall be considered as an alternative.
They shall provide same flexibility as the "let" construct but they would be
an extension of an existing concept (function, task) instead of a brand new
one (let).
The parametrized function and tasks extension (functions and tasks with
#parameters - in particular: with type parameters) would be consistent with
already intorduced concpet of the parametrized classes - and their methods
in particular.
 
 
Regards,
Mirek
  

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Mon Apr 7 07:35:08 2008

This archive was generated by hypermail 2.1.8 : Mon Apr 07 2008 - 07:35:51 PDT