Answers Database


M1.5i/2.1i: Constraints: UCF to PCF conversion examples


Record #3753

Product Family: Software

Product Line: Merged Core

Product Part: Timing

Problem Title:
M1.5i/2.1i: Constraints: UCF to PCF conversion examples


Problem Description:
Urgency: standard

General Description:
The following will describe the equivalent PCF syntax for
*some* of the more common UCF constraints. It is by no means
a comprehensive list.
Some constraints are impractical to attempt to create from
scratch in the PCF, as some will require the names of COMPs
(CLBs or IOBs) or BELs (flops, LUTs, tbufs, etc). If this is
not known, it is possible to obtain this from the MAP report
(.mrp) if MAP_REPORT_DETAIL env. variable is set to TRUE.
   For the following, the string "_COMP" will be used to indicate that a COMP name is required, and "
_BEL" for BEL
names. You must look in the .mrp file to find the actual name.
However, take note: IOB COMPs are always named the same as the
pad net (unless you add a BLKNM constraint), and flop BELs are
always named the same as the net on it's Q output. So, if you
have the following UCF OFFSET constraint, for instance:

NET "myinput" OFFSET = IN 55 AFTER "clk";

the net "myinput" and "clk" are the names of the pad nets of
the input signal and the clock signal. Since the IOB COMP name
is identical to the pad net name, this would be the equivalent
PCF syntax:

COMP "mynet" OFFSET = IN 55 nS AFTER COMP "clk";


Solution 1:

Timing constraints
==================

PERIOD
------------------------------------
Example#1: (Using "simple" method)
UCF: NET "clk" PERIOD = 30 low 12;
PCF: NET "clk" PERIOD = 30 nS LOW 12 nS;

Example#2: (Using "alternate" method)
UCF: TIMESPEC TS01 = PERIOD mygroup 30;
PCF: TS01 = PERIOD TIMEGRP "mygroup" 30 nS HIGH 50.000 % ;

Note: Remember "mygroup" must be previously defined with TNM.

OFFSET
------------------------------------
UCF: NET "myinputnet" OFFSET = IN 55 AFTER "clk";
PCF: COMP "myinputnet" OFFSET = IN 55 nS AFTER COMP "clk";

Note: IN/BEFORE, OUT/AFTER, and OUT/BEFORE are comparable.

TNM/TIMEGRP
------------------------------------
Example#1: (using TNM)
UCF: INST "myinst" TNM = "A";
PCF: TIMEGRP "A" = BEL "**myinst_BEL**"; ##find BEL name

Example#2: (using TIMEGRP)
UCF: TIMEGRP "A" = FFS("myflop_output_net");
PCF: TIMEGRP "A" = BEL "myflop_output_net";

TIMESPEC (using predefined groups)
------------------------------------
UCF: TIMESPEC TS01 = FROM PADS TO FFS 50;
PCF: TIMEGRP "PADS" = PADS("*");
    : TIMEGRP "FFS" = FFS("*");
    : TS01=MAXDELAY FROM TIMEGRP "PADS" TO TIMEGRP "FFS" 50 nS;

TIMESPEC (using user defined groups)
------------------------------------
Example#1: (using two user-defined groups)
UCF: TIMESPEC TS01 = FROM "A" TO "B" 50;
PCF: TS01=MAXDELAY FROM TIMEGRP "A" TO TIMEGRP "B" 50 nS;

Example#2: (using one user and one pre-defined group)
UCF: TIMESPEC TS01 = FROM "A" TO FFS(S) 50;
PCF: TIMEGRP "FFS(S)" = BEL "S" ;
    : TS01=MAXDELAY FROM TIMEGRP "A" TO TIMEGRP "FFS(S)" 50 nS;

Note: Remember A,B must be previously defined with TNM/TIMEGRP.

TIG (on net)
------------------------------------
Example#1: (using net)
UCF: NET "mynet" TIG;
PCF: NET "mynet" TIG;

