Re: multiple analog blocks

From: Kevin Cameron <kevin_at_.....>
Date: Wed Dec 20 2006 - 09:38:09 PST
Marq Kole wrote:
>
> Kev,
>
> I like your proposal, but I would suggest to construct it more like a 
> continued analog sequential block. By moving the continuation to the 
> analog sequential block level, you could say something like:
>
> integer i;
>
> analog
>   begin : init1
>     i = 1;
>   end
>
> analog
>   begin : init2
>     i = 2;
>   end
>
> analog
>   continue : init1
>     i = i + 1;
>     $strobe("i = %d", i); // continue named block init1
>   end
>
> Having a named continued analog sequential block without a named 
> sequential block may be allowed to support the use of continued analog 
> sequential blocks in loop generate statements. Alternatively, the user 
> is required to create a (possibly empty) named analog sequential block 
> before the generate construct.
>
> analog
>   begin : loop
>     // This shouldn't be needed for ease of use
>   end
>
> for (i = 1; i < N; i = i + 1)
>   analog
>     continue : loop
>       I(out[i]) <+ (V(in)-V(out[i]))/res;
>     end
In the syntax I suggested previously the  "continue" is optional on the 
first block so the following would work (standalone):

 for (i = 1; i < N; i = i + 1)
  analog begin :
    continue  loop
      I(out[i]) <+ (V(in)-V(out[i]))/res;
    end

However it may be useful to use a block before the generate to declare 
variables etc. only used in the following "continue" blocks so that 
their scope is limited to the concatenated blocks.
> By allowing continued analog sequential blocks only within analog 
> procedural blocks spillage into the digital language space can be held 
> at bay. :-)
>
> The concatenation of analog procedural blocks is now shifted to the 
> concatenation of analog sequential blocks (even if they appear in 
> different analog procedural blocks). But the user is actually in 
> control of the concatenation -- it is no longer a hidden process. On 
> the other hand, separate analog procedural blocks still appear as 
> essentially concurrent, allowing activity-level optimization (as is 
> assumed in Geoffrey Coram's MOS11 example on the Designer's Guide 
> website) to be handled at the named analog sequential block level.
>
> There's still a few loose ends (no show stoppers, though):
> - do we allow unnamed continued analog sequential blocks? If so, what 
> do they continue?
I don't think it's a good idea to have concatenation for unnamed analog 
blocks.
> - allow continued analog sequential blocks wherever analog sequential 
> blocks are allowed to appear? Or restrict them to occur only in analog 
> procedural blocks (not inside another analog sequential block)?
I would say outer block only.
> - disallow declaration of local variables in (named) continued analog 
> sequential blocks (no analog block item declaration)? What other 
> restrictions do continued analog sequential blocks need with respect 
> to (named) analog sequential blocks?
I think you would need to work through some examples to show that won't 
make life difficult, but it's the kind of restriction you can relax 
later, however, as mentioned above I think it may be useful to declare 
things in at least the first block of the set.
>
> - possible concurrency issues with multiple concurrent analog 
> procedural blocks:
>   * switch branches: signal/disallow contributing to a switch branch 
> in concurrent analog procedural blocks ?
There isn't much difference between the concurrent analog blocks in the 
same module and those in separate modules, so I see no need for any 
restrictions.
>   * shared variables: should they be owned by particular blocks? does 
> that solve anything? all items in a vector variable, vector net, or 
> vector port to be owned by the same analog procedural block?
I think (once again) that if you want to limit scope on items then it 
should be explicit, i.e. add keywords like "private" or "local".

Kev.
>
> Cheers,
> Marq
>
>
> Marq Kole
> Competence Leader Robust Design
>
> Research
> NXP Semiconductors
Received on Wed Dec 20 09:38:12 2006

This archive was generated by hypermail 2.1.8 : Wed Dec 20 2006 - 09:38:14 PST