After months of gentle persuasion I finally managed to talk my girlfriend
  into getting an e-mail account so she could experience the Internet first
  hand.  She told me she wasn't interested but she secretly bought a techie
  magazine with a floppy disk offering "FREE 10 HOURS OF INTERNET ACCESS WITH
  AMERICA ON-LINE!" to surprise me with an e-mail letter.  She loaded the
  floppy on her computer, answered all the required questions (name, address,
  credit card number) and logged on AOL.  Within her first hour, she got what
  she thought was a normal security check (which she filled out again) of:

      AMERICA ON-LINE SECURITY: Please re-verify your account bellow.
      NAME:_____________________________   ACCOUNT NAME:___________ 
      ADDRESS:_____________________________    PASSWORD:___________
      CREDIT CARD NUMBER:___________________  CARD EXP. DATE:______

  The next day she tried to log on but found her AOL account was restricted
  because "it was used to attempt to access other AOL customers private
  information."  And now *I'm* in the dog house because my join-the-Internet
  advice allowed some hacker to get her credit card number and caused our
  panicked rush to cancel that credit card!  (Aaargh!)

                                               - John Cooley
                                                 the ESNUG guy

( ESNUG 242 Item 1 ) ---------------------------------------------- [7/96]

Subject: (ESNUG 241 #2)  Is Anyone Using The Synopsys ECL Compiler?

> Do you know anybody who uses Design Compiler for ECL?  The people at the
> Munich support center told me that ECL is not supported since 3.1a.
> However by browsing the library compiler books in iview I found a lot of
> features for ECL libs in 3.4a.  If ECL is not supported, why is it still
> in the latest version of the Library Compiler?  Is anybody doing great ECL
> designs in a very secret lab with 3.4a & I just don't have the licenses?


From: [ Synopsys Synthesis Marketing ]

Dear John,

Synopsys has been slowly phasing out ECL Compiler over the past two years
due to a lack of customer demand.  We have not been actively selling the
product and our focus has been on working with ECL Compiler customers on a
transition plan to other products.  The last version of software and
documentation to still contain ECL Compiler references and code was 3.4a
which was released in January 1996. Synopsys will not be providing support
to existing ECL Compiler customers beyond the 3.4a release.

  - [ Synopsys Synthesis Marketing ]


( ESNUG 242 Item 2 ) ---------------------------------------------- [7/96]

From: gmann@ford.com (Greg Mann)
Subject: The Ford Verilog Coding Style for State Machines

John, I just wanted to share an improved style for encoding state machines
that we've discovered at Ford Microelectronics.

A rather simple modification in the coding style of a state machine can both
shave off area and improve timing.  For a particular test case the reported
cell area was 14% less with loose timing.  When timing was over-constrained,
the area was 4% less with slightly better timing.  The "compare_design"
command was used to verify that the designs were functionally equivalent.
We've seen some variation in the effect of the style change, but in each
case, there was some area improvement.

Our original style was to lump all the combinational logic of the state
machine into a single "always" block and "case" statement like:

  always @(state or .....)
     // set defaults
     ...
     case (state)
       0: begin
	        ...
          end
       1: begin
	        ...
         end
       ....
     endcase

Our modified code simply separates the state decode from the other logic by
putting it into its own separate "always" block.  This creates a one-hot
encoding which is used in the original always block.

  always @(state)
    begin
       state0 <= #1 1'b0;  // all states default to 0's
       state1 <= #1 1'b0;
       ...
       case (state)
         0: state0 <= #1 1'b1;  // one-hot set to 1
         1: state1 <= #1 1'b1;
         ....
       endcase
    end

  always @(state0 or state1 or ...)
      ... set defaults here
     case (1'b1) // synopsys full_case parallel_case
       state0: begin
	             ...
               end
       state1: begin
	             ...
               end
       ....
     endcase

My theory is that area is improved due to better sharing of logic in the
state decode and in the resulting simplification of the logic following the
decode.  Anyone else have any clever FSM encoding tricks?

  - Greg Mann
    Ford Microelectronics Inc.


( ESNUG 242 Item 3 ) ---------------------------------------------- [7/96]

From: charles@efficient.com (Charles Shelor)
Subject: Got Burned With Design Compiler 3.4a VHDL Package Names Restriction

John,

We have a moderately large project that will eventually have 7 or 8 people
designing and testing.  We have a hierarchical file structure and library
organization to assist organization, configuration control, and project
understanding.  Thus we have a VHDL package of common definitions for the
entire project, plus VHDL packages of local definitions for each of the major
VHDL components if appropriate.  I am attempting to compile the local VHDL
definitions package for my block.  I have successfully compiled the common
VHDL definitions block into its library called 'chip_com'.  I can compile the
local VHDL definitions package into its library, 'fc' using "vhdlan".

However, when I try to "analyze" using dc_shell, I get the following error:

        Error: Type SLV not found on line 107  (VHDL-2157)

where SLV is a subtype of std_logic_vector that is defined in the common
definitions package.  OK, I'll not create a subtype of a subtype since that
might be too complicated for DC.  I editted the local definitions file and
globally replaced 'SLV' with 'std_logic_vector'.  When I ran dc_shell again,
I received a memory segmentation violation!

  analyze -format vhdl -library fc vhdl/definitions.vhd
     Loading db file '/usr/synopsys/libraries/syn/standard.sldb'
     Loading db file '/usr/synopsys/libraries/syn/gtech.db'
     Reading in the Synopsys vhdl primitives.
        /home/charles/molokai/chip/design/vhdl/definitions.vhd:
  Segmentation Fault

Questions: Why can't I use the subtype SLV defined in 'chip_com.definitions'
to define another subtype in 'fc.definitions' within DC when it works for
VSS?   When SLV is replaced in 'fc.definitions' with the ieee type
std_logic_vector, why does DC cause a memory segmentation violation?

ANSWERS: Changing the name of the 'fc.definitions' package to 'fc.defs' fixes
both problems!  Easy enough WORK-AROUND (note: this is still a BUG in DC) but
it now requires the project staff to coordinate to ensure that we do not name
any packages the same as anyone else!!!  Not difficult but certainly annoying
to have to come up with 9 or 10 different names that mean definitions,
textio, utilities, ...  Not to mention the time that I've spent trying to
figure out what was wrong!

  - Charles F. Shelor
    Efficient Networks, Inc.


( ESNUG 242 Item 4 ) ---------------------------------------------- [7/96]

Subject: ( ESNUG 241 #9 )  Will Trade My Secret Switches For Yours!

> I'd like to see more secret switches "exposed" in ESNUG.  In trade, here's
> mine: I was having headaches with Synopsys putting in unnecessary buffers.
> (I figured out that there was no capacitance, fannout, or timing problem, but
> I was still getting two inverters on each output.)  Here's the fix:
> 
>         /* clean up unnecessary inverters */
>          compile_clean_inverters = true
> 
> (Sure enough. My extra inverters went away.  I am wondering why Synopsys
> hasn't published this switch.  Could there be some sort of side effect?
> So far, I have had no problems with it.)  Has anyone else found any helpful
> undocumented features that they would like to share?


From: [ Jerry's Kids ]

John, keep me anonymous, please.  Although the following was found at my 
previous job, my current management may not like it.  I didn't ask, either.
 
I remember trying to find as many as possible of these 2 years ago, and I
found out that a few of them were documented in solv-it, as bug workarounds.
I did a search with "hidden variable" or somesuch and got:

	ccl_disable (to disable connection_class )
	compile_force_local_dont_care (used by compare_design)
	force_input_tran_for_output_tran (used by translate)
	seqmap_on (enables/disables sequential mapping)
	tlud_use_low_timing_effort (used by translate)
	use_nonlinear_delay_model (library selection)

I do not know if they are still valid, some may have disappeared, etc.

  - [ Jerry's Kids ]

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

From: tims@dct.rti.org ( Tim Sawinska)

John,

My favorite semi-secret switch is "compile_use_low_timing_effort = true".
I've seen it speed up compiles 10X.  (And that's with a piece-wise linear
style library.)  It makes the neighborhood for timing re-calculation smaller,
and thus faster, for each of those trials you see Synopsys going through.

   - Tim Sawinska
     Data Communications Technologies

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

From: [ A Little Bird ]

Hi John, Best keep me "anonymous."

Here's a list of variables I extracted from the dc_shell binary source code.
None of these appear in manual pages or in the Synopsys Iview collections.
I don't know what these commands/variables do (that's where the fun is!),
but I'm sure we'd all be grateful to hear from people who figure them out!

Commands:

  bc_partition_logic                  check_clocks
  context_check_disable_cmds          context_check_enable_cmds
  define_function                     define_rtl_operation
  derive_clock_parameters             disable_latch_transparency
  distribute_capacitance              extract_clock_tree
  fv_control                          group_clock_tree
  ignore_memory_loop_precedences      ignore_memory_precedences
  log_to_phys                         ph_cluster_cell
  ph_create_cluster                   prepare_design_for_compile
  report_scc_execution_status         reset_iddq_invalid_state
  set_iddq_invalid_state              set_jtag_bsdl
  syntax_check_enable_cmds            write_jtag_bsdl

Variables:

  annotation_control                            atpg_bidirect_output_only
  channel_width_denominator                     channel_width_numerator
  check_db_checksums                            combine_vertical_logic_groups
  compile_characterize_black_boxes              compile_clean_inverters
  compile_enable_master_slave_inference         compile_resyn_duplicate_logic
  compile_use_fast_sequential_mode              fast_partitioning
  filter_check_real_by_default                  gen_ignore_bus_bit_order
  hdlin_minimize_tree_delay                     hdlin_reg_test_print
  hdlin_report_resource_costs                   hdlin_resource_sharing_mode
  hdlin_share_common_subexpressions             hdlin_share_effort
  hdlin_tdrs_script_source                      left_justify_logic_constants
  write_new_format_db_files                     logic_group_height_percent
  logic_group_width_percent                     port_edge_rate
  read_flexible_db_files                        sc_check_file_existence
  scc_execute_sh_command                        scc_print_usage_message
  test_force_bidir_pads_inwards                 test_force_capture_clocks
  test_no_three_state_conflicts_after_capture   text_unselect_on_button_press
  level_sensitive_startpoint_close_active_edge   

Perhaps a Synopsys R&D person would like to correct me, but from what I hear,
Synopsys like to include new software pre-release and leave it hidden behind
a switch so that they can test it a while longer.  It also gives them a
chance to field test the feature with some luckless soul who can't get by
without it and has to resort to some new feature which perhaps has some
side-effects (such as a new optimisation that can wreck or save your design).

  - [ A Little Bird ]


( ESNUG 242 Item 5 ) ---------------------------------------------- [7/96]

Subject: ( ESNUG 240 #4 ) Backannotation, Visibility, & 'Characterize'

From: rray@msai.mea.com (Russell Ray)
> I'm not an expert on what is really happening but I ran into this same
> problem with only using set_load and set_resistance commands.  It appears
> that the loads are only visible if the current design is set to the same
> design as whey you performed the set_load commands.  When the current
> design is anything else, they are not taken into account.

From: rnair@BayNetworks.COM (Rajesh Nair)
> Design Constraints, Timing constraints and any Backannotated parameters will
> only apply in the context of the design to which it was applied.  (Because
> one could potentially be using the same subdesign in other designs or in
> another context in the same design.  In this case, you would not want the 
> backannotated value from the previous design to be present any more.) 


From: greg@cqt.com (Greg Bell)

John,

I don't think this is true... there's another case.  What they're talking
about is executing the set_load commands from the top level, and their effect
not being visible when you make the current_design a lower level (moving
DOWN the hierarchy).

But we're backannotating lower blocks, then moving UP the hierarchy.  Just
now I ran a test, doing a "diff" of two "report_constraints -all_violators".
One report was generated after backannotating my way, and the other by
backannotating from the top level (after editing the backannotation files to
have the correct hierarchy information).  The reports were the same.

So the generalization that the set_load commands are only visible from the
design where they were run seems incorrect.  Rather, the tool will propagate
their effects up the hierarchy, but not down it (use characterize for that).

  - Greg Bell
    CommQuest Technologies


( ESNUG 242 Item 6 ) ---------------------------------------------- [7/96]

Subject:  (ESNUG 240 #7)  Synchronous Reset Thru An ALU Still Gives Xes!

> I've run across another "FEATURE" of Synopsys that has landed me into a
> large heap of Sheep DIP!  I have a design that has a number of registers
> that are all fed by a simple ALU.  Rather than have all of the registers
> use an asynchronous reset (at a cost of 1-2 gates per D FF), I simply have
> the ALU perform the following operation:
>
>                             0 "AND" X
>
> And then load the resulting 0 in all of the registers by simply enabling
> all of their clock enables.  Now, 0 "AND" X normally would produce 0 on
> any output of the ALU.  After all, 0 "AND" *anything* should be 0, right?
> -- well, *not* according to Synopsys!  I still get Xes out of my ALU!
> Naturally when I try to run my gate-level simulation I never even get out
> of reset!  From reading various SOLVIT, app notes and online docs, I see
> where I could add the attribute sync_set_reset if there were some registers
> to attach it to.  But since the block in question is purely combinitorial,
> what can I do?


From: Bruce Nepple <bcn@ccm.seikotsi.com>

John,

Regarding Eric being in sheep dip, I suspect that there are an awful lot of
"unneeded" logic gates in the world just to get around simulators that can't
deal logically with unknowns (this *is* a simulator issue, not a design
compiler issue).  Maybe someday a simulator manufacturer will see unknown
resolution as a competitive edge (saves gates and time).  The situations
where I seem to get nailed are best represented by multi-stage synchronizers
that feed-back to reset the input FF (always zero after a couple of clocks,
but always X in Verilog-XL) and logic that effectively creates 0 or 1 with
0 = A & ~A or 1 = A | ~A (always 0 or 1 in the real world, but will propagate
X's like sheep dip through a flea farm).  The latter case can be spread over
many gates, and is probably what is happening to Eric.  I've always solved
these either by adding gates (async. resets or whatever) or by using the 
"force" function in verilog (rah rah verilog) to force critical internal 
pins to zero for the first cycle.  I've actually added an unused reset 
pin to an IC just for simulation and fault grading.  Again, I don't blame
the design compiler. 
  
  - Bruce Nepple 
    Seiko Communications Systems

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

From: Michael_Armstrong@BayNetworks.COM (Michael Armstrong)

John, I don't think this issue is as simple as it seems.  

A simple example that sheds some light on this question is the following:
If I have a 2-input multiplexer with zero's on both inputs and an 'X' on the
select line, should I get a zero out?  The answer is probably yes, but most
models of the multiplexer would put out an 'X' if the select line is unknown
regardless of the inputs instead of handling the special case of all inputs
being zero (or one, for that matter).  Just think if you had a 64-input
multiplexer  - should the model look for all 64 inputs to be low and handle
that special case?  It might be technically correct to do so, but I think
most models would not bother.  In some cases the 'X' would be the better
answer; if the select line was metastable and was not at a legal logic level,
then the output would be unknown.

  - Mike Armstrong
    Bay Networks

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

From: dj@lsil.com (Darren Jones)

Hey John,

In an ALU we designed, we have a similar problem.  The reason in our case was
that the ALU was implementing the AND function using XOR gates (I won't go
into the gate-level details.)  It ends up that if the first operand is 0, the
logic XORs the second operand with the inverted second operand.  Obviously,
this would always have a result of zero in real silicon, but in simulation,
if the second operand is X, its inverted value is also X and the function
ends up with an X as a result!

In our case, it was only a problem with the structural model -- the RTL model
works fine.  One solution was to change the order of the operands -- instead
of "0 AND X", try "X AND 0".  I doubt that this is something Design Compiler
would be able to figure out.

  - Darren Jones
    LSI Logic


( ESNUG 242 Item 7 ) ---------------------------------------------- [7/96]

From: Don_Monroe@synnet.com (Don Monroe)
Subject: What Is IBM Like To Work With As A Foundry?

John, I am curious as to whether anyone has personal experiences with IBM as
an ASIC vendor.  I am looking for information and opinions about how they are
to work with as an ASIC vendor with regards to tools support and issues,
general responsiveness to problems, flexibility to work with their customers
needs and requirements, etc.

  - Don Monroe
    3Com


( ESNUG 242 Item 8 ) ---------------------------------------------- [7/96]

From: Dean Warren <dwarren@ccm.jf.intel.com>
Subject: Seeking Comparisons Of Actel 32xxx vs. Altera 10K For Synthesis

John, Can you help me understand the tradeoffs betwen the Actel 32xxx and
Altera 10K as it relates to synthesis and ASIC conversion?  Specifically I
will be using Synopsys to sythesis VHDL to one of these parts and later
converting to an ASIC. 

  - Dean Warren
    Intel

     [ Editor's Note: As always, if you need to be Anonymous with
       anything on ESNUG, just say so in your letter!  - John ]


 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)