AR# 1644


8.1i PAR - How do I set up and de-bug Multi-Pass Place and Route/Turns Engine/Networked PAR?


Multi-Pass Place and Route (MPPR) is a feature that allows you to run multiple iterations of Place and Route (PAR) on a single machine (single-node MPPR), or on multiple workstations (multi-node MPPR).

This feature is useful for finding Place and Route solutions for designs that are close to meeting timespecs or are finishing with only a few unroutes. MPPR runs multiple placement seeds in an attempt to find a placement that results in all signals being routed and all timing constraints met.


Input Files:

Single-node MPPR requires only one input file: a mapped "<design>.ncd".

Multi-node MPPR requires two input files: a mapped "<design>.ncd", and a "nodelist" file. A "nodelist" file is a user-created ASCII file that lists the workstation names.

Homogeneous/Heterogeneous Networks:

Multi-node MPPR can run on homogenous networks: all Solaris, or all HP-UX.

Multi-node MPPR can also run on heterogeneous networks: mix of Solaris and HP-UX. The Xilinx software and license environment must be set appropriately in the ".cshrc" file for each platform on which you intend to run. See the sample ".cshrc" file below which sets the environment differently based on the platform being used. This is necessary because the remote nodes read their environment variables from the ".cshrc"; they do not receive them from the launching node.


MPPR can operate only on Xilinx FPGA families (XC3000a, XC4000E, XC4000XL, Virtex). It cannot operate on CPLDs: XC7000, XC9500.

Although single-node MPPR can operate on any platform in the M1 release, multi-node MPPR can operate only on UNIX workstations.

Each node uses a single license while running. The maximum number of nodes that can operate in parallel is limited to the number of licenses available.

Each run targets the same part, and uses the same algorithms and options. Only the starting point, or the cost table entry, is varied.

Environment Variables:

- PAR_AUTOMNTPT - Multi-node MPPR uses network path names to access files. By default, PAR builds a network path to specified input files, assuming an auto-mounted network using "/net/<machine name>" as the mount point. For example, a local path name to a file may be "/usr/ivan/designs/cpu.ncd". PAR will by default build a network path name of "/net/<machine name>/usr/ivan/designs/cpu.ncd".

If the network is auto-mounted, but does not use "/net/<machine name>" as the auto-mount point, the PAR_AUTOMNTPT variable can be used to set the network auto-mount point. For a network that uses "/xyz/<machine name>" as the auto-mount point, the PAR_AUTOMNTPT variable should be set to "xyz".

For hard-mounted networks, the default network paths generated by PAR will not be valid. In this case, PAR must be run from a location where the directory path is valid on all remote machines being used. The PAR_AUTOMNTPT variable must be set to "/". This tells PAR not to build auto-mount paths on remote machines, but to use "$PWD" instead. An alternative is to set PAR_AUTOMNTPT to "" and use full paths to all files specified on the command line.

- PAR_AUTOMNTTMPPT - Most networks use "/tmp_mnt" as a temporary mount point. If your network uses a temporary mount point by a different name, like "/t_mnt", then you must set the PAR_AUTOMNTTMPPT variable to the temporary mount point name; in this example, you would set PAR_AUTOMNTTMPPT to "/t_mnt". The default value for PAR_AUTOMNTTMPPT is "/tmp_mnt". This variable only needs to be set for auto-mounted networks that do not use "/tmp_mnt" as the temporary mount point.

- Multi-node MPPR logs onto a node and then invokes PAR. The environment variables on the node are read from the ".cshrc" (or equivalent); they are not passed from the host to the node. Therefore, all Xilinx environment variables must be defined in the ".cshrc"; otherwise, the PAR process on the node will not be able to find the software or the licenses.

For more general information about setting ISE environment variables, see (Xilinx Answer 11630).


The online documentation discusses MPPR further. From the command line type "dtext", to start the dynatext browser. Make the following selections: Development Systems Reference Guide -> Chapter 10 - PAR -> Turns Engine (PAR Multi-Tasking Option).


- Command Line => {The 2 lines following represent 1 command}

par -m <nodelist file> -n <# of iterations>

-s <# of iterations to save> <mapped design>.ncd <output directory>.dir

-m <nodelist file> = Use only for multi-node MPPR. (Omit for single-node MPPR.) Use absolute local path name.

-n <# of iterations> = Specifies the number of Place and Route passes.

