RE: [sv-bc] Proposal on striking the 2 paragraphs

From: Mark Hartoog <Mark.Hartoog_at_.....>
Date: Tue Apr 12 2005 - 22:10:57 PDT
The other issue here is 2-state variables/wires and combinational logic. Even without
initialization, 2-state variables are a problem at time zero. P1800 has 2-state variables, 1364 does
not. The 1364 time zero initialization works ok for 4 state variables, but it just does not work at
all for 2 state variables. The P1800 time zero initialization works with always_comb for both 4
state and 2 state variables. The P1800 initialization/time zero behavior for 2 state or 4 state
variables with traditional always @ blocks for combinational logic does not work very well, which is
what the ballot issue is about.

Consider this example.

bit x, y, z;

always_comb y = ~x;

always @(x) z = ~x;

The problem here is that the default values of x, y, and z is 0. If the always_comb and always @(x)
blocks are going to function as combinational logic, then y and z should transition to 1 at time
zero, but there is no event to trigger either block.

With the P1800 time zero behavior all always_comb blocks run at time zero, and so y will correctly
go to 1, but there is never an event to trigger the always @(x) block in either P1800 or 1364. 

With the 1364 time zero behavior, neither the always_comb or always @(x) blocks are triggered.

Short of forcing events on all 2 state variables after all always blocks are started, there is no
way to extend the 1364 time zero behavior to work for 2 state variables. 

When we have discussed this in the past we concluded that the current P1800 time zero/initialization
behavior is the best compromise between strict backwards compatibility with Verilog simulator
implementations (it is technically compatible with the 1364-2001 LRM), efficiency at time zero and
the new requirements of the P1800 language.

> -----Original Message-----
> From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On 
> Behalf Of Shalom.Bresticker@freescale.com
> Sent: Tuesday, April 12, 2005 7:42 PM
> To: Steven Sharp
> Cc: sv-bc@eda.org; Brad.Pierce@synopsys.COM
> Subject: Re: [sv-bc] Proposal on striking the 2 paragraphs
> 
> Strictly speaking, it is an issue in 1364 in the sense that 
> 1364 allows you enough rope to hang yourself. In practice, 
> everyone has figued out how to do it correctly.
> 
> It is a big issue in 1800 because 1800 REQUIRES you to do it 
> in a way which does NOT work correctly.
> 
> Shalom
> 
> 
> On Tue, 12 Apr 2005, Steven Sharp wrote:
> 
> > 
> > >From: "Brad Pierce" <Brad.Pierce@synopsys.com>
> > 
> > >Isn't this a 1364 issue? 
> > 
> > The requirement on initializers came from 1800.  In 1364 we could 
> > require always blocks to run before initial blocks (which includes 
> > initializers).  This definitely seems like an issue in 
> 1364.  I don't 
> > know whether it is appropriate to change the behavior of 
> initializers 
> > in 1364, but I guess we could.
> > 
> > I also don't know whether changes can be made to 1364 based on a 
> > ballot comment on 1800.  Technically they are still separate 
> > standards, being balloted independently, right?
> > 
> > Steven Sharp
> > sharp@cadence.com
> > 
> 
> -- 
> Shalom.Bresticker @freescale.com                     Tel: 
> +972 9  9522268
> Freescale Semiconductor Israel, Ltd.                 Fax: 
> +972 9  9522890
> POB 2208, Herzlia 46120, ISRAEL                     Cell: 
> +972 50 5441478
>   
> [ ]Freescale Internal Use Only      [ ]Freescale Confidential 
> Proprietary
> 
Received on Tue Apr 12 22:11:20 2005

This archive was generated by hypermail 2.1.8 : Tue Apr 12 2005 - 22:12:31 PDT