Re: [sv-bc] Can a function contain a fork/join/any/none?

From: Brad Pierce <Brad.Pierce_at_.....>
Date: Thu Feb 16 2006 - 07:51:03 PST
Non-member submission by Ambar Sarkar

 

________________________________

Sent: Thursday, February 16, 2006 6:22 AM



Dave, 

 

I think I understand the rationale here, especially about rooted
threads. One more question. Given that we do not want functions to
interact with the scheduler, we are in effect forbidding functions to
trigger events as well, correct? 

 

Just saying that we disallow time-consuming statements in functions
leaves a lot of room for misinterpretation, IMHO.

 

Regards,

-Ambar

 

________________________________

From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of
Rich, Dave
Sent: Thursday, February 16, 2006 9:12 AM
To: Ambar Sarkar; sv-ec@eda.org; sv-bc@eda.org
Subject: RE: [sv-ec] Can a function contain a fork/join/any/none?

 

"time consuming"  would mean anything that could block a
thread(process). But there are really two separate issues here. One is
the fact that functions are not supposed to interact with the scheduler.
Events get created outside the function as outputs are assigned, but the
function does no scheduling. We also don't have to worry about active
region functions versus inactive-region(program block) functions either.

 

But the other major issue is that time consuming threads roots can start
from more places than just always or initial blocks if you allow a
function to call a fork_join_none. They can start form continuous
assignments or in variable declarations. And those variable declarations
could be in a package, which in turn are not supposed to contain any
rooted threads.

 

Dave

 

 

________________________________

From: Ambar Sarkar [mailto:ambar.sarkar@paradigm-works.com] 
Sent: Thursday, February 16, 2006 4:14 AM
To: Rich, Dave; sv-ec@eda.org; sv-bc@eda.org
Subject: RE: [sv-ec] Can a function contain a fork/join/any/none?

 

Dave,

 

Is there a definition of the term "time consuming"? A fork/join none(not
the others) is non time consuming as far as I understand. Or is it being
seen as the conceptual  equivalent of a task call and thus recommended
against in function calls?

 

Regards,

-Ambar

 

________________________________

From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of
Rich, Dave
Sent: Thursday, February 16, 2006 12:33 AM
To: sv-ec@eda.org; sv-bc@eda.org
Subject: [sv-ec] Can a function contain a fork/join/any/none?

 

A number of people have asked me the above question, and my immediate
answer has been no. However, it looks like a number of things that were
ruled out by the BNF in 1364 by having separate function_statement and
statement productions, have been let back in by the 1800 BNF.  Also,
there are a number of new constructs in SystemVerilog that may need
restrictions for use by a function. The fork/join_none was added to
SystemVerilog, but since there are restrictions on any time controlling
statements, or task enables, it doesn't seem to make much sense to allow
it.

 

I'm not sure which committee should have this issue, but I think the
sv-bc should create some guarantees about what a function is and is not
allowed to do. The sv-ec may have to review which added constructs make
or break those guarantees.

 

This is mantis 1336.

 

Dave

 

 

David Rich
Verification Technologist
Design Verification & Test Division
Mentor Graphics Corporation
dave_rich@mentor.com
Office:   408 487-7206
Cell:     510 589-2625

 
Received on Thu Feb 16 07:51:42 2006

This archive was generated by hypermail 2.1.8 : Thu Feb 16 2006 - 07:52:37 PST