United Business Media EE Times


Search

HOMEMARKET INTELLIGENCE UNITFORUMSDESIGNNEW PRODUCTSCAREERSBLOGSCONTACTEVENTSSIGN UP!RSSMost Popular contentTrusted Sources

 

Design Automation

Automating MOTIVE

Developing an analysis environment for automatic static timing analysis using Quad Design's MOTIVE.

by Luke L. Chang


MOdular TIming VErifier (MOTIVE) from Viewlogic's Quad Design Group (Camarillo, CA) has become a defacto-standard static timing analysis tool. Because it has a modular nature, it can be used for both ASIC and board analysis. However, the tool does not work to its full potential straight out of the box. You have to know a few tricks and develop a systematic strategy to gain optimal use of the tool.

A systematic MOTIVE strategy Here is a systematic MOTIVE strategy for ASIC design that is easy to understand, set up, control, use, and expand (or reduce). Also, it can be automated 100 percent with Make or a single big script.

There are at least a million timing issues to analyze. However, time-to-market pressures won't allow you to analyze all of them. Therefore, you should identify only those areas in an ASIC design that need to be analyzed. This MOTIVE strategy breaks down the ASIC timing analysis into five categories:

1. Internal logic (core logic), including RAM and internal/external BIST (built-in self-test) logic.

2. JTAG circuitry, if any, which should include a test access port (TAP) controller, instruction decoder, scan-chain selection logic, boundary scan registers (BSRs), and so on.

3. External interface for selected primary I/O pins, such as to external RAM or other ASICs.

4. Primary I/O pins not covered by the previous category.

5. Absolute path delay traces for selected paths.

Each of these categories is divided into min and max delay cases, making a total of ten subdirectories (see "Necessities for the motive_ana directory").

The motive_ana directory The motive_ana directory will hold the ten subdirectories. The directory must have the gate-level Verilog netlist and standard delay format (SDF) file for the ASIC or preferably the links to them. Next, decide whether the files can be directly translated for MOTIVE or if they must be modified first. One reason for modifying the netlist is shown in Figure 1. Imagine the zero-delay buffer is not in the highlighted path. This circuit generates the active-low write-enable signal we by using the rising edge of clk , and a delay_cell gate with X ns of delay. In other words, clk's falling edge is not used. One must tell the tool this by using a multicycle path (MCP) statement.

