Re: Hierarchical references

From: David Miller <David.L.Miller_at_.....>
Date: Thu Dec 20 2007 - 12:50:17 PST
Hello Ken,
I am hoping you can help me understand this a bit clearer.
When you mention that it is the delay that is the problem, do you mean 
returning the value of a variable at time n when probing it at time n+1 is a 
bad thing?

Since we have the restriction that OOMR probes on real variables will not 
propagate partial dependencies what is the danger other than the fact the value 
is a timestep old?

It is no worse than if a user does:
   analog begin
     y = x;
     x = x + 1;
   end

Trivial example, but here y will always be assigned the previous timestep value 
of x.

Regards
Dave


Ken Kundert wrote:
> All,
>     It seems like we are missing the point. It is the delay that is the
> issue, not the mechanism used for accessing the value. The delay is
> nonphysical and difficult to control. As a result, it does not make
> sense for values that change continuously. It only make sense for those
> that are piecewise constant. And we currently have the ability to
> hierarchically access piecewise constant variables as long as they are
> owned by the event-driven kernel.
> 
> Consider the following alternative. Let's maintain the current
> restriction on hierarchical access to variables owned by the
> continuous-time kernel, and instead make it easier to access those
> values from the discrete-time kernel. In doing so, we would be
> addressing two serious deficiencies in the language.
> 
> Let me give you an example ...
> 
> Consider the situation where one wants to have a single variable that
> indicates the status of a module that you can access hierarchically.
> Call the variable "fault" and make it 1 if the module is being used
> improperly and 0 otherwise. Further consider that there are two ways in
> which the module could be improperly used: if set and reset are both
> applied simultaneously, and if the supply voltage is less than 1V. One
> of these fault conditions is naturally handled by the event-driven
> kernel, and the other by the continuous-time kernel.
> 
> wire fault;
> integer faultVdd;
> assign fault = (set && reset) || faultVdd;
> analog faultVdd = V(dd) < 1;
> 
> The problem is, that this is not allowed in VerilogAMS. You cannot have
> a variable owned by the continuous-time kernel in either a continuous
> assignment statement or as a trigger to an @ statement unless it is
> protected by a cross function.
> 
> So, my suggestion is to allow variables, both integers and reals, that
> are owned by the continuous-time context, to be used in continuous
> assign statements and in @ triggers. Then using this method, one could
> easily copy values that are to be shared, like the fault variable in the
> example, into the discrete-time context.
> 
> -Ken
> 
> David Miller wrote:
>> Hi Sri,
>> just a couple of quick comments.
>> No problem if you want to restrict it to accessing the last accepted
>> time step value. We can always revisit this in later versions of the LRM
>> once people have the opportunity to use the feature and we get some
>> feedback.
>>
>> During the initial step (t = 0) the value returned should be the value
>> of the variable at time -0. I mean if I assign to a variable in the new
>> analog initial block construct, I should have access to that value when
>> executing an initial step.
>>
>> When accessing an OOMR variable in an analog initial block, then it
>> should return 0.
>>
>> What was the reason for the system task? It doesn't seem it serves any
>> purpose:
>> x = inst1.inst2.y;
>> x = $new_systask(inst1.inst2.y);
>>
>> This has the same underlying behaviour.
>> The system task would mean you need to have a different once for
>> integers, reals and strings. Also means that OOMR of variables inside
>> digital blocks vs analog blocks would be different.
>>
>> Sorry I missed the call last week, but I would be interested in hearing
>> the reason for the systask, maybe I am missing something.
>>
>> Cheers...
>> Dave
>>
>> Sri Chandra wrote:
>>> Hi all,
>>>
>>> As part of the last Verilog-AMS committee meeting there was one more
>>> suggestion to resolve the issue of accessing hierarchical variables
>>> (using out of module reference).
>>>
>>> The proposal was to disallow accessing the variables hierarchically
>>> but instead provide a system task mechanism which takes in the
>>> variable in hierarchical format as an argument to return its value.
>>> The value returned by the system task would be the value of the
>>> variable at the last accepted time point, and if the system task is
>>> used in the initial_step we can return a value of 0 as new time
>>> evaluation has taken place.
>>>
>>> cheers,
>>> Sri
>>>
>>> K. Cameron [SV] wrote:
>>>> David Sharrit wrote:
>>>>>> When accessing variable values and probes on named branches the
>>>>>> value as
>>>>>> per the last iteration shall be returned (to avoid race conditions)
>>>>>> and
>>>>>> without affecting any partial dependencies.     
>>>> I thought the "race condition" argument had been debunked, i.e.
>>>> analog processes are solved with a copy-in/copy-out semantic that
>>>> means the only possible race condition is during the copy-out.
>>>>
>>>> I'm also losing track of how many times we've been round through
>>>> this: there shouldn't be any semantic difference between
>>>> branches/variables accessed locally or through OOMRs - if there is it
>>>> will just cause unnecessary errors.
>>>>
>>>> Kev.
>>>>
>>>>> Perhaps I'm just confused, but even after I consider this to just be
>>>>> talking
>>>>> about variable values, I'm still uncertain and concerned as to what
>>>>> this is
>>>>> really trying to do or provide.  What exactly is the "value as per
>>>>> the last
>>>>> iteration"?  Presumably that is, or could be, the previous time
>>>>> point value
>>>>> in a transient simulation.  For a time varying variable, will that not
>>>>> result in fairly unpredictable and inconsistent results, as it will
>>>>> depend
>>>>> on the particular timestep involved? And what does it even mean for
>>>>> other
>>>>> analysis types, such as AC or HB or even DC?  Without derivative
>>>>> information, it seems you could either be introducing convergence
>>>>> failures
>>>>> with incorrect Jacobians, or inconsistent (incorrect) results, with
>>>>> state
>>>>> variable dependencies seeming to exist in transient simulations but
>>>>> not in
>>>>> AC simulations.
>>>>>
>>>>> It seems there were some major reasons why OOMR access to variable
>>>>> values is
>>>>> disallowed in the present LRM, and I don't yet see how these issues
>>>>> have
>>>>> been cleanly, accurately or practically resolved.
>>>>>
>>>>> David
>>>>>
>>>>>
>>>>>
>>>>>   
> 

-- 
=====================================
-- David Miller
-- Design Technology (Austin)
-- Freescale Semiconductor
-- Ph : 512 996-7377 Fax: x7755
=====================================

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Thu Dec 20 12:53:33 2007

This archive was generated by hypermail 2.1.8 : Thu Dec 20 2007 - 12:53:47 PST