Re: Revised issues list
Subject: Re: Revised issues list
From: Jonathan Sanders (jons@cadence.com)
Date: Sun Feb 25 2001 - 17:17:46 PST
Ian,
Working to catch up on my email. Responses below.
Jon
At 03:13 PM 2/5/01, Ian Wilson wrote:
This is a reduced list of issues,
with proposals or workarounds, and
with suggested 'bins'.
--ian
Verilog-AMS 2.0 LRM Issues (revised)
Ian Wilson
Date: 02/04/01
3.4.3.{2,3} Empty disciplines; undeclared nets [bin: disciplines]
Description allows for netlists with uncommitted interconnect.
The intention is clear although the explanatory text is highly
ambiguous.
Alternate proposal: treat 'wire' (and other intrinsic Verilog types)
as
pseudodisciplines. This supports the LRM examples (such as connect
modules
of the wire_to_electrical variety without requiring changes to user
libraries).
The net type property is treated as a pseudodiscipline (not sure what it
means
but I'll explain my use of your term) as defined by the LRM
(3.4.3.3). For net types
other than "wire and tri" they are digital domain and will pick
up the default
discipline unless defined. For "wire and tri"
if they connect to digital behavioral
code they are also digital domain and will also pick up the default
discipline unless
defined. For nets of type "wire or tri" that do not
connect to digital behavioral they
are treated the same as interconnect without a net type and will be
resolved
using the discipline resolution method. The LRM does describe
this although
the alias net type of wire, "tri" was not included and it could
probably be written
in a more obvious way.
3.5 Real net declarations [bin:
wreal]
Changed (and relocated) from previous definition.
This is an attempt to formalize $realtobits(), etc. Most of the
semantics and syntax is missing
from the definition. No rules provided for conversions with other
net types. Expect Verilog-2k
to conflict. This looks like a highly unportable feature.
Proposal: move this to an 'optional features' Annex.
This feature has been praised by almost every customer I have shown it
too
as they hate $bits2real(), etc. I would like to better understand
your concerns
on what is missing, note the syntax is shown in A.4 in the BNF.
Also, where do
you expect the conflict from Verilog 2K? I think we need to
get them to add/support
this functionality but it is of high value for faster
simulation. When you say conversion
to other net types do you mean Connect Modules or to a digital
wire? It clearly
states that connection to other net types is illegal in 3.5
With that being said there are a few open issues which I know of and
presented
in my list that do need to get addressed to prevent the user from doing
extra
work to get pass these issues. Of course the examples were also in
error and
I provided corrections.
3.6 Default discipline [bin:
disciplines]
This applies to discrete disciplines only. Requires further
definition (e.g. relationship
with `reset_all).
Proposal: change name (?default_discrete_disc) to make clear. Add to set
of things
cleared by `reset_all.
I'm ok with this.
4.4.1 Restrictions on analog
operators [bin: ?]
The LRM introduces null arguments to these and other
functions; this in turn introduces the need for various default values
(which are not all
provided by the LRM).
Proposal: add table of default values for analog operators, etc.
4.5 Analysis dependent functions [bin: ?]
Meaning of some cases (see also initial_step) is not clear for AC
analysis, etc.
Proposal: add words to make clear what happens on first/any/last steps of
AC
analysis, and what happens to sequential code such as
$fopen().
When we deal with 1364-2001 we will have to address all of the file I/O
issues
to ensure that they read and write at predictable times in the analog
block. Can
we delay the $fopen() until we get to IEEE and address them all
together?
6.7 Events [bin: MS]
Constructs like @(posedge clk or cross(V(1), 1)) require analog/digital
synchronization
semantics.
Proposal: provide rewriting rules for new constructs in terms of
existing
structural and single-domain language.
7.3.3 Real valued ports [bin: wreal]
Require considerably more in the way of definition, especially how these
interoperate with
existing Verilog-D types, semantics, and syntax.
Proposal (see above): move to Annex.
8.2.{1,2} Domains. Contexts [bin: MS]
The concept of variables being associated with a particular domain
depending on assignment is
ambiguous.
Proposal: disallow cross-domain access to variables.
Highly disagree. As we discussed in the last effort we would
consider removing
this restriction at a later date but chose to be restrictive for
now. Not sure how
it is ambiguous as if it shows up on the LHS of both an analog block and
an initial
or always block then it is an error. Otherwise it is owned by the
block that has it
on the LHS. Again, customers are finding this feature quite
valuable and several
while desiring us to remove the restriction have told me they understand
the
rational for doing that for now.
8.3 Behavioral Interaction,
8.3.6 Concurrency [bin: MS]
Totally inadequate to write portable code that accesses variables from
multiple domains.
This is important since these mechanisms are proposed for constructing
connect modules, etc.
Whole area requires some clear semantics and possibly additional
synchronization constructs.
Proposal: either disallow mixed domain access to variables, or add
constructs
to allow deterministic code to be written in the concurrent Verilog
environment.
For example: add semaphore to language.
Ian, I think we are going to need your help in defining what you need to
clarify this.
We have implemented this and I have trained many users without this being
a problem
so while I am opposed to removing mixed signal from a mixed signal
language I am
certainly open to adding clarifications that will allow your product and
mine to give
the same answers. Could you at some time provide examples of
the problem you
see as you have made these statements since the 2.0 timeframe and we
attempted
to address your concerns with section 8.3.6, maybe examples will help us
see
what else you expect to see.
8.4 Discipline Resolution [bin:
disciplines]
Proposal: there are at least two competing practical view on this: the
'islands'
approach, and the 'common view' approach. Put something simple in Chapter
8, and
defer implementations to an Annex.
The issue of multiple digital islands or a single digital island (for
digital nets of the
same disciplines on a signal) does need to be resolved as part of the
semantics for
resolution. I am looking for arguments on both sides before I cast
my vote but this
is not an implementation issue in my mind.
8.4.3 Connection of continuous-time
disciplines [bin: disciplines]
Makes it illegal to have incompatible continuous disciplines on the same
net (previously
undefined). Antrim AMS allows this; standard rules for connect module
insertion apply.
User has complete control and it’s a useful feature.
Proposal: remove restriction.
Not sure if a clarification effort is the time to remove restrictions
like this but I
understand the desire. The other end of the spectrum is that we did
not connect
modules being used to insert real components such as transducers into the
design as that is a misuse of autoinsertion and thus the reason for the
restriction.
Down the road we might also consider allowing CM's with more than two
ports but
I think those issues should be pushed out for now.
8.10 Driver Access and net
resolution [bin: MS]
These are defined to work in connect modules only. Connect modules
are not allowed
to be instantiated as normal modules. Result: how can a user debug a
connect module?
Proposal: remove restrictions on 'manual' instantiation of connect
modules. Define
results of driver access functions in different use
cases.
Ian, don't see where there is a restriction on manual instantiation of
connect module,
can you show me the sentence and or section? The purpose of these
functions is
as a modeling tool and not a debugging tool but I don't see how this
prevents debugging
either? (cannot use function to find CM drivers?)
As for these only working in CM's, that is a restriction we started with
but certainly
we believe that the digital folks will desire this type of
functionality. I know that there
is already a system task $count_drivers out there but this I think is
better and we
should work with the digital team to remove this part of the
restriction.
10 System tasks and functions [bin:
?]
Proposal: $table has been offered. May want to convert to analog operator
status
or add to an Annex.
While I believe a table model will add much value did the committee agree
that the
current effort was for clarification and that this would be addressed at
a later time?
I have not spent cycles analyzing this to the requirements of my users
and was not
planning on it until later this year.
D Standard definitions
The file names have changed from <foo>.h to <foo>.vams.
When? Why?
Because several on the committee felt that these were not header files
but
definitions, also note that disciplines was missing the plural
"s". This was
changed early in the 2.0 cleanup and is one of many things that has
effected
my existing users. Fortunately we can make this one invisible by
linking these
files together so that either work. Unfortunately changing $limexp
to limexp and
boundstep to $boundstep among others are much more painful for the
hundreds
and thousands of Verilog-A modules my users must convert.
E SPICE compatibility
Material in Annex is Spectre-specific (see syntax for sources for
example).
Proposal: use something neutral like SPICE3.
Additional constructs required to import existing Spice in an automated
way -
in particular, global nodes/global parameters.
Proposal: details of these as extensions available if there's
interest.
I hate to share with you bad news but the structural syntax of Spectre is
based
on the SPICE3 MOS model card. If one want to argue the port
names and
parameter names then there are possible issue except that you find that
SPICE
syntax sucks and it is not consistent nor complete. ( I spent a
long year dealing
with attempting to support every SPICE syntax version known to man kind
and
it will make you crazy). Before I go farther lets make sure we
understand and
hopefully still agree to the purpose in annex E.
The pupose of SPICE support in Annex E was not to support the SPICE2G6,
SPICE3,
HSPICE, ELDO, SABER, SPECTRE, PSPICE and any other specific syntax
but
to provide a method to access the models (not syntax) of these
simulators in the
Verilog structural netlist.
So you look at the SPICE3 resistor statement (from the SPICE3
manual):
RXXXXXXX N1 N2 VALUE
Are the portnames N1 and N2? what is the name of the
parameter? r, R, res, resistance, ...
Of course some of us also remember the optional TC parameter:
TC=x,y (TC=.0005, .0001)
How does this map to Verilog?
Also, if you believe that the portnames are N1 and N2 then for controlled
sources
you will need to always ask the user to escape them due to illegal
characters:
GXXXXXXX N+ N- NC+ NC- VALUE
Needless to say many SPICE devices do not have a
"module" name, would you name
the above device "G" or vcvs or something else?
If you remember many of you requested that we break the sources into
separate
functions to be SPICE like and which clearly is not Spectre syntax.
It is also
something that our installed based highly opposed, thus we will support
the method
defined by the committee and what our users want and expect.
I will agree that many of the undefined parameters name and even some of
the
defined ones like V1 and V2 in the sources look to be the same as Spectre
and
several other simulators like HSPICE, PSTAR, ....
If we want to rename all of the ports and parameters I recommend rather
than trying
to match SPICE which will not be possible due to illegal characters and
missing
data that we pick names that make sense.
-Jon
This archive was generated by hypermail 2b28
: Mon Feb 26 2001 - 09:02:07 PST