Hi, The text you quote is erroneous and was fixed in 1364-2005, which you should use as reference instead of 1364-2001. There is no difference in this respect between recursive and non-recursive automatic functions. See http://boyd.com/1364_btf/report/full_pr/325.html. In your example, the function inc is recursive but not automatic, so it should be illegal. Shalom > -----Original Message----- > From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On > Behalf Of Surya Pratik Saha > Sent: Monday, January 30, 2006 12:44 PM > To: sv-bc@eda.org > Subject: [sv-bc] Is member of recursive task/function > hierarchically referred? > > In 1364-2001 LRM, section 12.4, it is mentioned: > > [...] > At the top of the name hierarchy are the names of one or more > root modules of > which no instances have been > created.This root or these parallel root modules make up one or > more hierarchies > in a design description or > description .Inside any module,each module instance (including > an arrayed or > generated instance),task def- > inition,function definition,and named begin-end or fork-join > block shall define > a new branch of the > hierarchy.Named blocks within named blocks and within tasks and > functions shall > create new branches. > Only non-recursively referenced automatic tasks and/or > functions create visible > branches that can be refer- > enced.Recursively called tasks and functions,declared using the > automatic > keyword and recursively called > from within the same task or function,do not create visible > branches that can be > referenced.See 10.2.1 and > 10.3.1 for a discussion of automatic tasks and functions. > [...] > > What I can understand, the member of a directly recursive > task/function is not > allowed to be hierarchically referenced. If it is mutually > recursive, then the > member can be hierarchically referred unless the task/function > is automatic. > > It is already mentioned, any member of automatic task/function > can not be > hierarchically referred. > > So is the member of a directly recursive task/function allowed > to be > hierarchically referred, if the task/function is not automatic. > If yes, then why > recursiveness is discussed here. > > For e.g., is the following test case legal? > module tb; > dut dut(); > initial $dumpvars(); > endmodule > > module dut(input clk, input d, output reg [7:0] q); > > //{remote href,local href, not} X {user dotted, implicit > dotted} > > reg [7:0] \t1.local ; // capture? > reg [7:0] \literal.local ; > > function inc (input [7:0] a); > reg [7:0] incprev; > begin > if (a==0) begin > if (d) incprev=0; > // else reuse global incprev > end > else incprev=inc(a-1)+1; > inc = incprev; > end > endfunction > > task t1 (output [7:0] out, input [7:0] in); > reg [7:0] local; > begin > if (in[0]) local=in>>1; > out=local+1; > end > endtask > > always @(posedge clk) begin > t1(\t1.local , inc(4)); > q = \t1.local + \literal.local + t1.local + > inc.incprev; > end > > endmodule > > Regards > Surya.Received on Mon Jan 30 03:02:15 2006
This archive was generated by hypermail 2.1.8 : Mon Jan 30 2006 - 03:02:43 PST