Cadence NeoCircuit

NeoCircuit is a circuit optimizer that can size transistors and adjust values in a circuit to center it for optimum yield in a given process.

It has its own parallelization setup, using rsh/ssh, or integrated with compute farms run by LSF, SGE, and Altair Accelerator.

Altair Accelerator Integration

The baseline integration was written by Altair, and consists of two files:
  • etc/pmconfig/FTNC.tcl, the interface procedures
  • etc/pmconfig/examples/PMConfigFTNC, the example variables setup file

Configuration File PMConfig Variables

The following table describes the configuration file variables used by the NeoCircuit-Altair Accelerator integration.
Table 1. Altair Accelerator PMConfig Variables
Variable Meaning Default Range
pmtype Parallel Machine integration type tcl tcl
tcl_file_name Name of integration procedures file FTNC.tcl FTNC.tcl
portnumber TCP/IP port used by evalNode job on a host 4000 1024-65535
queuename Name of Altair Accelerator queue to receive evalNode jobs vnc Any string starting with vnc
maximum_number_of_evalnodes Maximum number of evalNode jobs to start unlimited 1 .. 2X number of farm hosts
resourcerequirements Resources required to run an evalNode job RAM/32 (linux) Only installed Altair Accelerator platforms should be configured
runenv Name of environment in which to run evalNode jobs none Named environment capable of running NeoCircuit


A snapshot environment is used by default, but you can specify a named environment in the PMConfig file using the variable runenv.

Integration Procedures

This describes the Tcl procedures that implement the integration between NeoCircuit and Altair Accelerator. The baseline was derived from the Lsf.tcl file.

Table 2. NeoCircuit--Altair Accelerator Tcl Integration Procedures
Procedure Function Parameters Return
start_evalNode Start an evalNode job on a farm host none jobID of evalNode job
get_pending_pids Return a list of jobids for jobs that have been submitted, but are not yet running. {unused1 username} list of pending jobids for username
check_suspended Determine whether a given jobID is suspended {jobID} 1 if suspended, 0 if not
sendSignal Stop a given evalNode job {jobid signum unused2 } 0