Happy Halloween, ESNUG readers!  In the never ending quest to occassionally
  see a little of the fun in what we do as designers, I'm putting together
  a "Scary Verilog / Terrifying VHDL" Contest.  The idea will be to send in
  100 line samples of actual Verilog / VHDL syntaxes you've seen tried in
  the design world that was intended for simulation or synthesis.  (I'm not
  talking about random keystrokes that won't work in any compiler whether it's
  HDL or not -- I'm talking about the stuff that either confused the hell out
  of you trying to figure it out or the stuff that gave rather surprizing
  results in simulation or synthesis.)

  But, before I "officially" annouce this contest, though, I'll have to smooze
  some EDA vendors into donating some prizes for this contest.  (I've already
  had one EDA vendor donate a free copy of their simulator.)  Also I want
  formulate some rules to insure blind, unbiased judging of the code sent in.

                                                - John Cooley
                                                  the ESNUG guy

( ESNUG 159 Item 1 ) ---------------------------------------------- [10/93]

From: maurizio.paolini@cselt.stet.it
Subject: Test Compiler Left Ports Unrouted Out Of Subdesigns

Hello, John. Here comes a brand new bug of the Synopsys Test Compiler
(We're using version 3.0b-12954, on Sun Sparc 10).

We are trying to create a scan path in a circuit. One of the circuit modules
already contains a scan chain set, while the others don't. We processed the
circuit as follows:

	dont_touch <module_with_scan>
	create_test_clock -period 2000 -waveform {1000,2000} { <test_clock> }
	set_test_methodology full_scan
	set_scan_style multiplexed_flip_flop
	set_test_hold 1 { <list_of_signals_1> }
	set_test_hold 0 { <list_of_signals_0> }
	insert_test -no_disable -no_route

(at this point, scan FFs have been inserted into all of the blocks but
<module_with_scan>, as desired)

	remove_attribute <module_with_scan> dont_touch
	current_design = <module#1>_test_1
	set_scan_chain 1 { <instance_list> }
	set_scan_chain 2 { <instance_list> }
        ...
	current_design = <module#n>_test_1
	set_scan_chain 26 { <instance_list> }
	current_design = <module_with_scan>
	set_signal_type test_scan_in -index 27 <in1>
	set_signal_type test_scan_in -index 28 <in2>
	set_signal_type test_scan_in -index 29 <in3>
	set_signal_type test_scan_out -index 27 <out1>
	set_signal_type test_scan_out -index 28 <out2>
	set_signal_type test_scan_out -index 29 <out3>
	set_signal_type test_scan_enable scan_en
	current_design = <submodule#1_with_scan>
	set_signal_type test_scan_in -index 27 <in1>
	set_signal_type test_scan_in -index 28 <in2>
	set_signal_type test_scan_in -index 29 <in3>
	set_signal_type test_scan_out -index 27 <out1>
	set_signal_type test_scan_out -index 28 <out2>
	set_signal_type test_scan_out -index 29 <out3>
	set_signal_type test_scan_enable scan_en
	set_scan TRUE { <list_of_leaf_cells> }
        set_scan_chain 27 { <sublist_of_leaf_cells_1> }
        set_scan_chain 28 { <sublist_of_leaf_cells_2> }
        set_scan_chain 29 { <sublist_of_leaf_cells_3> }
        ...
	set_test_methodology full_scan -existing_scan
	insert_test -no_insert -no_disable -scan_chains 29
            -max_scan_chain_length 33

It must be pointed out now that the scan chains in <module_with_scan> were
routed by hand - i.e. the read netlist of <module_with_scan> already
contains the scan path routing.

After the second insert_test command, the scan chains are exactly as desired,
but several submodules in  <module_with_scan> contain some fake scan routing.
Usually, the new submodule instance has some extra test_si<n> and test_so<n>
ports, where n > 29. The submodule itself does not contain any scan FF, and
so test_si<n> is directly wired to test_so<n>.

NOTE: The corresponding ports are NOT routed outside the submodule, and are
      left hanging by the test compiler!

Is this a known behavior of the Test Compiler ?

Does anybody know how to overcome this bug ? (I am currently trying setting
the dont_touch attribute for all the non-scan modules, but this method is
quite cumbersome...)

  - Maurizio Paolini
    CSELT - Centro Studi E Laboratori Telecomunicazioni


( ESNUG 159 Item 2 ) ---------------------------------------------- [10/93]

Subject: ( ESNUG 158 # 4) 'Switch To Disable The DesignWare "Feature"'

> We don't use DesignWare at all, but Synopsys 3.0X has the hooks built into
> DesignWare that automatically grabs a HDL license when it thinks it needs
> to build parts.  We have 4 options:
>
>   1.) decrease the number of Design Compiler licenses
>   2.) increase the number of HDL compiler licenses
>   3.) return to Synopsys 2.2b
>   4.) waste time finding a workaround
>
> I think Synopsys should allow a switch to let users decide if they want
> to use DesignWare or not.  We'd immediately disable the DesignWare "feature"
> and synthesize like we always have!

From: [ Anonymous, Too ]

John - make me Anonymous, Too

