6.15 Constraints by File Format: GCF Command Reference

6.15.1 About GCF Files

You can define the following types of constraints in a GCF constraint file:

Only ProASIC devices support GCF Timing commands. Use the SDC timing commands to import timing constraints for ProASIC PLUS devices. All other GCF commands are supported by both ProASIC and ProASIC PLUS devices.

Designer supports the following GCF commands.

GCF Placement Command

Action

net_critical_ports

Specifies a specific subset of critical ports on a net

set_critical

Specifies critical nets and their relative criticality over other critical nets.

set_critical_port

Identifies design I/O ports that have above-normal criticality

set_empty_io

Specifies a location in which no I/O pin should be placed

set_empty_location

Specifies a location in which no cell should be placed

set_initial_io

Initially assigns package pins to I/O ports or sets the location of I/O ports

set_initial_location

Initially sets the location of a cell instance at specified x, y coordinates

set_io

Either assigns package pins to I/O ports or sets the location of I/O ports at a specified location on a device

set_io_region

Places specific I/O instances into a target rectangular region

set_location

Assigns a cell instance to the specified x,y coordinates

set_memory_region

Creates and assigns memory to a region

set_net_region

Places all the connected instances, driver, and all the driven instances for the net(s) into the specified rectangle

dont_fix_globals

Disables the default action that automatically corrects the choice of global assignment to use only the highest fanout nets

read

Specifies the name of the constraint file containing the constraints to use

set_auto_global

Specifies the maximum number of global resources to use

set_auto_global_fanout

Sets the minimum fan-out a net must have to be considered for automatic promotion to a global

set_global

Classifies the specified nets as global nets

set_noglobal

Classifies nets to avoid automatic promotion to global nets

use_global

Specifies a single spine (LocalClock) or a rectangle of spine region which may encompass more than one spine region

dont_optimize

Prevents buffers and inverters from being removed from the netlist

dont_touch

Enables you to selectively disable optimization of named hierarchical instances

optimize

Turns on all netlist optimizations (the default mode);enables you to remove buffers and inverters from the netlist

set_max_fanout

Sets the maximum fan-out limit on the specified nets when optimizing buffers and inverters

6.15.2 GCF Syntax Conventions

