Re: implicit event expression lists

From: Don Mills (mills@lcdm-eng.com)
Date: Fri Feb 01 2002 - 09:59:51 PST


Precedence: bulk

Maybe I am a little daft, but if the bit or part is a constant, how will the sensitivity list ever be triggered by it. I would think that the behavior of @(*) should follow the same behavior as before the @(*) was available. That is if I had

1) A bit-select of a vector

    reg [31:0] vector;

    always @(vector) or @(vector[5]) ??
       out = vector[5];

The @vector[5] would be sufficient and should be legal (correct me if I am wrong here.). Having the whole vector present in the sensitivity list will also work but would slow simulation down.

>From a synthesis perspective, not that this has anything directly to do with the question, but Synopsys will not allow the sensitivity to only a bit of a vector. Synopsys requires the whole vector to be present in the sensitivity list even if only one bit is to used. This made for inefficient simulations. By using the @(*) both simulation and synthesis could be satisfied and efficient. Simulation could interpret the @(*) to be only the bit/bits being using in the always block and synthesis could interpret the @(*) to be the whole vector. This variation on interpretation between simulation and synthesis will not change the functional meaning of the code in any way.

Peter Flake wrote:

> Precedence: bulk
>
> Hi Dennis,
>
> I think that if the bit or part is constant, then sensitivity should be
> limited to that bit or part. If the bit or part is variable, it should be
> the whole.
>
> Peter.
>
> At 11:52 AM 1/31/02 -0700, Dennis Marsa wrote:
> >Precedence: bulk
> >
> >Hello,
> >
> >Reading section 9.7.5 "Implicit event_expression list", I am
> >not clear on what the defined behavior of @(*) should be when
> >the following kinds of references appear in the controlled
> >statement.
> >
> >1) A bit-select of a vector
> >
> > reg [31:0] vector;
> >
> > always @(*) // @(vector) or @(vector[5]) ??
> > out = vector[5];
> >
> >2) A part-select of a vector
> >
> > reg [31:0] vector;
> >
> > always @(*) // @(vector) or @(vector[3:0]) ??
> > out = vector[3:0];
> >
> >3) An array element select of an array
> >
> > reg [31:0] array[1:100];
> >
> > always @(*) // @(array) or @(array[10]) ??
> > out = array[10];
> >
> >Basically, the question is, if only a part of a signal is referenced,
> >should the generated event_expression list include just the part
> >referenced, or the entire signal (or array)?
> >
> >All of my examples above show constant indicies. Should the
> >behavior differ if the indicies are non-constant?
> >
> >Thanks,
> >
> >Dennis Marsa
> >Xilinx, Inc.

--
==========================================================
Don Mills
LCDM Engineering     (Logic, Coding, & Design Methodology)
mills@lcdm-eng.com                        www.lcdm-eng.com
801-282-6560  Office PHONE
801-641-5882  Mobile PHONE
4158 W. Ben Armine Cir.,      South Jordan, UT  84095-9101
==========================================================


This archive was generated by hypermail 2.1.4 : Mon Jul 08 2002 - 12:55:35 PDT and
sponsored by Boyd Technology, Inc.