From: Shalom Bresticker (Shalom.Bresticker@motorola.com)
Date: Sun Feb 22 2004 - 02:53:06 PST
Dennis,
I have attached an IEEE P1364 Position Paper from 12.17.1993.
It might be useful to review it.
Like it or not, the Cadence and Synopsys simulators together have the vast
majority of the market,
according to the latest sales figures I have seen, and 1364 usually has no
interest in deliberately contradicting
their behavior where all of them agree.
1364 can sometimes be more or less restrictive than them,
but it needs a very good reason to do the opposite from them.
There are mistakes in 1364. That is why the ETF exists.
A classic mistake was in the definition of $readmem, for example.
Yes, it would be nice if all of us had access to XL. It certainly does help me
in my work that I have access
to XL, NCV, and VCS. And if I had access to ModelSim, I would also check its
behavior as well.
If you want to donate me a copy, I'll be glad to report on its behavior as well.
By the way, I don't know of any simulator which is today totally compliant to
1364-2001.
And when I find bugs in the simulator behaviors, I report them to the vendors,
and I request them to change their behavior to be compliant.
Every time I find a discrepancy, I consciously consider and try to decide
whether it is more logical for the tool to change or for the standard.
Shalom
"Brophy, Dennis" wrote:
> I guess it is nice that the opportunity exists for one entity to match XL while the rest of the community must rely on the IEEE work as the standard's official record of behavior.
>
> I understand that these statements are true and an accurate reflection of many Verilog users, but only serve to weaken and tarnish this group and the profession since it only reads to me that the work of this technical group is to a great degree irrelevant.
>
> Maybe all members of the team should be given copies of XL to help in the cause of bringing the LRM into alignment with XL.
>
> -Dennis
-- Shalom Bresticker Shalom.Bresticker@motorola.com Design & Reuse Methodology Tel: +972 9 9522268 Motorola Semiconductor Israel, Ltd. Fax: +972 9 9522890 POB 2208, Herzlia 46120, ISRAEL Cell: +972 50 441478[x]Motorola General Business Information [ ]Motorola Internal Use Only [ ]Motorola Confidential Proprietary
Principles
We believe that the activities of the IEEE Working Group on Verilog
Standardization should be governed by the following principles:
1. Standardization must happen ASAP to be of maximum benefit.
Verilog is already a de facto standard. The goal of this working
group is essentially to codify the existing standard. Future
development should proceed from a firm base. The existing standard
is the base.
2. The Specification must be clear, unambiguous, implementable,
and not over-constraining.
Because Verilog is a de facto standard, there is a tendency to
believe that the Verilog-XL implementation is the standard. The
main work of this effort is to separate the essential semantics
of the Verilog language from the implementation-dependent quirks
of the Verilog-XL implementation. Furthermore, it is imperative
for this effort that the result not constrain future implementations
unduly. This would render the standard effectively obsolete.
Implications
1. Nothing should be in the spec which has not been implemented by
someone.
There have been many proposals for enhancements to Verilog, many of them
quite worthwhile. Several have been incorporated into the LRM 2.0 which
we are using as a base for the spec. However, none of the enhancements
which have not been implemented are known to be unambiguous, implementable,
and useful to the general user community. Thus, for our base, everything in
the spec should be demonstrable.
2. Nothing should be in the spec which is implementation-dependent.
There are many implementation-dependent features which should not be in
the spec. The obvious ones are things like vector length limits. In general,
most implementation-dependencies should be defined as such, e.g. the vector
length limit is implementation dependent.
3. The spec should not codify Verilog-XL bugs.
There are many Verilog-XL bugs and quirks. This is not to denigrate Verilog-XL.
Any program as large as Verilog-XL has bugs which have become features. We must
separate these from desired functionality.
4. As little as possible in the spec which will prevent future novel
or advantageous implementations (e.g. parallel).
There are Verilog-XL semantics which are there simply because that's the way
it was implemented. If some of these are codified in the spec, it will unduly
limit future implementations. We already see this with Verilog-XL/Turbo, where
event ordering is different from Verilog-XL (and from Verilog-non-XL).
Examples of the above issues
1. port collapsing
Port collapsing is described in the LRM 2.0. This is not part of the essential
semantics of Verilog. Verilog can be, and has been, implemented without using
port collapsing.
2. event ordering
In general, event ordering is not described in the LRM. By and large, this
should remain the case. The scheduler semantics probably should be described
(the "XL" scheduling semantics), while other event ordering (e.g. assign
statement vs. wire assignment) should not.
3. attributes
Attributes have not been implemented by anyone, and as such the specification
is suspect. It is unknown if it is consistent and sufficient for
implementation.
4. memory propagation
Verilog-XL propagates any memory element change to all expressions sensitive
to any element in the memory. This is simply a quirk of the Verilog-XL
implementation, and should not be codefied.
5. evaluation ordering (lhs expressions vs rhs expressions)
Verilog-XL evaluates a lhs expression before evaluating a rhs expression,
reulting in a deterministic ordering of side-effects. This should be
defined as undefined, as it is in C.
What should be added - detail
There is a great deal of detail which should be added to the LRM to make it
an adequate spec. Some examples are:
parameter value resolution
It is not specified what the precedence of multiple defparam
assignments is.
macro evaluation details
The spec does not say if, after expansion, the result is
re-evaluated for further macro expansion or not.
out-of-range bit&part selects
The result of accessing out-of-range bit and part selects should be
defined. Verilog-XL does funny things here.
system task definitions
Many system tasks are effectively part of the language. As of this
writing, they are still not documented in the LRM.
Proposal for producing a Verilog-HDL Specification
Our proposal is the following:
I. Begin with LRM 2.0.
II. Seriously consider removing those parts which have not been implemented
by any simulator.
III.Remove all Verilog-XL implementation-specific description (or define
as such).
IV. Add clarification for behavior which is either known to be wrong or
ommitted.
Specifics:
---------
1. take out all references to collapsed ports
2. take out all references to "vectored" and "scalared"
3. remove attributes
4. remove signed and unsigned operator attributes
5. define unspecified event ordering as undefined
6. define parameter assignment ordering
7. macro expansion clarification
8. port direction inference - define as implementation dependent
9. signed operation and sized operation clarification
10. widths on parameters
11. use of x bits in integers (repeat counts, etc.) undefined
12. side-effects in rhs of continuous assignment evaluation should be defined
as implementation-dependent (this one may be controversial)
13. propagation of memorys should be implementation-dependant
14. consistency of port declaration sizes
15. out-of-range bit & part selects (undefined)
16. rhs & lhs expression ordering should be defined as undefined
(affects side-effects)
17. initial value propagation of x's
18. unknown bits in memory index should be documented
19. clarification of recursive functions -- should be implementation-dependent
20. $save/$restart/$incsave should be removed
21. $protect/$endprotect/$protected/$endprotected should be removed from the
OVI spec unless Cadence releases the protection algorithm
22. $dumpchange should be added to page B-42
23. define the order between initial and always, or define it to be undefined
24. value-change-dump format should be documented
25. define semantics of mixed real and non real variables in expressions.
I.E., does reg [31:0] a; real x; ... a = x;
act like a = $realtobits(x); or like a = $rtoi(x) ?
Does a = x + 0.5; convert arguments to fixed before the
addition operation, or after?
26. When defining $display(), allow %v to accept any variable type.
This archive was generated by hypermail 2.1.4
: Sun Feb 22 2004 - 02:41:38 PST
and
sponsored by Boyd Technology, Inc.