Answers Database
Basic UCF Syntax Examples for Design Placement and Timing ConstraintsRecord #2449
Problem Title: TIMESPEC TS02 = FROM : PADS : TO : FFS : 36 ; TIMESPEC TS03 = FROM : FFS : TO : PADS : 36 ns ; TIMESPEC TS04 = FROM : PADS : TO : PADS : 66 ; TIMESPEC TS05 = FROM : PADS : TO : RAMS : 36 ; TIMESPEC TS06 = FROM : RAMS : TO : PADS : 35.5 ; # NOTE: The predefined time groups, LATCHES and RAMS are not # applicable for CPLD designs. # ---------------- # OFFSET TIME-SPEC # ---------------- # To automatically include clock buffer/routing delay in your "PADS:TO: # <synchronous element> or <synchronous element>:TO:PADS timing # specifications, use OFFSET constraints instead of FROM:TO constraints. # For an input where the maximum clock-to-out (Tco) of the driving # device is 10 ns: NET in_net_name OFFSET = IN : 10 : AFTER : clk_net_name ; # For an output where the minimum setup time (Tsu) of the device being # driven is 5 ns: NET out_net_name OFFSET = OUT : 5 : BEFORE : clk_net_name ; # ------------- # TIMING IGNORE # ------------- # If you can ignore timing of paths, use Timing Ignore (TIG). NOTE: The # "*" character is a wild-card which can be used for bus names. A "?" # character can be used to wild-card one character. # Ignore timing of net reset_n: NET : reset_n : TIG ; # Ignore data_reg(7:0) net in instance mux_mem: NET : mux_mem/data_reg* : TIG ; # Ignore data_reg(7:0) net in instance mux_mem as related to a TIMESPEC # named TS01 only: NET : mux_mem/data_reg* : TIG = TS01 ; # Ignore data1_sig and data2_sig nets: NET : data?_sig : TIG ; # --------------- # PATH EXCEPTIONS # --------------- # If your design has outputs that can be slower than others, you can # create specific timespecs similar to this example for output nets # named out_data(7:0) and irq_n: TIMEGRP slow_outs = PADS(out_data* : irq_n) ; TIMEGRP fast_outs = PADS : EXCEPT : slow_outs ; TIMESPEC TS08 = FROM : FFS : TO : fast_outs : 22 ; TIMESPEC TS09 = FROM : FFS : TO : slow_outs : 75 ; # If you have multi-cycle FF to FF paths, you can create a time group # using either the TIMEGRP or TNM statements. # WARNING: Many VHDL/verilog synthesizers do not predictably name flip # flop Q output nets. Most synthesizers do assign predictable instance # names to flip flops, however. # TIMEGRP example: TIMEGRP slowffs = FFS(inst_path/ff_q_output_net1* : inst_path/ff_q_output_net2*); # TNM attached to instance example: INST inst_path/ff_instance_name1_reg* TNM = slowffs ; INST inst_path/ff_instance_name2_reg* TNM = slowffs ; # If a FF clock-enable is used on all flip flops of a multi-cycle path, # you can attach TNM to the clock enable net. NOTE: TNM attached to a # net "forward traces" to any FF, LATCH, RAM, or PAD attached to the # net. NET ff_clock_enable_net TNM = slowffs ; # Example of using "slowffs" timegroup, in a FROM:TO timespec, with # either of the three timegroup methods shown above: TIMESPEC TS10 = FROM : slowffs : TO : FFS : 100 ; # ---------------- # Controlling Skew # ---------------- # Constrain the skew or delay associate with a net. NET any_net_name MAXSKEW = 7 ; NET any_net_name MAXDELAY = 20 ns; #----------- # Priorities #----------- # Also, constraint priority in your .ucf file is as follows: # # highest 1. Timing Ignore (TIG) # 2. FROM : THRU : TO specs # 3. FROM : TO specs # lowest 4. PERIOD specs# # See the on-line documentation (dtext -> Library Reference Guide) for # additional timespec features or additional information. Solution 3: ###################################################### # Specifying placement constraints for logic or I/O. # ###################################################### #----------------------------------- # Assign or Prohibit I/O pin numbers #----------------------------------- # Assigning I/O Pin Numbers ##PLCC/PQFP type packages: NET io_net_name LOC = P111 ; NET HIERARCHY_BLOCK/io_net_name LOC = P44 ; ##PGA/BGA type packages: NET io_net_name LOC = A11 ; NET HIERARCHY_BLOCK/io_net_name LOC = C12 ; ##NOTE The 'P' is only used with PLCC/PQFP type packages. # Assigning an I/O pin to a selction of pin locations # This example assign io_net_name to either P4, P5 or P6 NET io_net_name LOC = P4, P5, P6 ; # Prohibit I/O pin C26 or CLBR5C3 from being used: CONFIG PROHIBIT = C26 ; CONFIG PROHIBIT = CLB_R5C3 ; # Note: The Mode pins (MD0, MD1, MD2) and the Boundary Scan pins # (TCK, TDI, TDO, TMS) can not be prohibited or assigned or an error # may occur if these sites are prohibited from the UCF file. # These sites are reserved sites and will only be used if # specifically specified in the design. #----------------------------------- # Assigning Specific Logic Locations #----------------------------------- # Place a basic element (BEL) in a specific CLB. BEL = FF, LUT, RAM, etc... INST io_buf_name LOC = P110 ; INST instance_path/BEL_name LOC = CLB_R17C36 ; #--------------------------- # Assigning Area Constraints #--------------------------- # XC3000 - Place CLB logic anywhere in the top left corner of the LCA # bounded by row F and column F. INST logic_name LOC=AA:FF ; # XC4000 - Place logic in the top left corner of the LCA in a 5 x 5 # area bounded by row 5 and column 5. INST logic_name LOC=CLB_R1C1:CLB_R5C5 ; # XC4000, XC5200 - Place BUFT anywhere in the area bounded by row 1, # column 1 and row 2, column 8. INST logic_name LOC=TBUF_R1C1:TBUF_R2C8 ; # XC5200 - Place logic in any slice in the top left corner of the LCA # bounded by row 4, column 4. INST logic_name LOC=CLB_R1C1.LC3:CLB_R4C4..LC0 ; # Multiple LOC Constraint Examples # XC4000 - Place decoder on the top or bottom edge. INST logic_name LOC=T,B ; # XC4000 - Place CLB logic in the top left corner of the LCA in # a 5 x 5 area, but not in the CLB in row 5, column 5. INST logic_name LOC=CLB_R1C1:CLB_R5C5 ; INST logic_name PROHIBIT=CLB_R5C5 ; # XC4000 - Place logic in any CLB in column 8. INST logic_name LOC=CLB_R*C8; End of Record #2449 - Last Modified: 05/28/99 09:03 |
For the latest news, design tips, and patch information on the Xilinx design environment, check out the Technical Tips! |