Using the buf.add file in the motive_ana directory, write a script that adds the buffer i-z to the design. The other logic in Figure 1 will not be affected by this method, which is one way to root out false paths (all paths originating from clk's falling edge are false in this case). Note that the added buffer is only for the tool's analysis and must not be in the netlist for chip fabrication.

Now, you are ready to produce the tool's database in the motive_ana directory, which will be used by its ten subdirectories. The following is the main sequence of events:

  • Run a user script that creates a MOTIVE batch command file in each of the ten subdirectories.
  • Create the tin_tsh.ref file, which contains all the TIN and TSH statements for primary I/O analysis and will be included by the io.ref file. Use the C language preprocessor cpp and an input file that includes a definition file, define.file . Suppose the input file is called tin_tsh.ref_src:

#include "path/define.file"
TIN PART part_name PIN IN REF clk EDGE R RISE R_MIN R_MAX FALL F_MIN F_MAX

and the define.file contains
#define R_MIN 2.0
#define R_MAX 3.0
#define F_MIN 2.0
#define F_MAX 2.5

--then run cpp

cpp tin_tsh.ref_src tin_tsh.ref

to create tin_tsh.ref:

TIN PART part_name PIN IN REF clk
EDGE R RISE 2.0 3.0 FALL 2.0 2.5

Comments in tin_tsh.ref start with #, which is also the comment notation for the tool.

  • If the case shown in Figure 1 applies, insert the required buffer(s) into the netlist and SDF file; then run Quad's vtran utility on the netlist to generate MOTIVE's pin file, core.pin. Use the -s . option if the SDF file uses " . " as the hierarchy separator.

  • If the SDF file needs to be modified, such as changing the bus name from bus\[3\] to bus[3] , write a script to perform it here.

At this point, analysis in each subdirectory can be started. Because the goal is to reuse as much existing work as possible to save disk space and run time, the environment presented here requires that int_min and int_max cases be run first. The work done there can be reused by all the other eight cases, which can be run either in parallel or in series.

Figure 1. Additional logic is added to generate the write enable only on rising edges of the clock.

The int_min and int_max subdirectories These two cases are for min and max timing analysis of the ASIC's internal flop to flop transitions. First, run Quad's sdf2mtv utility with the -min option on the SDF file in the motive_ana directory, and put the resulting control file, core.ctl , and interconnect delay data file, core.idd , in the int_min subdirectory. This extracts the min delays. Second, create the technology file, core.tec , 1 which may be used to scale the min delays (by 120 percent, say) to get the max delays. Note that core.tec scales only the IOPATH delays in the SDF file. To scale the port or interconnect delays by 120 percent, create in the int_min a command file called prt_scl.cmd , which will be used during a MOTIVE run, as shown below:

sv /analysis/delay/scale/Swmin_n_r 1.000000
sv /analysis/delay/scale/Swmin_x_r 0.000000
sv /analysis/delay/scale/Swmin_n_f 1.000000
sv /analysis/delay/scale/Swmin_x_f 0.000000
sv /analysis/delay/scale/Swmax_n_r 1.200000
sv /analysis/delay/scale/Swmax_x_r 0.000000
sv /analysis/delay/scale/Swmax_n_f 1.200000
sv /analysis/delay/scale/Swmax_x_f 0.000000

To automate this process, use prt_scl.cmd , even if no scaling is done. Also, if no scaling is done, simply replace 1.2 with 1.0.

Write a script to read the case.ana file and insert any case analysis specifications into the core.ctl file. Doing so creates a new control file. Finally, run Quad's mmp utility on the new control file, the technology file, and the MOTIVE model libraries to create core.mod . Pay attention to mmp messages. If they contain errors, such as missing models, do not continue. Look into the core.rcf file generated by mmp for debugging hints.

By this time, the batch command file, batch.cmd , that runs the tool in batch mode should have already been created and put at int_min . The following are entries that need discussion:

sv /file/mcp " motive_ana /core.mcp"
sv /file/net " motive_ana /core.pin"
sv /file/ref " motive_ana /core.ref"
sv /file/trc " motive_ana /int_min/
core.trc"
sv /timebase/ 20.0
cycle_time
sv /analysis/zcp disable
cmd motive_ana /int_min/
prt_scl.cmd
save
build
verify
cmd motive_ana /int_min/x.cmd

Note that core.mcp , core.pin , and core.ref files reside in the motive_ana directory. One of the output files is core.trc . The x.cmd file is created at the same time as the batch.cmd file. The x.cmd file resembles the following:

sys get_vio motive_ana /int_min/core.rep
cmd motive_ana /int_min/y.cmd

--where get_vio is a user script that reads the tool's report file, finds all the timing violations, and writes a tw command for each into the y.cmd file (note the last command in y.cmd must be Quit ). 1 Then, x.cmd recalls the data from y.cmd to do a detailed worst-case analysis of each violation, and it writes the results into core.trc . Note that pulse width violations are really hold violations, and they are specified as such in y.cmd . By creating x.cmd and by calling it from batch.cmd , a detailed worst-case trace of each violation can be obtained in a single MOTIVE run.

Necessities for the motive_ana directory

Other files that need to reside in motive_ana directory are listed and explained below. Their names are chosen by the author.

core.ref A MOTIVE reference file for analyzing an ASIC's internal logic. Note that it should contain only clock(s) used by the internal logic and not by the JTAG circuitry.

jtag.ref A reference file for analyzing the JTAG circuitry. Specify the JTAG clock in this file.

io.ref A reference file for primary I/O analysis. It should contain the core.ref file plus all the

TIN and TSH statements (see Note 1).

cycle.def This file should contain MOTIVE analysis cycles for the internal logic and JTAG circuitry (see Note 2).

buf.add This file should contain the buffer(s) to be inserted into Verilog netlist and SDF file for cases in Figure 1. (see Note 3)

case.ana This file is for case analysis, which is very important for rooting out false paths and for doing many kinds of MOTIVE analysis (see Note 4).

case.lib This is a special MOTIVE model library that contains all the special models for doing case analysis.

core.mcp This is the multicycle path (MCP) file for rooting out false paths and doing multicycle analysis of internal logic. MCPs concerning JTAG circuitry should be in the jtag.mcp file because they are usually set up by the JTAG designer.

jtag.mcp MCPs for JTAG logic, which is not part of ASIC's original design and can be analyzed by itself to cut down the number of false paths.

abs.cmd This file contains all the tf commands for performing absolute path delay calculation (see Note 5).

ext.v It creates the Verilog netlist, ext.v , that instantiates the ASIC and all its external component(s). It also treats this netlist as a "bigger ASIC" and analyzes it.

ext.ref A reference file for "bigger ASIC" analysis (see Note 6).

ext.mcp MCP file for "bigger ASIC" analysis. It should contain all the entries in core.mcp, plus entries for ASIC's external interface.

.tim files These are MOTIVE models for an ASIC's external components, which are instantiated in ext.v .

Makefile The MOTIVE environment introduced here is automated 100 percent. If a Makefile is used, it should be in the motive_ana directory.

Note 1 To get a list of all the primary I/O pins, first run MOTIVE interactively on the entire design in either int_min or int_max subdirectory, and then use the View-> Design info...->I/O dependency feature.

Note 2 The cycle.def file should resemble the following:

internal_cycle : 20.0

jtag_cycle : 99.0

Write a script to read cycle.def , and set up a batch command file for each of the 10 subdirectories to run MOTIVE in batch mode.

Note 3 Specify the buffer instance name, where it should be inserted, and whether the insertion should be in parallel or in series with an existing gate. To facilitate automation, buf.insertion can be empty if no buffer is inserted. >

Note 4 Here are some of the common uses of case.ana :

* It performs READ and WRITE analysis separately for internal RAM.

* It performs bi-directional path analysis one direction at a time to avoid looping.

* It uses a different MOTIVE model for a gate than the default model. One reason for this can be changing delay types from a non-clock propagator to a clock propagator for pulse width analysis.

* It hides unused inputs of a gate from MOTIVE to root out false paths.

* It specifies false paths that MCP can not (due to MCP limitations). Every gate specified in >case.ana must indicate where its special MOTIVE model resides, and it must indicate the case type. The special models should be in the case.lib file in the motive_ana directory.

Note 5 An example of an abs.cmd entry resembles the following:

tf source_part pin destination_part pin max_rising norefs --where norefs tells the tool not to stop at any CONST s or MCPs set for this path. Be careful not to specify a nonexistent path. For example, the MOTIVE model for a register should contain no delay path from data input pin d to data output pin q . If a specified path must go from d to q , then the tool can not trace it.

Note 6 The ext.ref contains the same information as core.ref plus the information specific to the "bigger ASIC." Make sure each instance or net name has the right hierarchy, because ext.v instead of the original ASIC netlist is used here.

Table 1
Analysis modes and directory cross reference
MOTIVE subdirectories in the motive_ana directory
File
	int_	int_	jtag_	jtag_	io_	io_	abs_	abs_	ext_	ext_ 
names
	min	max	min	max	min	max	min	max	min	max
core.ref	X	X	X	X
jtag.ref	X	X
io.ref	X	X 
cycle.def	X	X X	X	X	X	X	X	X	X
buf.add	X	X	X	X	X	X	
case.ana	X	X	X	X	X	X	X	X	X	X
case.lib	X	X	X
X	X	X	X	X	X	X
core.mcp	X	X	X	X	X	X
jtag.mcp	X	X 
abs.cmd	X	X
ext.v	X	X
ext.ref	X	X
ext.mcp	X	X
*. tim	X	X
Makefile	X	X X	X	X	X	X	X	X	X

In batch.cmd , you should turn on reconvergence. Note, however, it does not work for pulse width analysis. This extra pessimism can cause false violations. The 20-ns analysis cycle time, /timebase/cycle_time variable, is arbitrarily chosen and should also be assigned to the internal_cycle variable in the cycle.def file.

Additional tips and tricks
Here are some additional tips and tricks:

* Find out whether your ASIC vendor signs off designs on the tool: most vendors usually verify their results with their own proprietary timing tools prior to fabricating the chip. The key here is to do a small test case to find any mismatches in analysis results so that this verification stage will not cause grief later in the design flow.

* Suppose the internal logic has two clocks, one with a 30-ns cycle time called clk_30.0 and the other with 90-ns cycle time (derived from clk_30.0 ) called clk_90.0 . Also suppose that clk_30.0 has plus or minus 0.3 ns of uncertainty and clk_90.0 has plus or minus 0.9 ns of uncertainty with respect to itself and plus or minus 10 ns of uncertainty with respect to clk_30.0 , then core.ref could resemble the following:

GROUP source
REFDEF clk_30 T
CYDEF UP 0.0 0.0 DOWN 15.0 15.0 CYCLE 30.0
GROUP derived
REF clk_90 T
CYDEF UP 0.0 0.0 DOWN 45.0 45.0 CYCLE 90.0
ENDREF
CLKGEN source source -0.3 0.3
CLKGEN derived derived -0.9 0.9
SKEWGEN source derived -10.0 10.0

The MOTIVE analysis cycle time for static analysis should be set to 90 ns.

If the internal logic has only one clock, then use either CLKGEN or SKEWGEN . SKEWGEN automatically enables zero-cycle path (ZCP) detection, and CLKGEN does not. In addition, MOTIVE can not analyze phase-locked loop (PLL) in the ASIC. Therefore, use the PLL output as the clock reference in core.ref .

* Currently, MOTIVE supports gate-level Verilog or EDIF netlist with a matching SDF file, but they are not directly used. Quad's vtran utility translates the netlist into the MOTIVE's pin file and sdf2mtv utility translates the SDF file into its control and interconnect delay data (idd) files. Quad's vtran does not support Verilog's 'include compiler directive. If a netlist consists of more than one file, they must all be specified on the command line.

* Each gate in the ASIC design must have a MOTIVE model that is case sensitive: the case of pin names must match that used in the file containing gate delays to be backannotated, such as an SDF file. The tool has no concept of Z states (see figure), but if an SDF file contains output enable (oen) to pad Z state delays, they can be backannotated correctly if the model is set up correctly. For example, suppose a high transition on oen puts pad into Z state. To MOTIVE, this means that if the previous value of pad is low, then there is an oen high to pad high transition delay, which can be backannotated if the model contains oen to pad delay parameters.

Tristate output

Now run MOTIVE in batch mode by typing in int_min :

amtv -c batch.cmd

At this time, you need to study and understand all the violations. You can run interactive MOTIVE using its graphical debugging utilities. If there are false or multicycle paths, then specify them in the MCP file. Usually, one MCP specification can eliminate more than one violation coming from the same source. This iterative process will consume most of your time.

You should continue the analysis for int_max in the same manner as for int_min .

The io_min and io_max subdirectories The primary I/O analysis, io_min and io_max , uses the entire database built in int_min and int_max . The batch.cmd file for io_min is similar to that of int_min , with the following important exception:

sv /file/ref " motive_ana /io.ref"

Note the use of the io.ref file. Now run amtv the same way in int_min .

The same process applies to io_max .

The jtag_min and jtag_max subdirectories For JTAG logic analysis, jtag_min and jtag_max use the database built in int_min and int_max . The batch.cmd file for jtag_min is similar to that of int_min , with the following important exceptions:

sv /file/mcp      " motive_ana/jtag.mcp"
sv /file/ref
     " motive_ana/jtag.ref"
sv /timebase/cycle_time     99.0

Note the analysis cycle time, which should be the JTAG clock, is arbitrarily chosen to be 99 ns, and it should be assigned to the jtag_cycle variable in the cycle.def file.

The process is similar for jtag_max .

The abs_min and abs_max subdirectories To check abs_min and abs_max requirements, do the following:

  • In the motive_ana directory, create the abs.cmd file to tell the tool to do an absolute delay trace for the desired edges of P1 , P2 , P3 , and P4 from their sources (see Figure 2). Save the results in the abs.trc file. The command file abs.cmd is used by both abs_min and abs_max .

  • The abs_min and abs_max files. use the database built in int_min and int_max . The batch.cmd file for abs_min is similar to that of int_min , with the following important exceptions:

sv   /file/ref     " motive_ana /io.ref"
sv  /limit/ctime   0
cmd                 motive_ana /abs.cmd

The MCP file, if specified, can be overwritten by using norefs in abs.cmd . Either core.ref or io.ref can be used, but use io.ref if primary I/Os need to be included in this analysis. Finally, note that the /limit/ctime variable is set to "0," which means the tool can spend unlimited time on a path.

  • In abs_min , create the abs.comp file, which resembles the following:

g1 (a < b) (skew = 0.25)
 
AND a rising     longest
AND a falling    longest
AND b falling    shortest
end g2 (a > b) (skew = -0.25)
 
AND a rising     shortest add_cycle
AND a falling    shortest add_cycle
AND b rising     longest
end

Write a script to process both abs.trc and abs.comp to find the timing relationship between AND.a and AND.b signals. In abs.comp , group g1 compares P1 to P3 (see Figure 2). Group g1 performs the following: It tells the script to find the max falling and rising delays of the AND.a path in abs.trc . It adds another 0.25 ns to the delays (indicated by skew = 0.25). It finds the min falling delay for AND.b path. Group g1 also tells you whether AND.a 's two delays are less than the delay of AND.b . Group g2 performs the following: It compares P2 to P4 . It tells the script to find the min falling and rising delays of AND.a path in abs.trc . Group g2 also subtracts another 0.25 ns from the delays, adds a full clock cycle to the delays (indicated by add_cycle because P2 occurs at the second clock cycle), and finds the max rising delay of AND.b. Finally, group g2 tells you whether AND.a 's two delays are larger than the delay of AND.b .

The process for abs_max is similar.

The ext_min and ext_max subdirectories The subdirectories ext_min and ext_max are used to analyze an ASIC's interface to its external components, such as RAM and other ASICs. In the example given here, only the interface between an ASIC's internal logic and its external components is analyzed. Therefore, the database in int_min and int_max is reused. The following is the process for ext_min :

  • Run Quad's vtran on ext.v to create the pin file ext.pin , which should be put in motive_ana directory. The ext.pin will be used by both ext_min and ext_max .
  • Take the core.mod file in int_min , and to each instance in it, add the top level hierarchy in ext.v . Call this new .mod file tmp.mod and put it in ext_min . Note that if scaling was done for IOPATH delays in int_min , it is saved in core.mod and is carried over to tmp.mod .
  • Create a technology file with no scaling and put it in ext_min .
  • Create a control file ext.ctl in the motive_ana directory that lists each external component once. It will be used by both ext_min and ext_max .
  • Run Quad's mmp utility on ext.ctl , MOTIVE models of external components, and the technology file to create the tmp1.mod file; then put it in ext_min .
  • Concatenate tmp.mod and tmp1.mod into ext.mod . The tool's .mod file has no INCLUDE statement.

    Figure 2. Points P1 and P2 are falling or rising edges of AND.a after the first clock and the second clock, respectively. P1 should always precede P3 with a required margin and P2 should always follow P4 with a required margin (signal AND.b has a pulse width requirement).

  • Use Quad's XTK tool or Spice to analyze and calculate the net delays for the ASIC's external interface and come up with an .idd file called tmp1.idd. It should contain both min and max delays (max can be 120 percent of min). Put it in ext_min .
  • Take the core.idd file in int_min and, to each instance in it, add the top-level hierarchy in ext.v . Call this new .idd file tmp.idd , which is put in ext_min .
  • At this point, you need to know whether int_min had scaled the core.idd file during its analysis. If so, the scaled delays are not saved in core.idd . Write a script to scale the core.idd file in addition to adding the top-level hierarchy; then save the results in tmp.idd .
  • Concatenate tmp.idd file with tmp1.idd into ext.idd and put it in ext_min . The tool's .idd file has no INCLUDE statement.

  • The command file batch.cmd is similar to that of int_min , with the following important exceptions:

sv   /file/mcp      " motive_ana /ext.mcp"
sv   /file/net      " motive_ana /ext.pin"
sv   /file/ref      " motive_ana /ext.ref"

Note that the prt_scl.cmd in int_min is not included here, because net delays in ext.idd are scaled with a user script.

The process for ext_max is similar.

Due to limited space, the actual ext_min and ext_max analysis can be much more complicated than what was just described. For example, each can be divided into two subcases. For ext_min , there are fast ASIC (int_min) for slow external components, and fast ASIC (int_min) for fast external components. For ext_max , there are slow ASIC (int_max) for slow external components, and slow ASIC (int_max) for fast external components.

Each subcase will have a different MOTIVE database. Also, if the external components include RAM, each subcase can be further divided into separate READ and WRITE analyses. One purpose for creating different subcases is to reduce the number of false paths and to facilitate analysis.

References

  1. Quad Design Technology Inc., "MOTIVE System Reference" Manual, Feb. 1995.

Acknowledgments

I would like to thank Joe Quinlivan, Steve Barbas, Mike Homberg, and Clark M. Baker for their encouragement and their valuable suggestions on how best to use MOTIVE.

Luke L. Chang is a member of the CAE group at Ascom Nexion Inc. (Acton, MA).

To voice an opinion on this or any Integrated System Design article, please e-mail your message to michael@asic.com.


integrated system design  September 1996



[ Articles from Integrated System Design Magazine ] [ ICs and uPs ]
[ Custom ICs and Programmable Logic ] [ Vendor Guide ]
[ Design and Development Tools ] [ Home ]



For more information about isdmag.com e-mail cam@isdmag.com
For advertising information e-mail amstjohn@mfi.com
Comments on our editorial are welcome
Copyright © 1996 Integrated System Design Magazine

  Free Subscription to EE Times
First Name Last Name
Company Name Title
Email address
  Click here for your Free Subscription to EETimes Europe
 
CAREER CENTER
Looking for a new job?
SEARCH JOBS
SPONSOR

RECENT JOB POSTINGS
CAREER NEWS
SRC Expands R&D Centers
The Semiconductor Research Corp has added a new center to its university R&D efforts.

For more great jobs, career related news, features and services, please visit EETimes' Career Center.


All White Papers »   

 
Education and
Learning


Learn Now:












Home | About | Editorial Calendar | Feedback | Subscriptions | Newsletter | Media Kit | Contact | Reprints|  RSS|   Digital|  Mobile
Network Websites
International
Network Features




All materials on this site Copyright © 2009 TechInsights, a Division of United Business Media LLC All rights reserved.
Privacy Statement | Terms of Service | About