This section describes the basic methods for entering timing specifications in a schematic or User Constraints File (UCF).
The following notes apply to Mentor Graphics users.
The TIMESPEC schematic primitive, as illustrated in the TIMESPEC Primitive figure, serves as a placeholder for timing specifications, which are called TS attribute definitions. Every TS attribute must be defined in a TIMESPEC primitive, and only TIMESPEC primitives can carry TS attribute definitions. Every TS attribute begins with the letters ``TS and ends with a unique identifier that can consist of letters, numbers, or the underscore character (_).
TS attribute definitions can be any length, but only 30 characters are displayed in the TIMESPEC window. Each TIMESPEC primitive can hold up to eight TS attributes. If you want to include more than eight TS attributes, you can use multiple TIMESPEC primitives in your schematic.
Figure 4.1 TIMESPEC Primitive |
How you add a TIMESPEC primitive to your schematic depends on your specific schematic-entry software. Refer to the appropriate Xilinx Interface User Guide for step-by-step instructions.
A TS attribute defines the allowable delay for paths in your design. The basic syntax for a TS attribute is as follows.
TSidentifier=FROM source_group TO dest_group delay
TSidentifier is a unique name for the TS attribute, source_group and dest_group are groups of start points and end points, and delay defines the maximum delay for the paths between the start points and end points. The delay parameter defines the maximum delay for the attribute. Nanoseconds are the default units for specifying delay time in TS attributes. You can also specify delay using other units, such as picoseconds or megahertz.
Keywords, such as FROM, TO, and TS appear in the documentation in upper case; however, you can enter them in the TIMESPEC primitive in either upper or lower case. The characters in the keywords must be all upper case or all lower case. Examples of acceptable keywords are: FROM, TO, from, to. Examples of unacceptable keywords are: From, To, fRoM, tO.
The Mentor netlist writer (ENWRITE) converts all property names to lower case letters, and the Xilinx netlist reader EDIF2NGD then converts the property names to upper case letters. To ensure references from one constraint to another are processed correctly, a TSidentifier name should contain only upper case letters on a Mentor Schematic (TSMAIN, for example, but not TSmain or TSMain). Also, if a TSidentifier name is referenced in a property value, it must be entered in upper case letters. For example, the TSID1 in the second constraint below must be entered in upper case letters to match the TSID1 name in the first constraint.
TSID1 = FROM gr1 TO gr2 50;
TSMAIN = FROM here TO there TSID1 /2;
The basic TS attribute is described in detail in the Basic FROM -TO Syntax section. More detailed forms of the attribute are also described in that section.
A colon may be used as a separator instead of a space in all timing specifications.
You can enter timing specifications as constraints in a UCF file. When you then run NGDBuild on your design, your timing specifications are added to the design database as part of the NGD file.
The basic syntax for a timing specification entered in a constraints file is the TS attribute syntax described in the Basic FROM -TO Syntax section.
Although not required, Xilinx recommends that NET and INST names be enclosed in double quotes to avoid errors. Additionally, inverted signal names that contain a tilde, for example, ~OUTSIG1, must always be enclosed in double quotes. Other special characters that must be enclosed in quotes are the asterisk (*) and question mark (?).
You can use the wildcard character (*) to traverse the hierarchy of a directory within a UCF or NCF file. Consider the following directory hierarchy.
With the example hierarchy, the following specifications illustrate the scope of the wildcard.
INST * => <everything>
INST /* => <everything>
INST /*/ => <$A1,$B1,$C1>
INST $A1/* => <$A21,$A22,$A3,$A4>
INST $A1/*/ => <$A21,$A22>
INST $A1/*/* => <$A3,$A4>
INST $A1/*/*/ => <$A3>
INST $A1/*/*/* => <$A4>
INST $A1/*/*/*/ => <$A4>
INST /*/*22/ => <$A22,$B22,$C22>
INST /*/*22 => <$A22,$A3,$A4,$B22,$B3,$C22,$C3>
INST /*/*22/* => <$A3,$A4,$B3,$C22,$C3>