Editor's Note: The rumors about ViewLogic buying Chronologic Simulations
  are true.  It was just announced that Chrono was bought for $26 million.
  Chrono is to remain a separate division of ViewLogic.  When asked about
  having two divisions of the same company having mutually exclusive market
  goals (Vantage pushing VHDL and Chrono pushing Verilog), Alain Hanover,
  President of ViewLogic replied:

   "It's always been my dream to give my customers a choice between
    ViewLogic & ViewLogic.  Vantage is a great VHDL simulator.  We were
    OEMing CAD Artisans' Verilog product for over a year.  We weren't
    making a lot of headway because we kept losing benchmarks to Chrono.
    We decided we rather switch than fight.  Let the customer vote
    for Verilog or VHDL with their dollars.  We're HDL neutral."

  When asked how this impacts Synopsys, Aart de Geus, President & CEO replied:

   "Here's a good example of industry interdependency.  Synopsys supports VCS
    (the Chrono Verilog simulator) because Chronologics has been a forward
    looking adoptor of SWIFT - the interface that guarentees all LMC models
    will work with a specific simulator.  Interestingly it appears that
    ViewLogic has positioned itself to now be a major competitor to Cadence
    in the simulation market yet it'll remain Synopsys/LMC compatible."

  Personal Opinion: With Cadence and ViewLogic becoming neutrals in the
  Verilog/VHDL wars (because they offer both products) it will be only
  a matter of time until Mentor and Synopsys will follow.  The days when the
  visiting EDA salesman tries to strong arm you into a specific HDL because
  his company only sells a simulator in that HDL are numbered.  Thank God
  (and market forces!)
                                             - John Cooley
                                               the ESNUG guy

( ESNUG 184 Item 1 ) ---------------------------------------------- [4/1/94]

