Hi Doron, May be use r1_lv1 instead of unique below ... (r1.lv1 might be misleading scope/namespace creation issues) to be r1's lv1: sequence r2; logic [7:0] lv1; logic [7:0] unique_lv1; (b, lv1 = c) ##1 (a, r1_lv1 = 0) ##1 (!a, r1_lv1 = r1_lv1 +lv1)[*0:$] ##1 a ##0 (1, lv1 = r1_lv1) ##1 (lv1 == d); endsequence The adjacent idea (I mentioned on call yesterday) is to *add* (we still need to explain above for backward compatibility) visibility notions, instead of just explaining how substitution/passing should work, similar to classes with a "local"/"public" (default) access to r1's lv1, or simply just add scoping (drop the local bit :)) so you can say to begin with: sequence r2; //logic [7:0] lv1; // no need ... (b) ##1 r1 (c) // "c" just an input not inout ##1 (r1.lv1 == d); endsequence This would have same "substitution" semantics but clearer, avoids shadowing issues, cleaner, easier to write ... BTW, I am not too keen on adding things, we have to clarify/interpret current LRM anyway, so food for thought in case we encounter more severe issues in this area. Thx. -Bassam. -----Original Message----- From: owner-sv-ac@eda.org [mailto:owner-sv-ac@eda.org] On Behalf Of Doron Bustan Sent: Wednesday, November 15, 2006 8:55 AM To: sv-ac@eda.org Subject: [sv-ac] 1678 I open a new bug - 1678 for local variables name clashes: ------------------------------------------------------------- A naive interpretation of substitution may lead to local variables name clashing. Here is an example of name clashing. sequence r1(lv); logic [7:0] lv1; (a, lv1 = 0) ##1 (!a, lv1 = lv1 +lv)[*0:$] ##1 a ##0 (1, lv = lv1); endsequence sequence r2; logic [7:0] lv1; (b, lv1 = c) ##1 r1(lv1) ##1 (lv1 == d); endsequence A naive substitution will result in the following: sequence r2; logic [7:0] lv1; logic [7:0] lv1; (b, lv1 = c) ##1 (a, lv1 = 0) ##1 (!a, lv1 = lv1 +lv1)[*0:$] ##1 a ##0 (1, lv1 = lv1) ##1 (lv1 == d); endsequence what we really want is to rename lv1 in r1 to a unique name before the substitution occurs. Then we get sequence r2; logic [7:0] lv1; logic [7:0] unique_lv1; (b, lv1 = c) ##1 (a, unique_lv1 = 0) ##1 (!a, unique_lv1 = unique_lv1 +lv1)[*0:$] ##1 a ##0 (1, lv1 = unique_lv1) ##1 (lv1 == d); endsequenceReceived on Wed Nov 15 11:50:16 2006
This archive was generated by hypermail 2.1.8 : Wed Nov 15 2006 - 11:50:35 PST