System Verilog | ||||||
Testbench donation | ||||||
Open Review Issues | ||||||
20-Mar-03 | ||||||
Status Key: | Open -> Accepted -> Closed (in LRM) -> Verified | |||||
Rejected | ||||||
Deferred | ||||||
Transferred (to another committee) | ||||||
Returned (to orginal committee) | ||||||
ID | Short name: | Description: | Person | Discussions: | Resolution: | Status |
REV-1 | $cast_assign | Static casting in SV? Why not a compiler issue instead of call? | Kevin C | Supports run-time checks with dynamic warnings and check before doing casting. Does not replace static checks. Does the syntax need changed? Does it overlap with assertion? Mainly used with assignments. May need a new assignment operator such as ":=" | Related to 21/22 | Closed |
REV-2 | Array shorthand | Conflict with existing call | Conflicts with existing Verilog | Remove shorthand notation | Closed | |
REV-3 | Built-in string methods | Resolve class versus task syntax | Predefined classes are a new concept. | Accept | Closed | |
REV-4 | Forward reference with typedef | General implication | Should be applied to other places as well (it is). This is a bad idead in SV for non-pointers (which do not exist). Heavily used for classes. | Accept | Closed | |
REV-5 | Extern withdrawal | Impact | Not in donation. May be required in future. | In progress within SV-BC. | Closed | |
REV-6 | Class issues | super, extends, local/private, virtual, protected etc... Use of : instead of extends. Use braces instead of "EndCase". | Kevin C | Java vs C++. Braces vs "End Class". Resolve issue of C++ bias versus Java bias | Use of "End Class" is to be compatible with SV use for all other scoping contexts. Only use of braces is with struct. The use of extends is inconsistent with Verilog-AMS. Will address during LRM review. | Closed |
REV-7 | General use of Class | How general | Not synthesizable due to dynamic allocation. Problem is that adding classes would like to have methods on structs (which is synthesizable) | Keep this in mind but allow classes to be general. | Closed | |
REV-8 | Virtual class vs interface | How do these relate | Abstract data created with class how related to an interface with no ports (can an interface have no ports)? | There is some overlap between concepts of virtual class and interface with no ports. Major difference is that class is dynamic and interface is static. Will keep distinction for now due to interface being a hardware construct and class being software. | Closed | |
REV-9 | Predefined constants | Keywords versus pre-defined constants | What is difference between them? Namespace is an issue? May be handled by changing the implementation of things using them. (implement as classes). | Not clear what the data type really is or if it is a data type. This is not closed. Decided to use keywords and new method syntax. | Closed | |
REV-10 | Mailboxes and semaphores | Mailbox and semaphores vs channels and queues in SV | Looks like similar requirement to data channels. | Mailboxes do not require all of the flexibility that channels provide. They do not require synchronization between different clock domains | Closed | |
REV-11 | Mailboxes and semaphores | Implemented as classes | Look into implementing as classes instead of language features. | For efficiency it is better to implement the mailboxes as language features instead of classes. | Closed | |
REV-12 | Program block | Reconcile with verilog module | Is it still required since it is not going through PLI but is integral to the language? Is cycle semantic required? Remove non-determinism of HDL code and keep execution of testbench clean (clock synchronized). Stefen disagrees that cycle based is required (use non-blocking assignment). | Long discussion on requirement for Program block and clocking domain. Need to have a clear definition of what is legal/illegal in Program block and how it is unique wrt Module. Mehdi will review. Closed with acceptance of clocking domain and program. | Closed | |
REV-13 | Clocking_domain | ports defined in multiple clock domains: questions of out1 = 1 and d1.out = 1 (out1 defined in two domains) | Is it still required since it is not going through PLI but is integral to the language? Is cycle semantic required? Remove non-determinism of HDL code and keep execution of testbench clean (clock synchronized). Stefen disagrees that cycle based is required (use non-blocking assignment). | See above. The discussion in the committee is that it is still required and unrelated to PLI requirements. New simulation semantics clearly identify ability to support. | Closed | |
REV-14 | wait_var | Extend '@' for wait_var | Kevin C | wait_var and wait_child should be rolled into '@'. | Reconcile use of @ for variables in SV and use of wait_var in program. Why is it different? Mehdi to investigate. Closed with acceptance of CH-12 and events. | Closed |
REV-14.1 | wait_child | use join instead of wait_child | Kevin C | I'd prefer to have autonomous threads named (by identifiers on the fork/process statement) so that you can say "join <identifier>" instead of wait_child(). | This is really part of the discussion on process control (Proposal from Kevin). Will close it here since it is covered somewhere else. | Closed |
REV-15 | fork/join none vs process | Keep both process and fork separate | Kevin C | process is different from fork in that it refers to a single statement and fork refers to a group of statements (1 or more). This makes a difference if you want to identify a thread uniquely by name, so I'd rather keep the seperate process statement. | "fork ... join none" is equivalent to "process fork ... join". Why do we need to have two different ways of doing the same thing. Options are: remove "fork ... join none", remove "process", or support both. Will resolve when reviewing LRM. Resolved. Program is gone. fork ...join_none supported | Closed |
REV-16 | $sync/$trigger | Extend -> and @ to include | Kevin C | I'd prefer to see these rolled
into the -> and @ syntax e.g. $tigger(ONE_BLAST,evt); becomes: ONE_BLAST -> evt; The $sync task appears to create an event out of other events so could be replaced by special event function for the ORDER and CHECK versions. E.g. $sync(ORDER,lookupchk_evnt,queue_event); becomes: @(ordered(lookupchk_evnt,queue_event)); Which can be used with other events e.g.: always @(posedge clock and ordered(lookupchk_evnt,queue_event)) begin ... end (Is there an alternative syntax for ordered events in the assertions stuff already?) |
just a cleanup, suggested adding the to the event operation. Will get to review it with the doc and LRM when presented | Closed |
REV-17 | alloc | Replace alloc with new style syntax | Kevin C | alloc' appears to be used to
create various objects dynamically. As with other Vera system tasks I presume
it was done this way for ease of implemetation through PLI. For SV I would
offer to create new types for these
objects and use a 'new' style syntax for creating them dynamically. E.g. module foo; mailbox s_mbx, // permanemt mailbox var v_mbx; // mailbox reference initial begin v_mbx = new; // dynamic mailbox end ... [NB: I don't think we have a donation covering references and/or pointers yet. Is one in the pipeline?] The mailbox_put/get tasks can be replaced regular reads and writes as outlined in the channel proposal (http://www.eda.org/sv-ec/hm/0107.html) since channels and mailboxes are almost the same (I'll rehash the proposal to cover the extra functionality later). Semaphores should also become a proper part of the language e.g.: <semaphore declaration> ::= semaphore <identifier>["["<sema. count>"]"["["<key count>"]"]] You could overload the assignment operators to replace semaphore_put/get functions e.g.: module foo; semaphore s1; // counts default to 1 integer key_idx; always... key_idx <= s1; // returns -1 if key not available ... key_idx = s1; // blocks until key available s1[0][key_idx] = 0; // release key // and/or s1++; // blocks until key available s1--; // returns a key'alloc' appears to be used to create various objects dynamically. As with other Vera system tasks I presume it was done this way for ease of implemetation through PLI. For SV I would prefer to create new types for these objects and use a 'new' style syntax for creating them dynamically. E.g. module foo; mailbox s_mbx, // permanemt mailbox var v_mbx; // mailbox reference initial begin v_mbx = new; // dynamic mailbox end ... [NB: I don't think we have a donation covering references and/or pointers yet. Is one in the pipeline?] The mailbox_put/get tasks can be replaced regular reads and writes as outlined in the channel proposal (http://www.eda.org/sv-ec/hm/0107.html) since channels and mailboxes are almost the same (I'll rehash the proposal to cover the extra functionality later). Semaphores should also become a proper part of the language e.g.: <semaphore declaration> ::= semaphore <identifier>["["<sema. count>"]"["["<key count>"]"]] You could overload the assignment operators to replace semaphore_put/get functions e.g.: module foo; semaphore s1; // counts default to 1 integer key_idx; always... key_idx <= s1; // returns -1 if key not available ... key_idx = s1; // blocks until key available s1[0][key_idx] = 0; // release key // and/or s1++; // blocks until key available s1--; // returns a key The static declarations of mailboxes and semaphores should be more friendly to synthesis tools.The static declarations of mailboxes and semaphores should be more friendly to synthesis tools. |
Lots of discussion. No resolution. Indication that latest work uses new, get, put, and retrieval. Closed in discussion within detailed review. | Closed |
REV-18 | Clocking_domain | Change syntax | Kevin C | To avoid making CLOCK a keyword
I'd be tempted to change the syntax
to something like: clock_domain <domain name> [@(<clock expression>)] You could just use <domain name> instead of <domain name>.CLOCK to pick up the clock signal. |
This has been changed to clocking. No problem | Closed |
REV-19 | Cast_assign | Is $cast_assign bi-directional? | Erich Marschner | Is $cast_assign bi-directional? (I.e, can it convert either from enum to int, or vice versa)? If not, why not? | This is a good point. $cast_assign is and should be bi-directional; it converts from integer to enum and vice-versa. | Closed |
REV-20 | Cast_assign limit | $cast_assign on assignment | Erich Marschner | Why is the casting (apparently) done only on assignment? It should be possible to convert an enum to an integer in a subexpression, use the integer in a computation, and convert the result back to an enum value before any assignment occurs. It should also be possible to convert in an expression being passed as a parameter, not just in assignments. | See Arturo's Response | Closed |
REV-21 | Argument passing | Pass-by-reference vs pass-by-value | Erich Marschner | Is pass-by-reference or pass-by-value always controlled by the user? Or is the tool free to select one or the other (e.g., depending upon the characteristics of the data type)? Whatever the answer is, what is the rationale for the decision? | Resolved in Arturo's email | Closed |
REV-22 | Cast_assign derivation | Superclass instance to a derived class | Erich Marschner | Why is $cast_assign required for assigning a superclass instance to a derived class instance - why is this not inherent in assignment? | Resolved in Arturo's email | Closed |
REV-23 | Mailboxes | Strict fifo? | Erich Marschner | Are mailboxes - i.e., FIFOs - accessible strictly in-order? If so, is that generally sufficient? | See Arturo's Response | Closed |
REV-24 | Keyword vs system task | Guidelines | Erich Marschner | Why should System Verilog define new features as system tasks rather than as keyword-based constructs? What principle should be followed to pick one approach or the other? | Use of system tasks just moves the namespace problem. Need ability to define context sensitive keywords. | Closed |
REV-25 | Use of system tasks versus new operators | New system tasks | Committee | Provide new operators instead of new system tasks. | Same as 24 | Closed |
REV-26 | Use of var vs ptr | Lack of syntax to indicate pass by reference on calling task/function | Kevin C | Email containing issue | Email containing response | Closed |
REV-27 | Use of [*] instead of [] | C/C++ uses [], why use [*] | Kevin C | Email containing issue | Email containing response | Closed |
REV-28 | Task/Function for cast | Task/Function for cast definition conflicts with task/function name space issues. | Arturo | Email containing issue | Email containing response | Closed |