-s <# of iterations to save> = Only the best -s results are saved.

<mapped design>.ncd = Input .ncd file.

<output directory>.dir = Directory where the best -s results are saved. Files include placed and routed ".ncd" files, summary timing reports (".dly"), pin-out files (".pad"), and log files (".par").

Graphical User Interface:

1. Open the design manager: dsgnmgr.

2. Open a project in the design manager.

3. Select a version. MPPR will not be available if a revision is selected.

4. Select Implement ->FPGA Multi-Pass Place and Route.

5. In the pop-up dialog box, enter the number of iterations to run and to save. The starting strategy determines the initial point for the algorithms. As each PAR process is initiated, its starting strategy is incremented by 1. Varying the starting strategy produces varying routing and timing results; it is impossible to predict which starting strategies will produce the best results. It is a "Try and See" variable.

For single-node MPPR, leave the nodelist field blank; for multi-node MPPR enter the full path name to the nodelist file.


With multi-node MPPR, you might receive messages from the log in process. The problems are either network-related or environment variable-related.


You might not be able to log on to the machines listed in the nodelist file.

Try to ping the nodes - ping <machine name>. You should get the message "machine is alive". Ping should also be in your path (UNIX cmd: which ping). If it returns packet information, then you should confirm that ping was run with no options. Ping must return the message "machine is alive" for MPPR to work.

Try to log on to the nodes - rsh <machine name>. You should be able to log on to the machine. If you cannot, make sure "rsh" is in your path (UNIX cmd: which rsh). If "rsh" is in your path, but you still cannot log on, contact your network administrator.

Try to launch PAR on node - rsh <machine name> /bin/sh -c par

This is the same command that multi-node MPPR uses to launch PAR. If this command is successful, everything is correctly set up for <machine name> node.


Check the environment on the nodes - Log on to the problematic node (UNIX cmd: rsh <machine name>). Check the "$XILINX, $LD_LIBRARY_PATH", and $path variable (UNIX cmd: echo $<variable name>). If these variables are not set correctly, make sure that these variables are defined in your ".cshrc" file. (NOTE: Some, but not all, errors in reading the ".cshrc" might keep the rest of the file from being read; these errors might need to be corrected before the XILINX environment variables in the ".cshrc" are read.)

/bin/sh: par not found - This message indicates that the environment in the ".cshrc" is not being correctly read by the node.

Sample Files:

-------------------------- .cshrc file segment -------------------------------

# This is a comment.

# This setup enables the use of multi-node MPPR with homogeneous and heterogeneous networks: Solaris, SunOS, and HP-UX. When a login occurs, the bin type variable is set to the node platform, which then points the Xilinx environment variables to the platform-specific software and libraries.

if (!($?bintype)) then

set hosttype = `uname -s -r`

if ("$hosttype" =~ SunOS\ 4.1.[34]*) then

set bintype = sun

else if ("$hosttype" =~ SunOS\ 5.[45]*) then

set bintype = sol

else if ("$hosttype" =~ HP-UX\ [AB.0-9]*) then

set bintype = hp


echo "Unknown Hostype"

set bintype = unknown



setenv XILINX /products/xilinx/m1

setenv LD_LIBRARY_PATH ${XILINX}/bin/${bintype}:${LD_LIBRARY_PATH}

setenv LM_LICENSE_FILE /products/license/combined.flexlm:/xilinx/flex/license.dat

setenv XILINX_SERVER "license_server1;license_server2"

set path=($path ${XILINX}/bin/${bintype})

NOTE: The ".cshrc" file will often contain a line that terminates execution early for non-interactive shells. A common example is the following:

if ($?USER == 0 || $?prompt == 0) exit

If the Xilinx environment is not set prior to this line, all multi-node MPPR jobs will fail because the remote shells will not have the proper environment.

All stty commands should be placed after this line in the ".cshrc" file. Otherwise, stty error messages will be seen while running the Turns Engine: "stty: Invalid Argument".

------------------------- nodelist file below --------------------------------

# This is a comment

# Note: machines are accessed by multi-node MPPR from top to bottom

# Sparc 20 machines running Solaris (SunOS 5.5)







# Sparc 10 machines running SunOs (4.1.4)






# HP's running HP-UX 9.05






AR# 1644
Date 12/15/2012
Status Active
Type General Article
People Also Viewed