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