############################################## # BASIC UCF SYNTAX EXAMPLES V2.1.6 # ############################################## # "#" 도형은 주석문자 입니다. 이 예제 파일을 사용하려면, 필요한 규격을 찾아서, 행의 시작에 있는 주석# # 표기 용 문자(#)를 지우시길 바랍니다. 만일 필요하다면 당신의 디자인에 맞게 행의 내용을 수정하십시오. # # TIMING SPECIFICATIONS # # 타이밍 규격은 전체 디자인(global)에 적용이 될 수 있거나 여러분의 디자인내의 특정 그룹(time # groups)에 적용이 될 수가 있습니다. 타임 그룹은 두 가지 기본적인 방법으로 선언될 수 있습니다. # # 방법 1 : 네트 이름을 이용하여, my_net라는 net가 logic_grp라는 group에 속해 있는 모든 logic에 # 연결이 되어 있다면 예를 들면 # #NET my_net TNM_NET = logic_grp ; # # 방법2 : 'TIMEGRP' 라는 key word를 사용하여 그룹화하고 여러분 디자인의 로직의 이름을 사용하여 선 # 언한다. 예를 들면 # #TIMEGRP group_name = FFS ("U1/*"); # U1으로 불리는 계층구조 안에 있는 모든 flip-flop에 위한 'group_name'이라 불리는 그룹을 # 만든다. Wildcards 가 사용 가능합니다. # # Grouping은 여러분이 software에게 디자인의 어느 부분이 어떤 속도로 동작하는지를 알려 주기 때문에 # 매우 중요합니다. 단지 하나의 클럭을 가지는 디자인의 중요 부분을 위해서는 간단한 광역 제한 사항을 사용 # 하면 된다. # # # 여러분이 사용하는 grouping constraint의 형태는 여러분이 사용하고 있는 합성 툴에 따라 변할 수 있습 # 니다. Foundation Express는 방법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 # ---------------- # 주기(period) 규격은 register, latch, 또는 기준 net(excluding pad destinations)에 의해 동기 # 화 되는 synchronous RAM에서 시작하거나 끝나는 모든 타이밍 경로를 담당한다. 또한 다른 요소(ex. # flip flops, pads, etc...)들에 관련된 synchronous element의 setup 요구사항(requirement)도 # 담당한다. # NOTE: 시간에 대한 기본 단위는 나노세컨드(nanoseconds)입니다. # #NET clock PERIOD = 50ns ; # # -OR- # # ------------------ # FROM:TO TIME-SPECs # ------------------ # FROM:TO style timespecs은 time groups사이의 경로를 제한(constrain)하는 데 사용되어 집니다. # NOTE: RAMS, FFS, PADS, LATCHES와 같은 keywords(예약어)는 디자인에 있어서 각 형태의 모든 요소 # 를 정의하는 데 사용하도록 미리 정의가 되어 있습니다. # 사용방법은 먼저 원하는 TIME GROUP을 정의하고 TIMESPEC이름을 정의하여 사용하시면 됩니다. #TIMEGRP RFFS = RISING FFS ("*"); // creates a rising group called RFFS #TIMEGRP FFFS = FALLING FFS ("*"); // creates a falling group called FFFS # 위의 두 문장은 RFFS와 FFFS라는 TIME GROUP을 정의한 것입니다. #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 # 위의 문장들에서 TIMESPEC 다음에 나오는 것이 TIMESPEC 이름이 되는 데, 여기서 규칙은 TS는 항상 나오 # 는 것이며 나머지는 사용자가 알아서 마음대로 하시면 됩니다. 예를 들면 TS_SP1, TS01, TS_FIRST 입니 # 다. 위의 문장에서 우리는 TSF2F는 FLIPFLOP TO FLIPFLOP에 대한 TIMESPEC임을 알 수 있습니다. # # --------------- # Multiple Clocks # --------------- # 'PERIOD'와 'FROM:TO' 형태의 time specification에 대한 조합이 필요하다. #NET clock1 TNM_NET = clk1_grp ; #NET clock2 TNM_NET = clk2_grp ; # 위의 두 문장을 해석하면 clock1 net를 clk1_grp라고 net에 timespec를 정의한다. # Clock2 net는 clk2_grp라는 timespec를 정의한다. # #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 ; # 위의 문장을 해석하면 TS_clk1이라는 TIMESPEC은 clk1_grp라는 TIMEGROUP에 주기 50NS을 할당하고 # 있음을 알 수 있으며, 나머지도 CLK1 과 CLK2사이의 시간 관계를 정의하고 있습니다. # # ############################################################ # CLOCK TO OUT specifications - Tco # ############################################################ # # from _________ /^^^^^\ net_name --------\ # ----------| D Q |-----{ LOGIC } --------| Pad > # PLD | | \vvvvv/ --------/ # ---|> CLK | # clock | --------- # ------- # # ---------------- # OFFSET TIME-SPEC # ---------------- # 여러분의 clock-to-out timing specifications에 clock buffer/routing delay를 자동적으로 추 # 가 할 수 있도록, OFFSET constraints를 사용하십시오. 예를 들어 maximum clock-to-out (Tco)가 # 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; # FROM: FFS : TO: PADS constraints는 flip flop 그 자체에서 지연분석(dalay analysis)을 시작 # 하며 클럭 입력핀에서 시작하지 않는다. clock-to-out constraint을 만들기 위해, 권고하는 방법은 # OFFSET constraint을 사용하는 것이다. # # ############################################################ # Pad to Flip-Flop speed specifications - Tsu # ############################################################ # # ------\net_name /^^^^^\ _________ into PLD # |pad >-------{ LOGIC } -----| D Q |------ # ------/ \vvvvv/ | | # ---|> CLK | # clock | --------- # ------------------------------ # # ---------------- # OFFSET TIME-SPEC # ---------------- # 여러분의 입력 setup timing specifiactions안에 clock delay에 대한 합산을 자동적으로 넣으려면, # 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; # FROM: PADS : TO: FFS constraints는 clock path에 대한 어떤 합산도 취하지 않는 것을 주의하시오. # input setup time constraint을 만드는 권고 방법은 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 # ------------- # 만일 여러분이 path(경로)의 timing을 무시할 수 있다면, Timing Ignore(TIG)을 사용하시오. 주의 사 # 항 : "*" 문자는 버스 이름에 사용될 수 있는, wild-card입니다. "?"는 한 문자에 대해 wild-card로 # 사용할 수 있는 문자 입니다. # 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 # --------------- # 여러분의 디자인이 출력이 다른 출력보다 더욱 늦을 수 있다면 여러분은 OUT_DATA(7:0)과 irq_n 출력에 # 대한 다음 예와 같이 TIMESPEC를 정의 할 수가 있을 것이다. #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 ; # # 여러분이 FF to FF paths에 여러 개의 cycle를 가지고 있다면, TIMEGRP 또는 TNM 문장 중 하나를 # 가지고 time group를 만들 수 있다. # # 주의사항: 많은 VHDL/Verilog synthesizers는 flip-flop Q output net name을 예상 할 수가 없다. # 그러나, 대부분의 synthesizer는 flip-flop에 대한 instance name을 예상하여 할당할 수 있다. # # 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 ; # # 만일 FF clock-enable이 multi-cycle path의 모든 flip-flop에 사용이 되면, clock enable # net에 TNM을 부착할 수 있다. 주의 사항 : forward trace 방식으로 net에 부착된 TNM은 # net에 부착된 어떤 FF, LATCH, RAM 또는 PAD에 적용 될 수 있다. #NET ff_clock_enable_net TNM = slowffs ; # # FROM:TO timespec에 있어서 "slowffs" timegroup를 사용하는 예제는 위에서 보여준 세가지 방법중 # 어는 하나를 갖지고 만든다. #TIMESPEC TS10 = FROM : slowffs : TO : FFS : 100 ; # # 어떤 net에 관련된 delay 또는 skew를 제한한다. #NET any_net_name MAXSKEW = 7 ; #NET any_net_name MAXDELAY = 20 ns; # # # .ucf file안에서 제한사항의 우선순위는 다음과 같다. # # highest 1. Timing Ignore (TIG) # 2. FROM : THRU : TO specs # 3. FROM : TO specs # lowest 4. PERIOD specs # # 추가적인 timespec 특징이나 자세한 정보를 알고 싶을시 on-line "Library Reference Guide" document # 를 보시길 바랍니다. # # ############################################################ # # # 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 # # # <div align="center"><br /><script type="text/javascript"><!-- google_ad_client = "pub-7293844627074885"; //468x60, Created at 07. 11. 25 google_ad_slot = "8619794253"; google_ad_width = 468; google_ad_height = 60; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><br /> </div>