############################################## # BASIC UCF SYNTAX EXAMPLES V2.1.6 # ############################################## # # The "#" symbol is a comment character. To use this sample file, find the # specification necessary, remove the comment character (#) from the beginning # of the line, and modify the line (if necessary) to fit your design. # # TIMING SPECIFICATIONS # # Timing specifications can be applied to the entire device (global) or to # specific groups in your design (called "time groups'). The time groups are # declared in two basic ways. # # Method 1: Based on a net name, where 'my_net' is a net that touches all the # logic to be grouped in to 'logic_grp'. Example: #NET my_net TNM_NET = logic_grp ; # # Method 2: Group using the key word 'TIMEGRP' and declare using the names of # logic in your design. Example: #TIMEGRP group_name = FFS ("U1/*"); # creates a group called 'group_name' for all flip-flops within # the hierarchical block called U1. Wildcards are valid. # # Grouping is very important because it lets you tell the software which parts # of a design run at which speeds. For the majority of the designs with only # one clock, use simple global constraints. # # The type of grouping constraint you use can vary depending on the synthesis # tools you are using. Foundation Express does better with Method 2. # # ############################################################ # Internal to the device clock speed specifications - Tsys # ############################################################ # # data _________ /^^^^^\ _________ out # ----------| D Q |-----{ LOGIC } -----| D Q |------ # | | \vvvvv/ | | # ---|> CLK | ---|> CLK | # clock | --------- | --------- # ------------------------------------ # # --------------- # Single Clock # --------------- # # ---------------- # PERIOD TIME-SPEC # ---------------- # The PERIOD spec. covers all timing paths that start or end at a # register, latch, or synchronous RAM which are clocked by the reference # net (excluding pad destinations). Also covered is the setup # requirement of the synchronous element relative to other elements # (ex. flip flops, pads, etc...). # NOTE: The default unit for time is nanoseconds. # #NET clock PERIOD = 50ns ; # # -OR- # # ------------------ # FROM:TO TIME-SPECs # ------------------ # FROM:TO style timespecs can be used to constrain paths between time # groups. NOTE: Keywords: RAMS, FFS, PADS, and LATCHES are predefined # time groups used to specify all elements of each type in a design. #TIMEGRP RFFS = RISING FFS ("*"); // creates a rising group called RFFS #TIMEGRP FFFS = FALLING FFS ("*"); // creates a falling group called FFFS #TIMESPEC TSF2F = FROM : FFS : TO : FFS : 50 ns; // Flip-flips with the same edge #TIMESPEC TSR2F = FROM : RFFS : TO : FFFS : 25 ns; // rising edge to falling edge #TIMESPEC TSF2R = FROM : FFFS : TO : RFFS : 25 ns; // falling edge to rising edge # # --------------- # Multiple Clocks # --------------- # Requires a combination of the 'Period' and 'FROM:TO' type time specifications #NET clock1 TNM_NET = clk1_grp ; #NET clock2 TNM_NET = clk2_grp ; # #TIMESPEC TS_clk1 = PERIOD : clk1_grp : 50 ; #TIMESPEC TS_clk2 = PERIOD : clk2_grp : 30 ; #TIMESPEC TS_ck1_2_ck2 = FROM : clk1_grp : TO : clk2_grp : 50 ; #TIMESPEC TS_ck2_2_ck1 = FROM : clk2_grp : TO : clk1_grp : 30 ; # # ############################################################ # CLOCK TO OUT specifications - Tco # ############################################################ # # from _________ /^^^^^\ --------\ # ----------| D Q |-----{ LOGIC } -----| Pad > # PLD | | \vvvvv/ --------/ # ---|> CLK | # clock | --------- # -------- # # ---------------- # OFFSET TIME-SPEC # ---------------- # To automatically include clock buffer/routing delay in your # clock-to-out timing specifications, use OFFSET constraints . # For an output where the maximum clock-to-out (Tco) is 25 ns: # #NET out_net_name OFFSET = OUT 25 AFTER clock_net_name ; # # -OR- # # ------------------ # FROM:TO TIME-SPECs # ------------------ #TIMESPEC TSF2P = FROM : FFS : TO : PADS : 25 ns; # Note that FROM: FFS : TO: PADS constraints start the delay analysis # at the flip flop itself, and not the clock input pin. The recommended # method to create a clock-to-out constraint is to use an OFFSET constraint. # # ############################################################ # Pad to Flip-Flop speed specifications - Tsu # ############################################################ # # ------\ /^^^^^\ _________ into PLD # |pad >-------{ LOGIC } -----| D Q |------ # ------/ \vvvvv/ | | # ---|> CLK | # clock | --------- # ---------------------------- # # ---------------- # OFFSET TIME-SPEC # ---------------- # To automatically account for clock delay in your input setup timing # specifications, use OFFSET constraints. # For an input where the maximum setup time is 25 ns: #NET in_net_name OFFSET = IN 25 BEFORE clock_net_name ; # # -OR- # # ------------------ # FROM:TO TIME-SPECs # ------------------ #TIMESPEC TSP2F = FROM : PADS : TO : FFS : 25 ns; # Note that FROM: PADS : TO: FFS constraints do not take into account any # delay for the clock path. The recommended method to create an input # setup time constraint is to use an OFFSET constraint. # # ############################################################ # Pad to Pad speed specifications - Tpd # ############################################################ # # ------\ /^^^^^\ -------\ # |pad >-------{ LOGIC } -----| pad > # ------/ \vvvvv/ -------/ # # ------------------ # FROM:TO TIME-SPECs # ------------------ #TIMESPEC TSP2P = FROM : PADS : TO : PADS : 125 ns; # # ############################################################ # Other timing specifications # ############################################################ # # ------------- # 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 ; # # Constrain the skew or delay associate with a net. #NET any_net_name MAXSKEW = 7 ; #NET any_net_name MAXDELAY = 20 ns; # # # 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 "Library Reference Guide" document for # additional timespec features and more information. # # ############################################################ # # # LOCATION and ATTRIBUTE SPECIFICATIONS # # # ############################################################ # Pin and CLB location locking constraints # ############################################################ # # ----------------------- # Assign an IO pin number # ----------------------- #INST io_buf_instance_name LOC = P110 ; #NET io_net_name LOC = P111 ; # # ----------------------- # Assign a signal to a range of I/O pins # ----------------------- #NET "signal_name" LOC=P32, P33, P34; # # ----------------------- # Place a logic element(called a BEL) in a specific CLB location. # BEL = FF, LUT, RAM, etc... # ----------------------- #INST instance_path/BEL_inst_name LOC = CLB_R17C36 ; # # ----------------------- # Place CLB in rectangular area from CLB R1C1 to CLB R5C7 # ----------------------- #INST /U1/U2/reg<0> LOC=clb_r1c1:clb_r5c7; # # ----------------------- # Place hierarchical logic block in rectangular area from CLB R1C1 to CLB R5C7 # ----------------------- #INST /U1* LOC=clb_r1c1:clb_r5c7; # # ----------------------- # Prohibit IO pin P26 or CLBR5C3 from being used: # ----------------------- #CONFIG PROHIBIT = P26 ; #CONFIG PROHIBIT = CLB_R5C3 ; # Config Prohibit is very important for forcing the software to not use critical # configuration pins like INIT or DOUT on the FPGA. The Mode pins and JTAG # Pins require a special pad so they will not be available to this constraint # # ----------------------- # Assign an OBUF to be FAST or SLOW: # ----------------------- #INST obuf_instance_name FAST ; #INST obuf_instance_name SLOW ; # # ----------------------- # FPGAs only: IOB input Flip-flop delay specification # ----------------------- # Declare an IOB input FF delay (default = MAXDELAY). # NOTE: MEDDELAY/NODELAY can be attached to a CLB FF that is pushed # into an IOB by the "map -pr i" option. #INST input_ff_instance_name MEDDELAY ; #INST input_ff_instance_name NODELAY ; # # ----------------------- # Assign Global Clock Buffers Lower Left Right Side # ----------------------- # INST gbuf1 LOC=SSW # # # #PINLOCK_BEGIN #Wed Mar 17 07:51:27 1999 NET "clk7d5" LOC = "S:PIN33"; NET "ecp_mode" LOC = "S:PIN79"; NET "fset" LOC = "S:PIN77"; NET "host_ack" LOC = "S:PIN63"; NET "host_clk" LOC = "S:PIN57"; NET "initialize" LOC = "S:PIN159"; NET "int_strobe" LOC = "S:PIN35"; NET "ir0" LOC = "S:PIN144"; NET "ir1" LOC = "S:PIN98"; NET "ir2" LOC = "S:PIN134"; NET "md0" LOC = "S:PIN97"; NET "md10" LOC = "S:PIN102"; NET "md11" LOC = "S:PIN117"; NET "md1" LOC = "S:PIN146"; NET "md2" LOC = "S:PIN17"; NET "md3" LOC = "S:PIN152"; NET "md4" LOC = "S:PIN92"; NET "md5" LOC = "S:PIN143"; NET "md6" LOC = "S:PIN142"; NET "md7" LOC = "S:PIN44"; NET "md8" LOC = "S:PIN95"; NET "md9" LOC = "S:PIN148"; NET "omni_d" LOC = "S:PIN138"; NET "omni_e" LOC = "S:PIN37"; NET "omni_f" LOC = "S:PIN122"; NET "pause" LOC = "S:PIN90"; NET "rev_req" LOC = "S:PIN88"; NET "run" LOC = "S:PIN60"; NET "tp1" LOC = "S:PIN86"; NET "tp3" LOC = "S:PIN42"; NET "tp4" LOC = "S:PIN64"; NET "ts1" LOC = "S:PIN24"; NET "ts2" LOC = "S:PIN59"; NET "ts3" LOC = "S:PIN104"; NET "ts4" LOC = "S:PIN115"; NET "user_mode" LOC = "S:PIN139"; NET "ema0" LOC = "S:PIN154"; NET "ema1" LOC = "S:PIN155"; NET "ema2" LOC = "S:PIN156"; NET "ma0" LOC = "S:PIN18"; NET "ma10" LOC = "S:PIN19"; NET "ma11" LOC = "S:PIN21"; NET "ma1" LOC = "S:PIN22"; NET "ma2" LOC = "S:PIN23"; NET "ma3" LOC = "S:PIN30"; NET "ma4" LOC = "S:PIN25"; NET "ma5" LOC = "S:PIN26"; NET "ma6" LOC = "S:PIN140"; NET "ma7" LOC = "S:PIN27"; NET "ma8" LOC = "S:PIN28"; NET "ma9" LOC = "S:PIN29"; NET "omni_data0" LOC = "S:PIN9"; NET "omni_data10" LOC = "S:PIN47"; NET "omni_data11" LOC = "S:PIN48"; NET "omni_data1" LOC = "S:PIN49"; NET "omni_data2" LOC = "S:PIN50"; NET "omni_data3" LOC = "S:PIN52"; NET "omni_data4" LOC = "S:PIN53"; NET "omni_data5" LOC = "S:PIN11"; NET "omni_data6" LOC = "S:PIN12"; NET "omni_data7" LOC = "S:PIN13"; NET "omni_data8" LOC = "S:PIN14"; NET "omni_data9" LOC = "S:PIN54"; NET "pdata0" LOC = "S:PIN32"; NET "pdata1" LOC = "S:PIN36"; NET "pdata2" LOC = "S:PIN58"; NET "pdata3" LOC = "S:PIN62"; NET "pdata4" LOC = "S:PIN38"; NET "pdata5" LOC = "S:PIN45"; NET "pdata6" LOC = "S:PIN5"; NET "pdata7" LOC = "S:PIN153"; NET "ack_rev" LOC = "S:PIN113"; NET "bk_cycle" LOC = "S:PIN76"; NET "bk_data_cont" LOC = "S:PIN129"; NET "bk_in_prog" LOC = "S:PIN87"; NET "break_prio" LOC = "S:PIN82"; NET "cpma_disable" LOC = "S:PIN89"; NET "ind1" LOC = "S:PIN101"; NET "ind2" LOC = "S:PIN103"; NET "init_out" LOC = "S:PIN131"; NET "key_cntrl" LOC = "S:PIN106"; NET "load_addr" LOC = "S:PIN133"; NET "load_addr_en" LOC = "S:PIN135"; NET "ma_in" LOC = "S:PIN116"; NET "ma_ms_load" LOC = "S:PIN72"; NET "md_dir" LOC = "S:PIN84"; NET "mem_start" LOC = "S:PIN126"; NET "ms_ir_dis" LOC = "S:PIN108"; NET "omni_data_in" LOC = "S:PIN145"; NET "omni_data_out" LOC = "S:PIN149"; NET "our_addr" LOC = "S:PIN15"; NET "our_break" LOC = "S:PIN78"; NET "periph_ack" LOC = "S:PIN7"; NET "periph_clk" LOC = "S:PIN65"; NET "periph_req" LOC = "S:PIN93"; NET "rev_req_cnt0" LOC = "S:PIN119"; NET "rev_req_cnt1" LOC = "S:PIN124"; NET "rev_req_sync" LOC = "S:PIN96"; NET "stop" LOC = "S:PIN91"; NET "sw_sw" LOC = "S:PIN16"; NET "test_reg0" LOC = "S:PIN43"; NET "test_reg1" LOC = "S:PIN55"; NET "test_reg2" LOC = "S:PIN68"; NET "test_reg3" LOC = "S:PIN56"; NET "test_reg4" LOC = "S:PIN158"; NET "test_reg5" LOC = "S:PIN2"; NET "test_reg6" LOC = "S:PIN3"; NET "test_reg7" LOC = "S:PIN4"; NET "xflag" LOC = "S:PIN111"; #PINLOCK_END