Subject: ( ESNUG 183 #4) Solution For Problem w/ Multiple Clock ATPG Designs

> One problem that I do, however, run into and haven't gotten to the bottom of
> yet, is that the Test Compiler knows nothing about propagation delays and it
> goofs up because of this, when you have several asynchronous clocks (when
> it propagates values from blocks of one clock to block of another clock).
> My ASIC vendor simulated scan vectors on their gate-level simulator and it
> always has miscompares.  Has anyone else seen this problem and have any
> words of wisdom about fixing it?  Hope this helps.

                          ---   ---   ---   ---

From: pete@sei.com (Peter Johnson)

This user mentions that he has problems with test compiler not knowing about
propagation delays, and having problems as a result.  Here's how I handle it.

First, even if Test Compiler knew about timing, it could not fix this problem.
The problem arises because there is skew between the different clocks.  Since
a tester can't apply both clock inputs at the same time, there is no way to
even predict the skew, or even know which clock will arrive first.  Most
important is to never put flip-flops with different clocks on the same scan
chain (for this rule, falling edge flip-flops are considered to have a
different clock than rising edge flip-flops).  This will solve any setup/hold
problems caused by skew between clock while scanning in patterns.  The other
rule is that you only apply one of the clocks when you drop out of scan mode
and capture the test response.  Unfortunately, this means that you run your
patterns multiple times, one time for each clock.

So, to summarize, if you have two clocks A and B, run your patterns, clocking
only A when applying the pattern (when you drop out of scan mode).  Then run
the patterns again, clocking only B when applying the pattern.  

  - Peter Johnson
    Silicon Engineering, Inc.

                           ---   ---   ---   ---

From: jwk@melardc.net.netcom.com (John Kesterson)

John, we are not using LSI as our vendor; however, we have encountered similar
problems to the one presented here.

We just completed an ASIC design that contained several clocks and several
scan chains.  If you have a chain that is made op of flops that are clocked
with more than one clock, then you must find a method of deterministically
scanning in the test pattern.  I use the word deterministically because
if you use the same clock stimulus on two clock pins of the ASIC there will
be clock skew between the versions of those clocks as seen by the flops
themselves.  Consider the following example.  Given that there are two
flops - A and B.  There are also two clocks C1 and C2.  In the scan test
mode, suppose the same clock is inserted on C1 and C2.  After the clock edge
you would hope that flop A contains the new scan in value and that flop B 
contains what flop A had before the clock edge.  But if C2 is seen by flop B
late, then both flop A and B end up with the new scan in value and we
have not therefore sucessfully loaded the intended scan pattern.

Test compiler DOES take timing into consideration when it creates a scan
chain, but it does NOT take into consideration timing BETWEEN two different
clocks.  The workaround is easy.  Don't stimulate both clocks (C1 and C2)
with the same clock.  Use the create_test_clock command to create different
phases of the clock to use on each clock pin.  The timing difference between
the clocks obviously must be greater than the setup and hold times.  Here is
an example of how it is done in a script:

     create_test_clock C1 -period 500 -waveform { 100 200 }
     create_test_clock C2 -period 500 -waveform { 300 400 }

With different phases of the clock one can see that it is still possible to
deterministically insert any desired pattern and we very happily discovered
that test compiler uses this information.

I have used this and have seen all of the miscompares eliminated when doing
so.  When generating the vectors, it skips the random vectors and starts out
with the deterministic ones.  It takes a little longer to generate the vectors
but they are not longer!  I hope that this helps.

  - John Kesterson
    Mitsubishi R&D Center


( ESNUG 184 Item 2 ) ---------------------------------------------- [4/1/94]

From: munoz@aurfs1.aur.alcatel.com (Ron Munoz)
Subject: (ESNUG 180 #4 182 #1)  Synopsys Test Compiler w/ LSI Logic

John,

I just read the latest on this posting with a great deal of interest as our
company was also in the process of deciding whether we'll use the Synopsys
ATPG output or LSI's ATPG tool.  The main reason (according to LSI) for using 
LSI's tool is that it creates a fault dictionary that can be used to debug 
the vectors on the test machine if there is a problem.  This is a great 
feature and should be incorporated into Test Compiler (hint, hint).

CTV, which is what the original question was about, is Synopsys's ATPG vector
formatter specific to LSI.  Since CTV is a fairly new product, our Synopsys 
sales rep gave us a couple of references.  One of the references was in the
process of using CTV to format the vectors, while another had already used it
and was awaiting prototypes back from LSI.  Both references commented that 
they thought the tool was simple to use and one only found some minor problems
with syntax errors.  The one reference has received his prototypes and LSI
reported no problems using the CTV formatted vectors on their test machine.
Based on this information, we are proceeding with Test Compiler's ATPG output
formatted with CTV tool (naturally, a separate cost).

  - Ron Munoz
    Alcatel Network Systems


( ESNUG 184 Item 3 ) ---------------------------------------------- [4/1/94]

From: rray@poci.amis.com (Russell L. Ray)
Subject: (ESNUG 183 #1) Model Tech / Synopsys VHDL Differences

John, I love ESNUG and what it does.  Keep up the good work.

In regards to ESNUG 183 #1, I have done a lot of comparisons between Model Tech
and Synopsys.  In addition to the items listed by Robert Hunter, I have found
that Model Tech does not support an SDF file.  Of course, this is not
necessary for a behavioral or RTL simulation but is essential for accurate
gate level simulation.  Fortunately, I understand that they are working on an
SDF reader now.

  - Russell L. Ray
    American Microsystems, Inc.


( ESNUG 184 Item 4 ) ---------------------------------------------- [4/1/94]

From: jhollins@adaptec.com (Jack Hollins x2309)
Subject: Getting Nice Verilog Out of Synopsys

John,

Here's a summary to get rid of tri wires, tran primitives, assign statements,
and backslashes from the Verilog netlist that is created by the HDL Compiler
when writing out Verilog from Synopsys:

    1. Set the io variable "verilogout_no_tri" equal to true before writing
       out the design to get rid of tri wires and trans primitives.

    2. Set the compile variable "compile_fix_multiple_port_nets" equal to
       true before compiling the design to get rid of assign statements due
       to ports connected to the same net.

    3. To get rid of assign statements due to nets connected to power or
       ground create a library element using the Library Compiler that
       represents a ground cell in a technology library or find a technology
       library that contains a ground cell and then map the ground connection
       to this cell.  The cell description for the ground cell may be the
       following:

            library (pwr_gnd) {
              cell (GND) {
              area : 1;
              pin (Z) { direction : output; function : "0"; }
              }}

       By adding this new library to our target_library variable (i.e.
       target_library = target_library + {pwr_gnd.db}) and recompiling the
       design we get the following netlist from the HDL Compiler:

    4. Set the io variable "read_array_naming_style" to the legal Verilog
       naming style "%s_%d" before reading in the design to get rid of
       baskslashes.


If I take the following test case:

module test (a,b,z,y,x);
input [4:0] a,b;
output [4:0] z;
output [3:0] y;
inout x;
wire [4:0] ztemp;
assign ztemp = a + b;
assign z = ~ztemp;
assign y[0] = a[0];
assign y[1] = 1'b0;
assign y[2] = z[2];
assign x = ~a[0];
endmodule


The HDL Compiler produces the following Verilog netlist without the four steps:

module test ( a, b, z, y, x );
input  [4:0] a;
output [3:0] y;
input  [4:0] b;
output [4:0] z;
inout  x;
    wire \n21[1] , \ztemp[0] , \ztemp[1] , \ztemp[2] , \ztemp[3] , \a[0] , 
        \z[2] ;
    tri x_wire;
    assign \a[0]  = a[0];
    assign z[2] = \z[2] ;
    assign y[2] = \z[2] ;
    assign y[0] = \a[0] ;
    tran( x_wire, x );
    IVP U7 ( .A(\ztemp[1] ), .Z(z[1]) );
    IVP U8 ( .A(\ztemp[0] ), .Z(z[0]) );
    IVA U9 ( .A(\a[0] ), .Z(x_wire) );
    test_DW01_add_width5_0 add_7 ( .A({a[4], a[3], a[2], a[1], \a[0] }), .B(b), 
        .CI(1'b0), .SUM({\n21[1] , \ztemp[3] , \ztemp[2] , \ztemp[1] , 
        \ztemp[0] }) );
    assign y[1] = 1'b0;
    IVP U4 ( .A(\n21[1] ), .Z(z[4]) );
    IVP U5 ( .A(\ztemp[3] ), .Z(z[3]) );
    IVP U6 ( .A(\ztemp[2] ), .Z(\z[2] ) );
endmodule


But by doing the four steps summarized above, I get:

module test ( a, b, z, y, x );
input  [4:0] a;
output [3:0] y;
input  [4:0] b;
output [4:0] z;
inout  x;
    wire n21_1, ztemp_3, ztemp_2, ztemp_1, n37, ztemp_0, n38;
    IVDA U7 ( .A(n38), .Z(z[2]) );
    IVDA U8 ( .A(n38), .Z(y[2]) );
    IVP U9 ( .A(n21_1), .Z(z[4]) );
    test_DW01_add_width5_0 add_7 ( .A(a), .B(b), .CI(n37), .SUM({n21_1, 
        ztemp_3, ztemp_2, ztemp_1, ztemp_0}) );
    IVP U10 ( .A(ztemp_3), .Z(z[3]) );
    IVP U11 ( .A(ztemp_2), .Z(n38) );
    IVP U12 ( .A(ztemp_1), .Z(z[1]) );
    IVP U13 ( .A(ztemp_0), .Z(z[0]) );
    IVA U14 ( .A(a[0]), .Z(x) );
    GND U4 ( .Z(y[1]) );
    GND U5 ( .Z(n37) );
    IVDA U6 ( .A(a[0]), .Z(y[0]) );
endmodule

  - Jack Hollins
    Adaptec


( ESNUG 184 Networking Section ) ----------------------------------- [4/1/94]

Two Digital Design Engineers wanted in Galway, Ireland. ASIC and System work,
VHDL, Synopsys etc. Toucan Technology, Fax +353-91-755635 or coffey@iol.ie.


 Sign up for the DeepChip newsletter.
Email
 Read what EDA tool users really think.


Feedback About Wiretaps ESNUGs SIGN UP! Downloads Trip Reports Advertise

"Relax. This is a discussion. Anything said here is just one engineer's opinion. Email in your dissenting letter and it'll be published, too."
This Web Site Is Modified Every 2-3 Days
Copyright 1991-2024 John Cooley.  All Rights Reserved.
| Contact John Cooley | Webmaster | Legal | Feedback Form |

   !!!     "It's not a BUG,
  /o o\  /  it's a FEATURE!"
 (  >  )
  \ - / 
  _] [_     (jcooley 1991)