All,
Are we saying that if I compile a design with a package in file types_pkg.sv with modules m1.sv and m2.sv as follows then modules m1 and m2 would have visibililty into the package?
tool_compile_commmand types_pkg.sv m1.sv m2.sv
In m1.sv I can do the following:
import types_pkg :: *; // for module below
module m1
...
endmodule : m1
// Question: if module m3 is in same file as m1 (in m1.sv), does m3 see the types_pkg?
---
while I am on the subject, is this legal?
typedef struct {
bit [7:0] opcode;
bit [23:0] addr;
} instruction_t;
// using typedef from above -- no package!
module (input instruction_t a,
output instruction_t result
);
Thanks,
Ben Cohen
--- In a message dated 8/16/2004 12:18:48 AM Eastern Daylight Time, "Clifford E. Cummings" <cliffc@sunburst-design.com> writes: >Hi, Stu & All - > >I like your proposed solution. I just thought I was missing something in >the LRM but it looks like I have tripped over the same thing you tripped >over last January. > >If we leave packages the way they are currently defined, we are going to >hear about it from the VHDL guys! :-) > >Regards - Cliff > >At 08:59 PM 8/15/2004, Stuart Sutherland wrote: >>Cliff, >> >>Here's the proposal I made to make it easier to use packages with module >>port declarations. >> >>Stu >>~~~~~~~~~~~~~~~~~~~~~~~~~ >>Stuart Sutherland >>stuart@sutherland-hdl.com >>503-692-0898 >> >> >> >>---------- >>From: David W. Smith [mailto:David.Smith@Synopsys.COM] >>Sent: Monday, January 26, 2004 8:43 AM >>To: stuart@sutherland-hdl.com >>Subject: RE: Proposal for SV 3.1a >> >>HI Stu, >> >>I did route this through some of the Synopsys experts and here are their >>replies. >> >> >> >>Peter: >> >> >> >>The issue Stu raises was extensively discussed in SV-EC. The problem of >>port declaration types already has the two solutions mentioned by Stu, and >>I do not think that a last-minute change to reduce possible verbosity is >>justified. >> >> >> >>Dave Rich >> >> >> >>The whole point of the separate compilation unit space was to prevent >>these global collisions. Also, if you use a file per module compilation >>unit, these global collisions will not be a problem. >> >> >> >>Stu, I have to agree with both Peter and Dave. The recommended usage, and >>the default as specified in Section 18.2 of Draft 3, is that each file is >>a separate compilation unit and therefore these collisions do not occur. I >>think the mechanisms are more than sufficient to handle the different >>usage styles and avoid collision. >> >> >> >>Regards >> >>David >> >> >> >> >> >> >> >>-----Original Message----- >>From: Stuart Sutherland [mailto:stuart@sutherland-hdl.com] >>Sent: Saturday, January 24, 2004 1:57 AM >>To: david.smith@Synopsys.COM >>Subject: Proposal for SV 3.1a >> >> >> >>David, >> >>I know this is well past any deadlines, but the following problem came out >>in an SV training class I was conducting this week. As I was pondering >>the problem, a simple solution occurred to me. Can you please make sure >>the following proposal gets to the right people for consideration and voting? >> >>Thanks >> >>Stu >> >>----------------------- >> >>Problem statement: >> >>LRM 3.1a draft 2 adds packages to SystemVerilog. In order to use data >>types or constants declared within a package in module port declarations, >>one must either: >> >>- Import the package into the $unit compilation unit space. >> >>- Use the scope resolution operator for each module port or parameter that >>references the package. >> >>Importing packages into the compilation unit space could conflict with >>other declarations in that space. In addition, some companies may impose >>modeling guidelines prohibiting declarations in the compilation unit space. >> >>Using the scope resolution operator is verbose. If multiple ports >>reference types or parameters in a package, using the scope resolution >>operator can also become repetitious. Even the following short example >>shows how using the scope resolution operator in port lists becomes >>verbose and repetitive: >> >> package shared_decls; >> parameter WIDTH = 32; >> >> typedef struct { >> bit [7:0] opcode; >> bit [23:0] addr; >> } instruction_t; >> endpackage >> >> module (input [shared_decls::WIDTH-1:0] data, >> input shared_decls::instruction_t a, >> output [shared_decls::WIDTH-1:0] result >> ); >> ... >> endmodule >> >>The following proposal provides a simple way to reference package items in >>module port declarations. It avoids the use of the compilation unit >>space, and eliminates the verbosity and receptiveness of using the scope >>resolution operator. >> >>Add new subsection 18.2.2, as follows. >> >>18.2.2 Using packages with module port declarations >> >>Data types and constants declared in packages can be referenced in module >>port declarations by importing the package as part of the module >>declaration. The syntax is (new text shown in red): >> >> module_nonansi_header ::= // from Annex A.1.3 >> { attribute_instance } module_keyword [ lifetime ] >> module_identifier [ import_port_list ] >> [ parameter_port_list ] list_of_ports ; >> module_ansi_header ::= >> { attribute_instance } module_keyword [ lifetime ] >> module_identifier [ import_port_list ] >> [ parameter_port_list ] [ list_of_port_declarations ] ; >> >> import_port_list ::= // from Annex A.1.4 (add as first production >> in this section) >> # ( import package_import_item { , package_import_item } ) >> >>Declarations that are imported as part of a module declaration are visible >>throughout the module. These imported declarations can be used as part of >>the module port declarations. For example: >> >> package shared_decls; >> parameter WIDTH = 32; >> >> typedef struct { >> bit [7:0] opcode; >> bit [23:0] addr; >> } instruction_t; >> endpackage >> >> module #(import shared_decls::*) >> (input [WIDTH-1:0] data, >> input instruction_t a, >> output [WIDTH-1:0] result >> ); >> ... >> endmodule >> >>----------------------- >> >> > >---------------------------------------------------- >Cliff Cummings - Sunburst Design, Inc. >14314 SW Allen Blvd., PMB 501, Beaverton, OR 97005 >Phone: 503-641-8446 / FAX: 503-641-8486 >cliffc@sunburst-design.com / www.sunburst-design.com >Expert Verilog, SystemVerilog, Synthesis and Verification Training > > > -- -- -------Received on Mon Aug 16 04:57:25 2004
This archive was generated by hypermail 2.1.8 : Mon Aug 16 2004 - 04:58:12 PDT