A ProASIC constraint consists of a statement and an argument, terminated by a semicolon. Statements are not case sensitive. However, cell instance, net, and port names used as arguments may be quoted and are case sensitive. Except for white spaces, all ASCII characters can be used. Comments are allowed in constraints files and must be preceded by two forward slashes (//). Time values are given in nanoseconds. When constraints are duplicated, the last one specified for a specific item overwrites any previous similar constraints already specified for the considered item.

This section describes syntax conventions for notation, user data variables, and comments. Comments begin with double slashes (//) and are terminated by a newline character.

Table 6-6. Syntax Conventions for Notation

Notation

Description

item

Represents a syntax item

item ::= definition

item is defined as definition

item ::= definition1

||= definition2

item is defined as either definition1 or definition2 (Multiple alternative syntax definitions are allowed)

[ item ]

Item is optional

{ item }

Item is a list of required items. At least one item must appear.

KEYWORD

Keywords appear in uppercase characters in bold type for easy identification, but are not case sensitive.

VARIABLE

Represents a variable and appears in uppercase characters for easy identification

Table 6-7. Syntax Conventions for User Data Variables

Notation

Description

FILEIDENTIFIER

Represents a hierarchical filename.

IDENTIFIER

Represents the name of a design object. Can be a block, cell instance, net, or port. IDENTIFIERS can use any ASCII character except the white space and the slash (/), which is the hierarchical divider character (see QPATH below). IDENTIFIERS are case sensitive.

POSFLOAT

Represents a positive real number; for example, 4.3, 1.15, 2.35

POSNUMBER

Represents a positive integer; for example, 1, 12, 140, 64. When representing time, POSNUMBER is expressed in nanoseconds (ns)

QPATH

Represents a hierarchical IDENTIFIER. The levels of the hierarchy are represented by IDENTIFIERS divided by a slash (/). The QPATH hierarchical IDENTIFIER may or may not be quoted

6.15.3 Placement Constraints

It is possible to use placement constraints to specify block-instance and macro placement. You can specify initial, fixed, region, and macro placements. Also, placement obstructions (locations that are not to be used and thus to be kept empty during placement instances) can be specified.

For example, a constraint that places two connected blocks close together usually improves the timing performance for those blocks. Similarly, a constraint that assigns an I/O pin to a particular net forces the router to make the connection between the driving or receiving cell and the I/O itself.

Like all constraints, placement constraints limit Designer’s freedom when processing the design. For instance, assigning a fixed location makes that location unavailable during placement optimization. Such removal usually limits the program’s ability to produce a chip-wide solution.

6.15.4 Macro

Defines the locations of a sub-design as a macro so that you are able to reuse this placement in different instantiations of the sub-design.

macro name (x1, y1 x2, y2) {macro_statements}

6.15.4.1 Arguments

name
Specifies the macro name identifier
x1, y1
Specifies the lower-left coordinate of the macro.
x2, y2
Specifies the upper-right coordinate of the macro.
macro_statements
Any of the following statements:
  • set_location (x, y) hier_inst_name;
  • set_initial_location (x, y)hier_inst_name;
  • set_empty_location (x, y);
You can use the set_location or set_initial_location statements to place or initially place a sub-design instance by calling its macro and then applying a translation and rotation.
set_initial_location (x, y) hier_inst_name
macro_name [transformations];
Where hier_inst_name is the hierarchical name of the instance of the sub-design, x, y is the final location of the lower-left corner of the macro after all transformations have been completed, macro_name is the name of previously defined macro, and transformations are optional, and any of the following in any order:
  • flip lr - flip cell from left to right
  • flip ud - flip cell from up to down
  • rotate 90 cw - rotate 90° clockwise
  • rotate 270 cw - rotate 270° clockwise
  • rotate 90 ccw - rotate 90° counter-clockwise
  • rotate 180 ccw - rotate 180° counter-clockwise
  • rotate 270 ccw - rotate 270° counter-clockwise
The transformations are processed in the order in which they are defined in the statement.

6.15.4.2 Supported Families

ProASIC

6.15.4.3 Description

The macro constraint must precede the corresponding set_location that places the macro in the GCF file(s) as in the following example:

macro mult (1,1 6,6) { set_location...

}

Nested macros are not allowed. The location statements inside a macro definition must refer to individual cell instances and not to complete sub-designs.

6.15.4.4 Exceptions

None

6.15.4.5 Examples

set_location (3,3) a/b mult flip lr; set_initial_location (3,3) a/b mult flip lr;

6.15.5 Package Pin and Pad Location

Generally, you are concerned with the mapping of signals (ports) to the pins of the selected package. However, you may want to control the allocation of signals to particular pads. This is accomplished by assigning ports to the pad location rather than to the package pin. Because all pads are pre-bonded to package pins, the effect is to assign ports to package pins, with the emphasis on pad location rather than package pin.

Pad location is described by the letters N (North), S (South), E (East) or W (West) followed by a space and a number. This location code determines the direction and offset of the pad with respect to the die.

The top edge of the viewer contains the North pads and the right edge contains the East pads. The number refers to the pad position along its edge. For example, N 48 corresponds to the 48th pad along the North edge of the die. The figure below shows the numbering system used for pad location.

???

Figure 17 · Pad Location

6.15.6 net_critical_ports

net_critical ports hier_net_name instance_port_name [ , instance_port_name ];

Defines a subset of critical ports on a net. The resulting netlist contains a buffer in the origin net, together with the critical ports. The inserted buffer drives the remaining connections on the original net.

6.15.6.1 Arguments

hier_net_name
Specifies the name of the hierarchical net(s).
instance_port_name
Specifies the name of the ports on the net(s).

6.15.6.2 Supported Families

ProASIC PLUS and ProASIC

6.15.6.3 Exceptions

None

6.15.6.4 Examples

The following example identifies two inputs of the net /u1/u2/net1 that are more critical than all other connections on that net. All other connections on the net will be buffered with a BUF cell that will be placed in a tile to reduce fanout delay on the specified inputs:

net_critical_ports /u1/u2/net1 nandbk1.A sigproc.C;

6.15.7 set_critical

Specifies critical nets and their relative criticality over other critical nets.

set_critical criticality_numberhier_net_name

[,hier_net_name…];

6.15.7.1 Arguments

criticality_number
Sets the criticality level from 1 to 5, with 1 being the least critical and 5 being the most critical. The default is 1. Criticality numbers are used in timing-driven place and route.
hier_net_name
Specifies the full hierarchical name of the net(s).

6.15.7.2 Supported Families

ProASIC PLUS and ProASIC

6.15.7.3 Exceptions

None

6.15.7.4 Examples

The following example sets the timing of u1/u2/ net1 more critical than u1/u2/net5 and u1/u2/net3:

set_critical 5 /u1/u2/net1; set_critical 2 /u1/u2/net5, u1/u2/net3;

6.15.8 set_critical_port

Identifies design I/O ports that have above-normal criticality.

set_critical_port criticality_number signal_name

[,signal_name…];

6.15.8.1 Arguments

criticality_number
A number from 1 to 5 that is relative in criticality to other critical I/O signals, from least (1) to most critical (5). The default is 1.
signal_name
Specifies the name of a user-defined signal associated with a specific I/O pin on the port.

6.15.8.2 Supported Families

ProASIC PLUS and ProASIC

6.15.8.3 Exceptions

None

6.15.8.4 Examples

The following example sets all nets associated with device ports IOBus[3] and IOBus[5] to criticality number 3:

set_critical_port 3 IOBus[3], IOBus[5];

6.15.9 set_empty_io

set_empty_io { package_pin| pad_location};

Specifies a location in which no I/O pin should be placed. The location can be specified by side and offset or by name.

6.15.9.1 Arguments

package_pin
The symbolic name for the pin.
pad_location
Specifies the location of the pad in the layout.

6.15.9.2 Supported Families

ProASIC PLUS and ProASIC

6.15.9.3 Exceptions

None

6.15.9.4 Examples

The following example forces pin B5 and the pin associated with the fourth tile on the North side to be empty:

set_empty_io B5, (N,4);

6.15.10 set_empty_location

Specifies a location in which no cell should be placed.

set_empty_location (x ,y); set_empty_location (xbl ,ybl xtr ,ytr);

6.15.10.1 Arguments

x, y
Specifies the tile coordinates for the empty cell location.
xbl ,ybl xtr ,ytr
Specifies the tile coordinates for the bottom-left and top-right corner of the region. Note: Only white spaces are allowed between the coordinates.

6.15.10.2 Supported Families

ProASIC PLUS and ProASIC

6.15.10.3 Exceptions

None

6.15.10.4 Examples

The following example informs the placement program that location (3, 7) is unavailable for cell placement:

set_empty_location( 3 ,7);

set_empty_location(113 ,1 60 ,80 );

6.15.11 set_initial_io

set_initial_io { package_pin| pad_location} io_port_name

[, io_port_name , … ];

Initially assigns package pins to I/O ports or sets the location of I/O ports at a specified side of a device. The placer can reassign or relocate the cells during place-and-route.

6.15.11.1 Arguments

package_pin
A package pin number for a specified I/O cell. If you use package_pin, only one io_port_name argument is allowed (required if no pin location is given).
pad_location
A pad location number on the chip. It constrains the pin location of a specified I/O cell to a specific pad location on the chip. Only one io_port_name argument is allowed. You can specify multiple, comma-separated ports only when they are assigned to a location.
io_port_name
The name of the I/O port to assign to the specified package pin.

6.15.11.2 Supported Families

ProASIC PLUS and ProASIC

6.15.11.3 Exceptions

None

6.15.11.4 Examples

The following example initially places the I/O associated with net in3 to package pin A11:

set_initial_io A11 in3;

The next example initially places the I/O associated with net in4 on the fourth tile:

set_initial_io (1,4) in4;

6.15.12 set_initial_location

set_initial_location ( x, y) hier_inst_name;

Initially sets the location of a cell instance at specified x, y coordinates. The placer can relocate the cell instance during place-and-route.

6.15.12.1 Arguments

x, y
Specifies the tile coordinates for the location of a specified cell instance.
hier_inst_name
Specifies the hierarchical path to a cell instance.

6.15.12.2 Supported Families

ProASIC PLUS and ProASIC

6.15.12.3 Exceptions

None

6.15.12.4 Examples

set_initial_location (43,105) bk3/fp5/nand3_4;

6.15.13 set_io

Either assigns package pins to I/O ports or sets the location of I/O ports at a specified location on a device. This hard constraint cannot be overruled by the placer. This constraint also may have an impact on the timing results of a design.

set_io {pinName |location_Definition};

6.15.13.1 Arguments

pinName
Specifies the name of a pin to assign to a port.
location_Definition
Specifies the location of the I/O port.

6.15.13.2 Supported Families

ProASIC PLUS and ProASIC

6.15.13.3 Exceptions

If a hard constraint is not suitable, use the set_initial_io constraint.

6.15.13.4 Examples

set_io A9 in1; set_io (2,22) in2;

6.15.14 set_io_region

set_io_region (x1,y1 x2, y2) p1 [, p2, p3, .... , pn] ;"

Enables you to place specific I/O instances into a target rectangular region. The global I/Os are excluded from this constraint.

6.15.14.1 Arguments

x1, y1 x2, y2
Specifies the lower-left and upper-right corners of the rectangle that define the region.
p1... pn
Specifies one or more I/O instance names or ports.

6.15.14.2 Supported Families

ProASIC PLUS and ProASIC

6.15.14.3 Exceptions

None

6.15.14.4 Examples

Multiple instances or ports must be separated by commas as shown in the following example:

set_io_region (0,41 0,48) "acc[3]", "acc[4]";

6.15.15 set_location

set_location (x, y ) hier_inst_name ; set_location (xbl ,ybl xtr ,ytr) hier_inst_name/*;

Assigns a cell instance to the location specified by the x,y coordinates. The placer cannot relocate the cell instance during place-and-route.

6.15.15.1 Arguments

x, y
Specifies the tile coordinates for the location of a cell.
hier_inst_name
Specifies the hierarchical path to a cell instance.
xbl ,ybl xtr ,ytr
Specifies the tile coordinates for the bottom-left and top-right corner of the region.

6.15.15.2 Supported Families

ProASIC PLUS and ProASIC

6.15.15.3 Exceptions

None

6.15.15.4 Examples

set_location (1,15) u4/u3/nand3_4;

set_location (1,1 32,32) datapath/*;

6.15.15.5 set_location macro call

set_location (x, y) hier_subdesign_inst_name macro_name [transformations];

This statement has been extended to allow you to place a sub-design instance by calling its macro and then applying a translation and rotation.

where

hier_subdesign_inst_name is the hierarchical name of the instance of the sub-design; (x, y) is the final location of the lower left corner of the macro after all transformations have been completed; macro_name is the name of the previously defined macro; transformations are optional, and any of the following in any order:

  • flip lr - flip cell from left to right
  • flip ud - flip cell from up to down
  • rotate 90 cw - rotate 90 ° clockwise
  • rotate 180 cw - rotate 180 ° clockwise
  • rotate 270 cw - rotate 270 ° clockwise
  • rotate 90 ccw - rotate 90 ° counter-clockwise
  • rotate 180 ccw - rotate 180 ° counter-clockwise

6.15.16 set_memory_region

Creates a region and assigns memory to it.

set_memory_region (x1,y1 x2,y2) memory1_name [,...,memoryn_name];

6.15.16.1 Arguments

(x1,y1 x2,y2)
The coordinates x1 and y1 specify the bottom-left corner, while x2 and y2 specify the top-right corner of the rectangle that defines the region in which the memory macros will be assigned. The macros are constrained to this region.
memory1_name,...
Specifies the memory macro(s) to assign to the region. Macro names are hierarchical names in the user netlist. You can use wildcards in macro names. The wildcard character (*) matches any string.

6.15.16.2 Supported Families

ProASIC PLUS and ProASIC

6.15.16.3 Description

You can only assign names of memory macros to the region. Do not specify names of individual tiles. For cascaded memory, the set_memory_region constraint applies to the whole cascaded block, even if your statement mentions only one macro out of the whole cascaded block.

6.15.16.4 Exceptions

None

6.15.16.5 Examples

set_memory_region (1,101 32,101) M1/U0;

set_memory_region (1,101 48,101) M1/U0,M1/U1;

set_memory_region (1,101 128,101) M1/U*;

You can also use set_net_region and use_global to assign memory to regions.

Additionally, you can use the MultiView Navigator (MVN) to create regions that include memory. MVN regions can span core, I/O, and/or memory.

6.15.17 set_net_region

Places all the connected instances, driver, and all the driven instances for the net(s) into the specified rectangle.

set_net_region (x1,y1 x2,y2) <net_name_wildcard>;

6.15.17.1 Arguments

(x1,y1 x2,y2)
The coordinates x1 and y1 specify the bottom-left corner, while x2 and y2 specify the top-right corner of the rectangle that defines the region. The nets are constrained to this region.
net_name_wildcard
Specifies the net(s) to assign to the region. You can use wildcards in net names. The wildcard character (*) matches any string.

6.15.17.2 Supported Families

ProASIC PLUS and ProASIC

6.15.17.3 Description

This command puts the region constraint on all the connected instances, which will be processed by the placer. Only white spaces are allowed between the coordinates.

The RAMs and I/Os are assigned to the LocalClock region unless the Compile option “Include RAM and I/O in Spine and Net Regions” is cleared. For designs created with v5.1 or earlier, this option is cleared by default. See "Compile Options" in the online help for more information.

6.15.17.4 Exceptions

None

6.15.17.5 Examples

set_net_region (1,101 32,101) addr*;

6.15.18 About Global Resource Constraints

Each ProASIC and ProASIC PLUS device includes four global networks that have access to every tile. These four global networks provide high speed, low skew routing resources to signals such as clocks and global resets.

Once the netlist is imported, Designer sets global resource parameters and promotes the highest fanout nets to the remaining global resources unless the dont_fix_globals statement has been specified in a constraint file.

Note: Note: When using the dont_fix_globals statement, global assignments made in the constraint files and design netlist will be honored (the constraint file entries will take precedence).

These global resource parameters can be supplemented by including global resource constraints in a constraint file. Global resource constraints can define which signals are assigned to global resources and which signals cannot be promoted to global resources. Global resource constraints can also override the default action that selects high fanout nets for use by the global resources.

6.15.18.1 Priority Order for Global Promotion

While assigning signals to global resources, Designer considers this information in the following priority:

  1. The set_global and set_io statements (instances of those global cells, which cannot be demoted)
  2. Nets with the highest potential fan-out above 32 (after removal of all buffers and inverters)
  3. Global cell instantiation in a netlist (global cells which can be demoted)

By default, a net with a fan-out of less than 32 will not be promoted to global automatically unless the set_global or set_io constraint statements is used for this net. You can override this threshold of 32 by using the set_auto_global_fanout constraint statement.

Figure 6-16. Priority Order for Global Promotion
???

6.15.18.2 dont_fix_globals

dont_fix_globals;

Disables the default action that automatically corrects the choice of global assignment to use only the highest fan-out nets.

6.15.18.2.1 Arguments

None

6.15.18.2.2 Supported Families

ProASIC PLUS and ProASIC

6.15.18.2.3 Exceptions

None

6.15.18.2.4 Examples

If you do not want the Designer software to automatically assign the highest fan-out nets to the available global resources but respect your choice of global nets instead, then include the following statement in a constraint file:

dont_fix_globals;

6.15.18.3 read

Specifies the name of the constraint file containing the constraints to use.

read [ -eco] [ -initial] file ;

6.15.18.3.1 Arguments

-eco
Specifies that the constraint file is to be read in eco (engineering change order) mode. In this mode, no errors will be reported when certain nets or instances are not found in the design. Instead a warning is generated.
-initial
Specifies that the constraint file is to be read in initial mode. In this mode, all fixed location statements will be interpreted as initial locations instead.
file (required)
The name of the constraint file, surrounded by double quotes.

6.15.18.3.2 Supported Families

ProASIC PLUS and ProASIC

6.15.18.3.3 Description

A constraint file can contain multiple read statements. For example, you can put pin assignments in one file, optimization constraints in another, placement constraints in yet another, and read them all in through a master constraint file.

6.15.18.3.4 Exceptions

None

6.15.18.3.5 Examples

The following example instruct the Designer software to use constraints from the GCF files pinmap.gcf and decoder.gcf. A full path specification is given for pinmap.gcf. The file decoder.gcf has no path specification and is assumed to be in the design working directory.

read "/net/aries/designs/pinmap.gcf"; read "decoder.gcf";

6.15.18.4 set_auto_global

set_auto_global number;

Specifies the maximum number of global resources to use. The Designer software assigns global resources to high fan-out signals automatically.

6.15.18.4.1 Arguments

number
The maximum number of global resources to use in your design. If you specify a number that exceeds the actual number of global resources available in the device, the Designer software ignores the statement. If you specify 0, no automatic assignment to global resources occurs.

6.15.18.4.2 Supported Families

ProASIC PLUS and ProASIC

6.15.18.4.3 Exceptions

None

6.15.18.4.4 Examples

The following example specifies that of the possible four global nets available, the Designer software can automatically promote only two high fan-out nets:

set_auto_global 2;

6.15.18.5 set_auto_global_fanout

Sets the minimum fan-out a net must have to be considered for automatic promotion to a global.

set_auto_global_fanout number;

6.15.18.5.1 Arguments

number
The minimum fan-out for a net. The default number is 32.

6.15.18.5.2 Supported Families

ProASIC PLUS and ProASIC

6.15.18.5.3 Exceptions

None

6.15.18.5.4 Examples

For example, the following statement determines that a net must have a fan-out of at least 12 before Designer considers it for automatic promotion to a global resource.

set_auto_global_fanout 12;

6.15.18.6 set_global

Classifies the specified nets as global nets.

set_global hier_net_name [, hier_net_name ...];

6.15.18.6.1 Arguments

hier_net_name
Specifies the name of the hierarchical net(s).

6.15.18.6.2 Supported Families

ProASIC PLUS and ProASIC

6.15.18.6.3 Exceptions

None

6.15.18.6.4 Example

set_global u1/u3/net_clk, u3/u1/net_7;

6.15.18.7 set_noglobal

set_noglobal hier_net_name[ , hier_net_name… ];

Classifies nets to avoid automatic promotion to global nets. If the net was previously assigned to a global resource, this statement will demote it from that resource.

6.15.18.7.1 Arguments

hier_net_name
Specifies the name of the hierarchical net(s).

6.15.18.7.2 Supported Families

ProASIC PLUS and ProASIC

6.15.18.7.3 Exceptions

None

6.15.18.7.4 Example

set_noglobal u2/u8/net_14;

6.15.18.8 use_global

Specifies a single spine (LocalClock) or a rectangular spine region which may encompass more than one spine.

use_global spine <net_name>;

6.15.18.8.1 Arguments

spine
Specifies one of the spines: T1 to T<n> or B1 to B<n>.
net_name
Specifies the name of a net.

6.15.18.8.2 Supported Families

ProASIC PLUS and ProASIC

6.15.18.8.3 Exceptions

None

6.15.18.8.4 Example

If you specify the spine rectangle as B1, T3, the driven instances of the given net get a region constraint which encloses the rectangle, including the spine rectangle B1, T1, B2, T2, B2, T3.

use_global B1, T3 <net_name>;

The constraint tries to place the driver as close to the center of the rectangle as possible.

The RAMs and I/Os are assigned to the LocalClock region unless the Compile option “Include RAM and I/O in Spine and Net Regions” is cleared. For designs created with v5.1 or earlier, this option is cleared by default. See "Compile Options" in the online help for more information.

You can specify the following type of rectangles:

  • Bn, Bm : n<=m will mean Bn, Bn+1, ... Bm
  • Tn, Tm : n<=m will mean Tn, Tn+1, ... Tm
  • Bn, Tm : n<=m will mean Bn, Tn, Bn+1,Tn+1 ... Bm, Tm
  • Tn, Bm : n<=m will mean Bn, Tn, Bn+1,Tn+1 ... Bm, Tm The following table summarizes the available spines.
    Table 6-8. Global Spine Usage

    Device

    Spine

    A500K050

    T1 to T3

    B1 to B3

    A500K130

    T1 to T5

    B1 to B5

    A500K180

    T1 to T6

    B1 to B6

    A500K270

    T1 to T7

    B1 to B7

    APA075

    T1 to T3

    B1 to B3

    APA150

    T1 to T4

    B1 to B4

    APA300

    T1 to T4

    B1 to B4

    APA450

    T1 to T6

    B1 to B4

    APA600

    T1 to T7

    B1 to B7

    APA750

    T1 to T8

    B1 to B8

    APA1000

    T1 to T11

    B1 to B11

    T1 and B1 are the leftmost top and bottom global spines, respectively.

6.15.19 Netlist Optimization Constraints

Netlist optimization attempts to remove all cells from a netlist that have no effect on the functional behavior of the circuit. This reduces the overall size of a design and produces faster place-and-route times. This optimization is based on the propagation of constants and inverter pushing and takes advantage of inverted inputs of the basic logic elements.

Netlist optimization can be controlled by including netlist optimization constraints in constraint files submitted to Designer.

By default, all optimizations will be performed on the netlist. To control the amount of optimization that takes place, netlist optimization constraints can be used. Netlist optimization constraints can turn off all optimizations or disable the default action that allows all optimizations to limit the type of optimizations performed. The constraints can also define a maximum fanout to be allowed after optimizations are performed and isolate particular instances and hierarchical blocks from the effect of optimization.

After completion of netlist optimization, the design is a functionally identical representation of the design produced internally for use by Designer. View the design’s layout after successful placement and routing. After optimization, a number of instances that do not contribute to the functionality of the design may have been removed.

To keep the SDF file consistent with the original input netlist, deleted cells are written with zero delay so that back-annotation is performed transparently.

6.15.19.1 dont_optimize

Prevents buffers and inverters from being removed from the netlist.

dont_optimize [option];

6.15.19.1.1 Arguments

[option ]
Specifies the netlist optimization option to turn off and preserve.

Option

Description

buffer

Prevents buffers from being removed from the design

inverter

Prevents inverters from being removed from the design

const

Replaces all logical elements with one or more inputs connected to a constant (logical "1" or "0") by the appropriate logic function. If the replacement logic function is identified as an inverter or buffer, that element is removed.

dangling

Removes all cells driving unconnected nets

6.15.19.1.2 Supported Families

ProASIC PLUS and ProASIC

6.15.19.1.3 Description

This statement does not optimize your buffers or inverters; instead, it prevents them from being removed. When followed by one or more of the netlist optimization options, this statement turns off the named option (and preserves it).

If you have buffers or inverters that are connected to global nets, promoted global nets, or spine nets, this command is ignored and buffers and inverters are removed. To avoid removing them, use the dont_touch option.

6.15.19.1.4 Exceptions

None

6.15.19.1.5 Examples

dont_optimize buffer inverter;

6.15.19.2 dont_touch

Enables you to selectively disable optimization of named hierarchical instances.

dont_touch {hier_instance_name [hier_instance_name...];

6.15.19.2.1 Arguments

hier_instance_name [hier_instance_name ... ]
Specifies the name of the hierarchical instance(s) for which you want to disable optimization.

6.15.19.2.2 Supported Families

ProASIC PLUS and ProASIC

6.15.19.2.3 Description

You can use the wildcard character (*) to isolate all sub-blocks under the named block. If you use this constraint, any instances (including buffers and inverters that are connected to global nets, promoted global nets, and spine nets) stay intact.

6.15.19.2.4 Exceptions

Use “dont_touch” with instance names only. You cannot use this constraint with net names.

6.15.19.2.5 Examples

The statement in this example will enable only the buffer and inverter optimization types and optimization will be done on all instances except those contained in the block called /U1/myblock.

dont_touch /U1/myblock/*;

6.15.19.3 Optimize

Turns on all netlist optimizations (the default mode). When followed by one or more of the netlist optimization types, this statement enables only the named optimization(s).

optimize [{ option}];

6.15.19.3.1 Arguments

[{ option }]
Specifies the netlist optimization option to turn on.

Option

Description

Removes all buffers in the design, provided you have not exceeded the maximum fan-out

inverter

Removes all inverters in the design, provided you have not exceeded the maximum fan-out

const

Replaces all logical elements with one or more inputs connected to a constant (logical “1” or “0”) by the appropriate logic function. If the replacement logic function is identified as an inverter or buffer, that element is removed.

dangling

Recursively removes all cells driving unconnected nets

6.15.19.3.2 Supported Families

ProASIC PLUS and ProASIC

6.15.19.3.3 Exceptions

None

6.15.19.3.4 Examples

optimize buffer inverter;

6.15.19.4 set_max_fanout

Sets the maximum fan-out limit on the specified nets when optimizing buffers and inverters.

set_max_fanout NUMBER net_name_wildcard;

6.15.19.4.1 Arguments

NUMBER net_name_wildcard
Specifies the maximum fan-out limit on the specified net(s) during optimization.

6.15.19.4.2 Supported Families

ProASIC PLUS and ProASIC

6.15.19.4.3 Description

The set_max_fanout constraint is optimized to accept individual net names. If you specify a net name, the set_max_fanout constraint applies only to the named net or nets and not to the entire design.

The buffers and inverters are not removed if the fan-out for the given net exceeds the given limit. If no net name is given, then the command is applied to all the nets in the design. The net name can be a simple net or a name having wildcard characters.

6.15.19.4.4 Exceptions

None

6.15.19.4.5 Examples

set_max_fanout 15 testNet*;

6.15.20 About Delay Constraint Files (DCF)

Delay constraint information can be described in a *.dcf file and imported into Designer. Because the DCF language was developed to interact directly with the Timer tool and is therefore not a recommended method.

DCF files are only valid with earlier Antifuse families such as eX, SX-A, and SX. Although they are supported in eX and SX-A, Microchip recommends that you use SDC files for all your constraints.

DCF files are platform dependent. If you transfer from PC to UNIX or vice-versa, you must manually translate carriage-returns (unix2dos, dos2unix, or via ftp). PC text files have an extra character for carriage returns compared to UNIX text files.

Table 6-9. Supported command categories
CategoriesAction
global_clocksDescribes the clock waveforms from the global clock distribution network; local clocks, such as gated clocks, are not directly supported
max_delays/min_delaysDescribes max/min delays
io_arrival_timesDefines the arrival time to an input port
global_stopsDefines pins in don't care or false path
pin_loadsDefines the capacitance loading on package pins

6.15.20.1 DCF Syntax Rules

DCF Syntax Rules

The syntax rules for DCF are listed below. Note that these rules cannot be used as a parsing grammar. Terminal symbols are in upper case. Non-terminal symbols, which are enclosed with <>, are in lower case. Symbols enclosed with [] are optional. The symbol | separates alternatives.

<DCF> =

<sec_def_name>

<sec_io_arr>

<sec_min_del>

<sec_max_del>

<sec_clk>

<sec_global_stop>

<sec_def_name> =

SECTION TOP_LEVEL_DEF_NAME <stop>

<variable>. END <stop>

<sec_io_arr> =

SECTION IO_ARRIVAL_TIMES <stop>

[<io_arr_clauses>]

END <stop>

<io_arr_clauses> = <io_arr_clause> | <io_arr_clause> <io_arr_clauses>

<io_arr_clause> = [<number>:] <number> <timeunit> <io_list>.

<io_list> = <io> | <io> <io_list>

<io> = INPAD | OUTPAD| <variable>

<sec_max_del> =

SECTION MAX_DELAYS <stop>

<delay_clauses> END <stop>

<sec_min_del> =

SECTION MIN_DELAYS <stop>

<delay_clauses> END <stop>

<delay_clauses> = <delay_clause> | <delay_clause> <delay_clauses>

<delay_clause> =

DELAY <time>; SOURCE <source_list>; SINK <sink_list>; [STOP <stop_list>]; [PASS <pass_list>].

<source_list> = {<sources>} [EXCEPT {<sources>}]

<sources> = INPAD | CLOCKED | <name_list>

<name_list> = <variable> | <variable> <name_list>

<sink_list> = {<sinks>}[EXCEPT {<sinks>}]

<sinks> = OUTPAD | GATED | <name_list>

<stop_list> = {<name_list>} [EXCEPT {<sinks>}]

<pass_list> = {<name_list>} [EXCEPT {<sinks>}]

<sec_clk> =

SECTION GLOBAL_CLOCKS <stop>

[<waveform_clauses>] [<relational_clauses>] END <stop>

<waveform_clauses> = <waveform_clause> | <waveform_clause> <waveform_clauses>

<waveform_clause> = WAVEFORM <variable> RISE <time> FALL<time> PERIOD <time> [EXCEPT SOURCE {macrolist}] [EXCEPT SINK {macrolist}].

<relational_clauses> = <check_clause> | <check_clause> <check_clauses>

<check_clause> =

MULTICYCLE <variable> SOURCE CYCLE<value> [EXCEPT <name_list>] [; DESTINATION <clkname> CYCLE<value> <clkname> CYCLE<value> [EXCEPT<name_list>]].

<clkname> = <clockMacro>

<time> = <number> <unit>

<number> = <int>

<stop> =. | /* NULL */

<unit> = NS | MS | PS

<variable> = same as variable in C language.

<int> = same as int in C language. sec_global_stops> =

Section GLOBAL_STOPS.

{<pinNameList>}. End.

<sec_pin_loads> = Section PIN_LOADS.

<pinLoadClauses> End.

<pinLoadClauses> = <pinLoadClause> | <pinLoadCause>l<pinLoadClauses>]

<pinLoadClause> = <number> <capUnit> [TTL | CMOS] <pinNameList>.

<capUnit> = PF | NF | UF | MF

6.15.20.2 io_arrival_times

6.15.20.2.1 SECTION IO_ARRIVAL_TIMES

Use the IO_ARRIVAL_TIMES section to define the arrival time to an input port.

[early_arrival_time:] late_arrival_time timeunit {source_io_list} EXCEPT {source_io_list}.

6.15.20.2.2 Arguments

{early, late}_arrival_time
Signal arrival time relative to the reference time.
source_io_list
An INPAD or primary input pin.

The section IO_ARRIVAL_TIMES can be empty. For example,

SECTION IO_ARRIVAL_TIMES. END.

is entirely equivalent to

SECTION IO_ARRIVAL_TIMES.

0 0 {INPAD}. END

6.15.20.3 max_delays/min_delays

6.15.20.3.1 SECTION MAX_DELAYS/MIN_DELAYS

Use the MAX_DELAYS and MIN_DELAYS section to specify the maximum and minimum delays.

DELAY value timeunit; SOURCE {source_name_list}; SINK {sink_name_list}; [STOP

{stop_name_list}]; [PASS {bypass_name_list}].

6.15.20.3.2 Arguments

DELAY value
Specifies an integer.
timeunit
Allows {PS, NS, US}.
source_name_list
A list of signal sources. It can be one of the following: a macro output pin, macro name, or primary input.
sink_name_list
A list of signal destinations. It can be a name of a macro or a primary output.
stop_name_list
The list of pin names through which further propagation of signals will not be considered. This allows you to eliminate certain paths from consideration.
bypass_name_list
The list of latches which are allowed to be intermediate path points. By default, latches are considered to be sinks or path terminals.
INPAD/OUTPAD/GATED
Valid values for any of the lists, such as source_name_list or stop_name_list.

Normally there is no need to specify any timing requirements from any source to any sink clocked by an external global clock. This timing requirement can be generated automatically from the GLOBAL_CLOCK specifications and the sequential elements setup and hold times. For example, the timing constraint from a primary input to a sequential element can be derived from the sequential elements clocking waveform and the signal arrival time of the primary input.

A problem exists when two different internally-generated clock signals interact. This is due to the unpredictable and unknown skew between the two clock networks because of the routing delays from:

PAD >> internalMacro >> CLKINT

where CLKINT is the input pin of the global clock distribution network. The automatically generated path constraints will not incorporate the skew between the two clocks. In such cases, the path constraints should be expressed explicitly using the MAX/MIN_DELAYS section.

The most stringent timing constraint dominates. Hence, all general constraints should be looser than the specific constraints. For example, in the following example, the 26.0ns constraint dominates the 42.0ns constraint:

DELAY 42.0 ns SOURCE INPAD SINK OUTPAD.

DELAY 26.0 ns SOURCE {$1I23:Q $1I24:Q} SINK {ack_0}.

If the general constraint is tighter than the specific constraint, the specific constraint will effectively become a no-operation. In the following example, the looser constraint of 42.0ns has no effect since the general constraint of 26.0ns dominates.

DELAY 26.0 ns SOURCE INPAD SINK OUTPAD.

DELAY 42.0 ns SOURCE {$1I23:Q $1I24:Q} SINK {ack_0}.

The section MAX_DELAYS can be empty if there are no purely combinatorial paths from external sources to external sinks, and if every sequential element in the design is clocked by an external global clock. In this case, the timing constraints are generated automatically using the information in the GLOBAL_CLOCK section. Likewise, the MIN_DELAYS section can be empty.

One final word about external/internal sinks and sources with regard to the flip-flops and/or latches in the IOs: these flip-flops act as internal, not external, sources/sinks.

6.15.20.4 global_clocks

6.15.20.4.1 SECTION GLOBAL_CLOCKS

WAVEFORM clkname RISE value FALL value PERIOD value [EXCEPT SOURCE {sequential list }| EXCEPT SINK{sequential list}].

Use the GLOBAL_CLOCKS section to describe the clock waveforms from the global clock distribution networks. Local clocks, such as gated clocks, are not directly supported. The clock waveforms are used to generate the timing constraints of the paths between two sequential elements. To allow more user control when clocks interact, there are provisions to specify the clock period transitions, which should be considered. By default, the closest transitions are used when two clocks interact. The clock waveform specification has the following format:

6.15.20.4.2 Arguments

clkname
Specifies the name of the macro driving the clock network.
RISE/FALL/PERIODvalue
Specify the value as either an integer or a floating point number followed by an unit selected from {NS, US, PS}. The default time unit is 0.1ns.
EXCEPT {SOURCE|SINK} {sequential list}
Specify the list of sequential elements which should not be included as endpoints in the automatically generated paths involving sequential elements.

6.15.20.5 MULTICLOCK

Use the MULTICLOCK specification to specify which clock periods should be considered during the generation of the path constraints involving sequential elements. The default specification is to consider only the closest clock periods of the SOURCE and DESTINATION clocks. This specification has the following syntax:

MULTICYCLE SOURCE clkA CYCLE value EXCEPT {seqlist}; DESTINATION clkB CYCLE value EXCEPT

{seqlist}.

MULTICYCLE SOURCE clkA CYCLE value EXCEPT {seqlist}.

6.15.20.5.1 Arguments

clkA/clkB
The name of the macro driving the clock network.
EXCEPT {seqlist}.
By default all sequential elements clocked by the clock driver are included. The EXCEPT seqlist is a list of all the sequential elements or specific pins to be excluded.
CYCLE value
By default, the closest transitions are considered. CYCLE provides the ability to use transitions from one or more clock periods past the closest transition. CYCLE zero indicates the closest transitions. CYCLE one skips the closest set of transitions and uses the next set of transitions. The term cycle is used to avoid confusion with the term period in the clock waveform specification. This allows you to specify a cycling-stealing clocking regime.

6.15.20.6 global_stops

6.15.20.6.1 SECTION GLOBAL_STOPS

{<pinNameList>}. End.

Use the GLOBAL_STOPS section to disable dont care/false paths by preventing the specified pins from being used in ANY timingcritical paths. Any path involving pins that appear in this section should be removed from consideration.

6.15.20.7 pin_loads

6.15.20.7.1 SECTION PIN_LOADS

Use the PIN_LOADS section to define the capacitance loading and logic (TTL/CMOS) at a package pin. The default logic family is TTL.

capValue capUnit [TTL/CMOS]{[macList|pinList]} [EXCEPT {}].

6.15.21 About PIN Files

PIN files are only valid with earlier Antifuse families such as eX, SX-A, and SX. Although PIN files are supported in Axcelerator, Microchip recommends that you use PDC files instead to set pin locations for Axcelerator.

You can describe the location of a pin in a *.PIN file and import it into Designer. PIN files contain two commands: DEF and PIN.

Commands

Description

DEF

Define top-level design entity

PIN

Define I/O location

6.15.21.1 DEF

Syntax:

DEF <design_name>

The following example defines top-level structure as TARG32_WRP.

DEF TARG32_WRP.

6.15.21.2 PIN

Syntax:

PIN <pin_name>;PIN:<package_pin_number>.

The following example assigns signal RST to package pin 156.

PIN RST; PIN:156.