Shalom, A struct type is created by a 'struct' construct in some particular user instance. When the struct type is created, all of the array types over that struct type are also brought into existence. For example, if struct {logic field;} x, y; struct {logic field;} z; var type(x) ax[100]; var type(y) ay[100]; var type(z) az[100]; then 1) x and y have matching types 2) The types of x and z don't match, and are not even interassignable. 3) ax and ay have matching types 4) The types of ax and az don't match and are not even interassignable. The type shared by ax and ay was already brought into existence by the 'struct' construct which created the type used by the variable declarations of x and y. -- Brad -----Original Message----- From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On Behalf Of Bresticker, Shalom Sent: Sunday, March 11, 2007 7:43 AM To: Gordon Vreugdenhil Cc: sv-bc@eda-stds.org Subject: RE: [sv-bc] part selects on arbitrary expressions This is actually not clear to me. > No it hasn't been specified. You'll likely be unhappy about what > "type(...) == type(...)" means in any case. > > 6.10 says: > Two type references shall be considered equal in such comparisons > if, and only if, the types to which they refer match (see 6.9.1). > > 6.9.1 boils down to saying that a packed vector can match a predefined > but it is NEVER the case that two "anonymous" > packed vectors will match. So, for a packed item "bit [1:0] a", even > the trivial condition > type(a[1:0]) == type(a[1:0]) > will be false. > > Such types are equivalent but not matching. [SB] 6.9 says, "SystemVerilog does not require a category for identical types to be defined here because there is no construct in the SystemVerilog language that requires it. For example, as defined below, int can be interchanged with bit signed [31:0] wherever it is syntactically legal to do so." Well, if 'int' can be interchanged with 'bit signed [31:0]', and two int's match, then so should two 'bit signed [31:0]'s. It also says, "To have type matching or equivalence among multiple instances of the same module, interface, or program, a class, enum, unpacked structure, or unpacked union type must be declared at a higher level in the compilation-unit scope than the declaration of the module, interface, or program, or imported from a package. For type matching, this is true even for packed structure and packed union types." The last sentence, by specifying structures and unions, implies that the statement is not true for packed arrays. Even using the same paragraph from 6.9.1, the example, "typedef bit signed [7:0] BYTE; // matches the byte type", I would certainly expect two 'bit signed [7:0]'s to be as least as close as one of them and a 'byte'. If each of them matches a byte, which is less identical, then I would certainly expect them to match each other, which are more identical to each other. By the way, is matching transitive? Shalom -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Sun Mar 11 13:22:48 2007
This archive was generated by hypermail 2.1.8 : Sun Mar 11 2007 - 13:23:05 PDT