I was surprized reading in this week's EE Times how Cadence & Mentor Graphics
 wants to take over their customer's internal CAD functions along with some
 of the design activity.  Effectively they're telling their customers (mostly
 CAD managers):  "Please, buy our $100,000 EDA tools.  Pay us $15,000 every
 year for the right to phone us when you run into trouble.  If you're really
 stuck, hire our own 'special" on-site consultants for $250/hour to solve
 your problem.  If it gets really, REALLY bad, we'll talk your boss's boss
 into having you, your entire CAD department and some of your fellow design
 engineers all fired so *we* can do your job for you...   Please, buy our 
 $100,000 EDA tools..."      (Whoa!)
                                             - John Cooley
                                               the ESNUG guy

( ESNUG 210 Item 1 ) ---------------------------------------------- [2/95]

Subject: (ESNUG 209 #5)  VHDL Errors Using "liban" rev. 5.1d On My FPGA

>Using the Synopsys liban program to extract the xprim_4000_5_components.vhd
>and xprim_4000_5_FTGS.vhd.E files from xprim_4000-5.db library, I got errors
>involving:
>            REAL port name: A<0>    VHDL port name: Ax0x
>
>I used the following command:
>
>    liban -arch FTGS syn/xprim_4000-5.db -output src/xprim_4000_5 -xgen
>
>My question is: How can I tell to liban to use "(" and ")" instead of x
>in the VHDL port name?  (I want A(0) instead of Ax0x.)


From: krish@neomagic.com (Krishnan Dharamrajan)

Hello John,

I had this problem.  This happens when one has library cells w/ ports defined
as a BUS.  While generating the library files these BUSSED ports have to be
bit-blasted and each of these ports are assigned unique timing variables.
IF you have a bus defined as A : std_logic_vectors(7 downto 0);, this will be
blasted as Ax0x, Ax1x, ... Ax7X and not as A(0), A(1), .... A(7), since 
port names like  A(0), A(1), .... A(7) are not allowed in VHDL.

  - Krishnan Dharamrajan
    NeoMagic

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

From: sharp@xilinx.com (Steve Sharp)

From the looks of this question, I suspect the user may be trying to get a
RAM16x1 or RAM32x1 model.  He should check out the new rev of the
Xilinx-Synopsys Interface (Xilinx part number DS-401 version 3.2 -- shipped
Jan. 95)  It has many updates to the synthesis libraries AND full FTGS models
for VSS for XC3000, XC4000, and XC7000 devices plus back annotation
translation from post-route XNF to VHDL/SDF. 

  - Steve Sharp
    Xilinx


( ESNUG 210 Item 2 ) ---------------------------------------------- [2/95]

From: [ The Horse With No Name ]
Subject: (ESNUG 207 #3) "Setting Stacksize For Large Designs & Coredumpsize"

> UNIX PROMPT> limit
>
>      stacksize       8192 kbytes
>      coredumpsize    unlimited
>
> 8192 kbytes was not sufficient.  The solution was to run the UNIX command
> "limit stacksize unlimited" (or to be safe) "limit stacksize 100000".

John, it's a good idea to mention here that people should limit their
coredumpsize to 0.  Most people forget to remove coredumps and they pig
up space in a system needlessly.  Hence, I recommmend "limit coredumpsize 0".

Because of company politics I'd rather sign as...

  - [ The Horse With No Name ]


( ESNUG 210 Item 3 ) ---------------------------------------------- [2/95]

From: sgolson@trilobyte.com (Steve Golson)
Subject: Synopsys Design Compiler Watchlog Utility

Hi John,

Here is a favorite utility of mine.  It monitors the log file being generated
by any process and annotates it with the elapsed CPU time.  For Synopsys runs
it generates a CPU timestamped output like:

         Beginning Resource Allocation  (constraint driven)
         -----------------------------
         Allocating blocks in 'r1'
  25:03	 Allocating blocks in 'fifo'
	
         Beginning Mapping Optimizations  (Medium effort)
         -------------------------------
  26:02	 Structuring 'fifo'
  32:33	 Mapping 'fifo'

In this example you can see that "Structuring 'fifo'" took (32:33 - 26:02)
6:31 CPU minutes.  (It's great for long compiles; you can see what soaks up
all the time!)

Start watchlog after you start your dc_shell run, and pass it the name
of your logfile and the PID:

	csh> dc_shell -f myscript.ss >& myscript.log &
	[1] 1234
	csh> watchlog myscript.log 1235 >& myscript.watchlog &

Note that the PID returned by csh when you start up dc_shell is the PID of
dc_shell (makes sense!) but the process that we want to watch is
dc_shell_exec, which is typically the next PID in sequence.  Your OS may vary.
(To be sure you could invoke dc_shell_exec directly.)

Watchlog builds a sed script; after the monitored process exits it runs "sed"
on the log file and spits the resulting watchlog file to stdout.

Comments, bug reports, etc. are much appreciated.

  - Steve Golson
    Trilobyte Systems


#! /bin/sh
#
# watchlog 1.5  -- annotates a logfile w/cpu time of the process creating it
#
# Usage: watchlog logfile pid [hostname] [sleep_time]
#   where
#     pid = id of the process to monitor
#     logfile = the logfile being created by the process
#     hostname = host running the process to monitor (optional)
#     sleep_time = seconds to sleep between timestamps (defaults to 60)
#
# watchlog monitors the logfile length and the elapsed cpu time of the
# process.  It generates a sed script that is used to create the annotated
# log after the monitored process exits.

myname="`basename $0`"

# get args
if [ $# -lt 2 ]
then
	echo "Usage: $myname logfile pid [hostname] [sleep_time]" 1>&2
	exit 1
fi
logfile=$1
pid=$2
if [ $# -ge 3 -a "$3" ]
then
	hostname=$3
fi
if [ $# -ge 4 ]
then
	# sleep_time must be a positive integer
	expr "$4" : '[0-9]*[0-9]$' > /dev/null || {
		echo "$myname: bad sleep_time value: $4" 1>&2
		exit 1
		}
fi

# time in seconds between ps runs, defaults to 60
sleep_time=${4-60}

# file where the sed commands go
sed_script="${myname}.$$.sed"

# the ps command, using rsh if hostname exists
ps="${hostname+rsh -n} ${hostname-} /usr/bin/ps $pid"

# make a tab character to use with sed
tab=`echo 't' | tr 't' '\011'`

# make sure we can read logfile
test -r $logfile || {
	echo "$myname: cannot read $logfile" 1>&2
	exit 1
	}

# make sure ps works
$ps > /dev/null &&
ps_info=`$ps | egrep -v "PID"` &&
test "$ps_info" || {
	echo "$myname: $ps failed" 1>&2
	exit 1
	}

# initialize the sed script
echo "# sed script for: $myname $@" > $sed_script &&
echo "# created on `date`" >> $sed_script || {
	echo "$myname: cannot write to $sed_script" 1>&2
	exit 1
	}

### done with initialization
# prepend a tab to every line of logfile
echo "s/^/${tab}/" >> $sed_script || {
	echo "$myname: cannot write to $sed_script" 1>&2
	exit 1
	}

# setup prev_line_num for first time through the while loop
wc_result=`wc -l $logfile`
prev_line_num=`expr "$wc_result" : ' *\([0-9]*\)'`

while
	# while the process still exists
	ps_info=`$ps | egrep -v "PID"`
	test "$ps_info"
do
	# get the number of lines in logfile
	wc_result=`wc -l $logfile`
	line_num=`expr "$wc_result" : ' *\([0-9]*\)'`

	# get the cpu time used by the process so far
	time=`expr "$ps_info" : '.*[^0-9]\([0-9]*:[0-9][0-9]\).*'`

	# format it nicely to fit in 8 spaces "1234:56 "
	time=`expr "    ${time}" : \
		'.*\([ 0-9][ 0-9][ 0-9][ 0-9]:[0-9][0-9]\)'`

	# if logfile has grown
	if expr "$line_num" != "$prev_line_num" > /dev/null
	then
		# mark previous line with current time
		echo "${prev_line_num}s/^/${time}/" >> $sed_script || {
			echo "$myname: cannot write to $sed_script" 1>&2
			exit 1
			}
		# time has been used
		time=""
	fi

	prev_line_num=$line_num

	sleep $sleep_time
done

# process has finished

# if time hasn't been used then put it on the last line found
if [ "$time" ]
then
	echo "${line_num}s/^/${time}/" >> $sed_script || {
		echo "$myname: cannot write to $sed_script" 1>&2
		exit 1
		}
fi

# run sed to make annotated logfile
# unfortunately sed has a bogus 200 command limit, so...

# split up sed_script
split -190 $sed_script ${sed_script}.

# build up a pipe of multiple sed commands
notfirst=""
for file in `/bin/ls ${sed_script}.??`
do
	if [ "$notfirst" ]
	then
		# add to the pipe
		command="$command | sed -f $file"
	else
		# first sed in the pipe, so add logfile
		command="sed -f $file $logfile"
		notfirst="true"
	fi
done

# execute the pipe
eval $command

# cleanup
/bin/rm -f $sed_script ${sed_script}.??

exit 0


( ESNUG 210 Item 4 ) ---------------------------------------------- [2/95]

From: zeisu@snipe.dwe.co.kr (Jae-Soo Yoon)
Subject: Positive Edge Oriented "balance_registers" Creates Poor Designs

John,

I was trying to break down a design block into several pipelined stages using
the balance_registers command.  The block is similar to an array multiplier
to which I attached three rows of registers to make it four-stage pipelined.

My whole design basically uses a negative edge clock for the storage elements,
and thus I described the pipeline registers to work at the neg edge w/ WAIT
statements as usual.  Once I read in the design and optimized it with low
mapping effort, it, of course, created the original block with three rows of
neg edge F/Fs connected to the output port.

Then I recreated clock with my desired cycle and issued balance_registers
command.  What I got after the execution was essentially a pipelined design
with all the F/Fs having *positive* edge clocks!  Then I gave it an exact
F/F type attribute and repeated the above procedure.  (I noticed that then it
printed "preferred register" as FDN1A, which was the neg edge F/F that I
told it to use.)  It then attached an *inverter* to the global clock net and
was still treating the whole design as if using a positive clock!

I looked up every reference I could find to make balance_registers use
negative edge clock, but there are none.  Is it a bug or a feature that I'm
missing here?  I can't believe a synthesis tool creating an opposite result
from the original user's intention given by the HDL description.  Please help.

  - Jae-Soo Yoon
    Daewoo Electronics Co., Ltd.


( ESNUG 210 Networking Section ) ---------------------------------- [2/95]

Milpitas, CA -- Quantum seeks ASIC Engineer w/ 2+ years Verilog & Synopsys 
exp.  ATA and PCMICA exp. a plus.  Please, NO recruiters.  "jzaidi@qntm.com"


 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)