Example#2: (using source/destination)
UCF: TIMESPEC TSig = FROM "A" TO "B" TIG;
PCF: PATH "FROM A TO B" = FROM TIMEGRP "A" TO TIMEGRP "B";
    : PATH "FROM A TO B" TIG;

Note: Remember A,B must be previously defined with TNM/TIMEGRP




Solution 2:

UCF constraints not available in PCF
====================================

Note: These are the more common constraints.
  There are other constraints that cannot be put into the PCF.

BLKNM/HBLKNM, FAST, RLOC, U_SET/HU_SET



Solution 3:

Placement constraints
=====================

LOC
------------------------------------
Example#1: (loc to one pad)
UCF: NET "myinput" LOC = P6;
PCF: COMP "myinput" LOCATE = SITE "P6" LEVEL 1;

Example#2: (loc to one of several pads)
UCF: NET "myinput" LOC = P6, P7, P8;
PCF: COMP "myinput" LOCATE = SITE "P6" SITE "P7" SITE "P8"
    : LEVEL 1;

Example#3: (loc to range of CLBs)
UCF: INST "myflop" LOC = CLB_R3C4:CLB_R5C5;
PCF: COMP "**myflop_COMP**" LOCATE = SITE "CLB_R3C4:CLB_R5C5"
    : LEVEL 4; ##

PROHIBIT
------------------------------------
UCF: CONFIG PROHIBIT = P6;
PCF: PROHIBIT = SITE "P6";

RLOC_ORIGIN
------------------------------------
Example#1: (loc an rloc prim)
UCF: INST "myprim" RLOC_ORIGIN = R9C8;
PCF: COMP "**myprim_COMP**" LOCATE=SITE "CLB_R11C10" LEVEL 1;

Note: above assumes "myprim" had a RLOC
       of R2C2 on it; R2C2+R9C8 = R11C10.

Example#2: (loc an rloc macro that has multiple member COMPs)
UCF: INST "my_macro" RLOC_ORIGIN = R9C8;
PCF: MACRO "my_macro/hset" LOCATE=SITE "CLB_R11C10" LEVEL 1;

Note: Above assumes "my_macro" contained a prim with a
       RLOC of R2C2 on it; R2C2+R9C8 = R11C10.
       In general, if macro contains more than one member
       COMP that belongs to the RLOC set, the RLOC_ORIGIN
       value will be added to the value of the RLOC on
       the element with the lowest row (R) value. This
       is considered the origin. If two or more elements
       have the same row value and that value is the
       lowest, then it will use the column (C) value to
       determine which is the origin.

Also note: Above assumes the name of the set is "hset".
       This is not true if the user specifies his/her
       own set name via the U_SET or HU_SET constraints.
       If you attached a U_SET to the elements, use that
       string name; if you attached a HU_SET to the elements,
       use that string name prefixed by the hierarchy.

RLOC_RANGE
----------------------------------
Example#1: (loc an rloc prim)
UCF: INST "myprim" RLOC_ORIGIN = R9C8:R11C10;
PCF: COMP "**myprim_COMP**" LOCATE=SITE "CLB_R11C10":
       "CLB_R13C12" LEVEL 4;

Note: above assumes "myprim" had a RLOC
       of R2C2 on it; R2C2+R9C8=R11C10, R2C2+R11C10=R13C12;

Example#2: (loc an rloc macro that has multiple member COMPs)
UCF: INST "my_macro" RLOC_ORIGIN = R9C8:R11C10;
PCF: COMPGRP "$macro_my_macro/hset" = MACRO "my_macro/hset";
    : COMPGRP "$macro_my_macro/hset" LOCATE=SITE "CLB_R11C10":
       "CLB_R13C12" LEVEL 4;

Note: see note for Example#2 of RLOC_ORIGIN.
       Also note that string "$macro_" should be added to
       the macro name.











End of Record #3753 - Last Modified: 07/13/99 15:56

For the latest news, design tips, and patch information on the Xilinx design environment, check out the Technical Tips!