After seeing a couple of postings on this issue, I thought I would share my
experience regarding the need for HDL compiler licenses in DesignWare.  We are 
one of the Synopsys' customers that have more Design Compiler licenses than 
HDL Compilers for the simple fact that we only needed them to read in Verilog.
We ran into the problem in 3.0b where HDL Compiler licenses were grabbed 
during compilation (DesignWare), but they were not released.  We contacted 
Synopsys about the issue.  At first, they treated it as a bug, giving us 
temporary HDL Compiler licenses while they worked on the problem.  They tried 
a couple of commands, but they didn't seem to work.  Magically, it became a 
sales/marketing issue.  Synopsys claims that, despite never publicizing or 
marketing it this way before, that the high level optimization performed 
during a compile always required an HDL or VHDL license (either one), but it 
was never "checked out".  Now, in DesignWare, if you infer a structure in 
your Verilog or VHDL code, the HDL Compiler license is checked out and not
released until the compile is complete.

What is the resolution?  Synopsys wants me to buy enough HDL Compiler 
licenses to match 1-to-1 with Design Compilers.  There has not been much 
give on their part in pricing or terms.  They claim we are one of only a 
few companies which do not have parity in licenses (is this true?  anyone 
else out there have the same problem?).  In the meantime, we have filled 
the DesignWare cache (another new feature, but this one is helpful) with 
every possible size and structure of DesignWare components.  If the component 
is in the cache, it does not have to be built and the HDL license is not 
needed.  This is a temporary workaround, but whenever software versions 
change or our semiconductor vendor's library changes, we have to recreate 
the cache.

  - Anonymous, Too

P.S. We have suggested to Synopsys technical solutions such as "wait" for 
a license, turn off DesignWare, etc., but have been rebuffed so far.


( ESNUG 159 Item 3 ) ---------------------------------------------- [10/93]

From: tychan@video.sc.ti.com (T Y Chan)
Subject: EDIF bus numbering

John, I am new to this group, I have a problem that can be worked around, but,
would like find a better way to do it.

Is there a way to to enable bus numbering in little endian mode when generating
EDIF netlists from dc_shell?  I am trying to convert a VHDL structural netlist
to EDIF.  In VHDL, I am using constructs like:

              address : std_logic_vector(31 DOWNTO 0)

and the EDIF output becomes

              address_31_0_   

When accessing individual bits, address_31_0_ 31 turns out to be the Least
Significant Bit while in VHDL, address(0) is the Least Significant Bit.

I am trying avoid using std_logic_vector(0 TO 31) as the design is basically
a little endian design.

  - T. Y. Chan
    Texas Instruments


( ESNUG 159 Item 4 ) ---------------------------------------------- [10/93]

From: Steven Redant <redant@imec.be>
Subject: A Strange 'Invalid Non-combinational Cell' FSM Bug & Workaround

John,

My goal is to design a gray counter.  For this I want to use the FSM encoding 
possibilities of Design_analyzer because the VHDL this way appears easier and
the synthesis should be quicker with a lower memory use.

I used the following VHDL code:

  LIBRARY ieee;
  LIBRARY work;
  USE ieee.std_logic_1164.all;  
  USE ieee.std_logic_signed.all;

  ENTITY gray_counter IS
    PORT (clk     : IN     std_logic;
          enable  : IN     std_logic;
          reset   : IN     std_logic;
          up_down : IN     std_logic;
          state   : BUFFER std_logic_vector(7 DOWNTO 0) );
  END gray_counter;

  ARCHITECTURE behaviour OF gray_counter IS
  BEGIN
  gr_c: PROCESS(clk, reset)
  BEGIN
     IF reset = '0' THEN
       state <= "00000000";
     ELSIF clk='1' AND clk'EVENT
     THEN IF NOT (conv_integer(state)=127 OR conv_integer(state)=-128)
        THEN IF up_down = '0' 
             THEN state <= state - "1";
             ELSE state <= state + "1";    
             END IF; 
        END IF;         
     END IF;
  END PROCESS gr_c;

  END behaviour;  

The following works OK:

    1) read
    2) compile
    3) ungroup
    4) fsm->allow all possible states => OK

But this gives ERRORs:

    1) read
    2) fsm->define legal states (gray)  => ERROR   (There seems to be illegal
       (bogus) non-combinational cells in the design.)  I get the following
       error message:

          "Error: Invalid non-combinational cell <one_of_them> (FSM_EX-60)"

    3) Optimize
    4) fsm->define legal states (gray)  => ERROR
    5) Ungroup
    6) fsm->allow all possible states  => ERROR

Here's how I did the workaround: I wrote this into an EDIF file. Then I
deleted everything I had and read in the EDIF file. I am now rid of the
bogus non-combinational cells and can proceed with changing the counter
states from binary to Gray.

This also gave ERRORs but is OK in the end:

    1) read
    2) fsm->allow all possible states  => ERROR
    3) Optimize
    4) fsm->allow all possible states  => ERROR
    5) Ungroup
    6) fsm->allow all possible states  => OK

Somewhere along the way the fsm generator looses the undefined Combination
Cells.  If all else were logical, it's illogical that step 4 of this last
example fails - but it does.  Why?  Whether or not the design is grouped it
should not matter.  It seems that the ungroup option should (always?)
be used in conjunction with Synsopsys FSM synthesis.

  - Steven Redant
    IMEC



 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)