Bresticker, Shalom wrote: > Krinshanu Debnath wrote: >>obj = '{a, '{2{b,c}}}; >> >>Now if I want to assign value in 1D array obj1, I would extend >>it to .. >> >>obj1 = '{3{'{a, '{2{b,c}}}}}; > > Here, you want to do > > obj1 = '{3{obj}} ; > > But if you substitute the structure literal for obj, then you omit the > leading '. You can think of it as moving to precede the {3. Not so. There are no such magic rules about how replication works. The example on page 12 is wrong, and its expansion has been bungled. Here is a corrected version: struct {int X,Y,Z;} XYZ = '{3{1}}; typedef struct {int a,b[4];} ab_t; int a,b,c; ab_t v1[1:0] [2:0]; v1 = '{2{'{3{'{a,'{2{b,c}}}}}}}; /* expands to '{ '{3{ '{ a, '{2{ b, c }} } }}, '{3{ '{ a, '{2{ b, c }} } }} } */ /* expands to '{ '{ '{ a, '{2{ b, c }} }, '{ a, '{2{ b, c }} }, '{ a, '{2{ b, c }} } }, '{ '{ a, '{2{ b, c }} }, '{ a, '{2{ b, c }} }, '{ a, '{2{ b, c }} } } } */ /* expands to '{ '{ '{ a, '{ b, c, b, c } }, '{ a, '{ b, c, b, c } }, '{ a, '{ b, c, b, c } } }, '{ '{ a, '{ b, c, b, c } }, '{ a, '{ b, c, b, c } }, '{ a, '{ b, c, b, c } } } } */ Since there is enough room on the page, please use the vertical pattern to better illustrate the repetitive behavior. Greg Jaxon > > In the following case: > > >>int n[1:2][1:3] = '{2{3{y}}}} > > > you chain the replications, so you need the ' between them. > > Similarly, > > >>int a[4] = '{b, b, 2{b}}; > > > Here also, each replication requires ' before it. > So you need > > >>int a[4] = '{b, b, '{2{b}}}; > > > Shalom > > > >>-----Original Message----- >>From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On >>Behalf Of Krishanu Debnath >>Sent: Thursday, January 05, 2006 1:46 PM >>To: sv-bc@eda.org >>Subject: Re: [sv-bc] structure literal example in standard >> >>Shalom, I don't think I understand your point. Let me allow to >>elaborate this >>example. >> >></code_begin> >> >>struct {int X,Y,Z;} XYZ = '{3{1}}; >>typedef struct {int a,b[4];} ab_t; >>int a,b,c; >> >>ab_t obj; >>ab_t obj1 [2:0]; >>ab_t obj2 [1:0][2:0]; >> >></code_end> >> >>Now if I want to assign value in obj.b array, I would write >>following array >>literal. >> >>obj.b = '{2{b,c}} // It should be okay because replication >>represents the >> // whole dimension [*] >> >>Now if I want to assign value in obj struct, I would extend it >>to .. >> >>obj = '{a, '{2{b,c}}}; >> >>Now if I want to assign value in 1D array obj1, I would extend >>it to .. >> >>obj1 = '{3{'{a, '{2{b,c}}}}}; >> >>So if we think obj2 is a 1D array of element obj1 of length 2. >> >>obj2 = '{2{'{3{'{a, '{2{b,c}}}}}}}; >> >>Now does it match with the example shown in standard? >> >> >>Bresticker, Shalom wrote: >> >>>No. >>> >>>You can see it described in 8.13.1, paragraph 2: >>> >>>A syntax resembling multiple concatenations can be used in >> >>array >> >>>assignment patterns as well. Each replication >>>represents a single dimension. >>> >>>unpackedbits = '{2 {y}} ; // same as '{y, y} >>>int n[1:2][1:3] = '{2{'{3{y}}}}; // same >> >>as'{'{y,y,y},'{y,y,y}} >> >>Yes perfectly valid example. But does the verse of 8.13.1p2 >>allow you to omit >>the 'apostrophe' when you are replicating the value for most >>varying dimension? >>If so then >>int n[1:2][1:3] = '{2{3{y}}}} is valid? >> >> >>Krishanu >> >>[*] Sec 8.13.1p2 says .. >>"A syntax resembling multiple concatenations can be used in >>array assignment >> patterns as well. Each replication represents a single >>dimension." >> >>Does it also implies that you need to specify all the elements >>of that >>dimension, if you are using replication operator? >> >>e.g >> >>int b; >>int a[4] = '{4{b}}; // valid >> >>but , >> >>int a[4] = '{b, b, 2{b}}; // is valid? >> >>FYI, most of the tools reject the second initialization. >> >> >>>== >>> >>>You can also see it in assignment_pattern syntax (Syntax 8- >> >>2): >> >>>assignment_pattern ::= >>> '{ expression { , expression } } >>>... >>>| '{ constant_expression { expression { , expression } } } >>> >>> >>>Shalom >>> >>> >>>>-----Original Message----- >>>>From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On >>>>Behalf Of Krishanu Debnath >>>>Sent: Thursday, January 05, 2006 12:16 PM >>>>To: sv-bc@eda.org >>>>Subject: [sv-bc] structure literal example in standard >>>> >>>>Hello, >>>> >>>>I am not sure about the correctness of the following >> >>example, >> >>>>taken from >>>>Sec 3.8 _Structure literals_. >>>> >>>>struct {int X,Y,Z;} XYZ = '{3{1}}; >>>>typedef struct {int a,b[4];} ab_t; >>>>int a,b,c; >>>>ab_t v1[1:0] [2:0]; >>>>v1 = '{2{'{3{a,'{2{b,c}}}}}}; >>>>/* expands to '{'{3{'{a,{2{b,c}}}}}, '{3{{a,'{2{b,c}}}}}} */ >>>><rest snipped> >>>> >>>>Here the array literal assign to v1 is incorrect. I think >>>>example >>>>missed the "'" after struct literal. So it should be >>>>'{2{'{3{'{a,'{2{b,c}}}}}}}. Similarly example missed the "'" >> >>in >> >>>>second element of expansion. >>>> >>>>Can anyone please confirm? >>>> >>>>Thanks, >>>>Krishanu >>>> > >Received on Thu Jan 5 12:49:11 2006
This archive was generated by hypermail 2.1.8 : Thu Jan 05 2006 - 12:49:19 PST