[QuartusII][NiosII] 評価ボードでぶちあたる壁

2008/11/24FPGA::QuartusIIimport

FPGAをまともにいじるのは初めてのソフト屋,を前提ですすめます.ここではsynthesisするときに出てきたwarningとその対策を記します.ただし,個人的解釈に基づくメモであり,記述漏れ,誤記,解釈誤りがありえます.
間違いを指摘いただけますと幸いです..

で,SOPC Builderで新規に作った構成を記しておきます.評価キットのsampleを持ってきたわけではないので,大量にWarningが出てきます.サンプルですら出てきますが...

mori_Nios2_NoDDR_SOPC_Builder.PNG

前もって設定する事項

Active Serial/Active Parallelをenableにした場合,そのピンが使用されているような警告画でます.コレを回避するためには,QuartusIIのデバイス設定をいじくると良いようです.
図の例はActive Parallelの例です.config後の端子をどうするかを選択できます.ユーザ定義のIOとして使う場合は,図のように"Use as regular I/O"とすればOKです.

Q2_Set_DevPinOpt_DPP_CHK.PNG

Processing windowのWarningについて(Quartus II Analysis & Synthesis)

Warning: Output pins are stuck at VCC or GND
  Warning (13410): Pin "flash_reset_n" is stuck at VCC
  Warning (13410): Pin "sram_flash_a[0]" is stuck at GND
[HELP]
 CAUSE: The output pins are minimized to either VCC or GND in a design file. This condition may be the result of the optimization process performed during logic synthesis.
 ACTION: If you intend the output pins to behave in this manner, no action is required. Otherwise, check the design file for errors and ensure that the project's logic does not reduce to VCC or GND.

記述ミスや設定ミスにより意図しない出力値固定となることもあるので,レベルが固定されたピンを確認しておく.

Warning: Feature Virtual IO is not available with your current license

Virtual I/O宣言を処理するためのライセンスがない.グループ開発で有用なものだったはず.無償評価版では使えない.合成結果で,ピン配置が異様でなければOKとする.

Processing windowのWarningについて(Quartus II Fitter)

Warning: Feature LogicLock is not available with your current license

これまたライセンスがない.

Warning: Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings report for details
[HELP]
 CAUSE: There are one or more pins with incomplete I/O assignments. The I/O Assignment Warnings report section in the Fitter compilation report lists the affected pins and the missing I/O assignments.
 ACTION: Use the Assignment Editor or the Pin Planner to add the missing I/O assignments to the affected pins.

たぶん,以下のピンアサインをさしていると思う.

Warning: No exact pin location assignment(s) for 1 pins of 82 total pins
  Info: Pin sram_flash_a[0] not assigned to an exact location on the device

virtual指定していたピン.未配線なので捨ててよいとおもう.

Warning: At least one of the filters had some problems and could not be matched.
	Warning: *the*clock*|unxmaster*donex*|*data* could not be matched with a pin.
Warning: Ignored assignment: set_false_path -from [get_registers *] -to [get_pins -nocase -compatibility_mode {*the*clock*|unxmaster*donex*|*data*}]
	Warning: Argument -to with value [get_pins -nocase -compatibility_mode {*the*clock*|unxmaster*donex*|*data*}] contains zero elements
Warning: At least one of the filters had some problems and could not be matched.
	Warning: *the*clock*|unxslave*requestx*|*data* could not be matched with a pin.
Warning: Ignored assignment: set_false_path -from [get_registers *] -to [get_pins -nocase -compatibility_mode {*the*clock*|unxslave*requestx*|*data*}]
	Warning: Argument -to with value [get_pins -nocase -compatibility_mode {*the*clock*|unxslave*requestx*|*data*}] contains zero elements
Warning: At least one of the filters had some problems and could not be matched.
	Warning: *the*clock*|slave_address*|* could not be matched with a pin.
Warning: Ignored assignment: set_false_path -from [get_pins -nocase -compatibility_mode {*the*clock*|slave_address*|*}] -to [get_registers *]
	Warning: Argument -from with value [get_pins -nocase -compatibility_mode {*the*clock*|slave_address*|*}] contains zero elements
Warning: At least one of the filters had some problems and could not be matched.
	Warning: *the*clock*|slave_byteenable*|* could not be matched with a pin.
Warning: Ignored assignment: set_false_path -from [get_pins -nocase -compatibility_mode {*the*clock*|slave_byteenable*|*}] -to [get_registers *]
	Warning: Argument -from with value [get_pins -nocase -compatibility_mode {*the*clock*|slave_byteenable*|*}] contains zero elements
Warning: The master clock for this clock assignment could not be derived.  Clock: altera_internal_jtag|tckutap was not created.
	Warning: No clocks found on or feeding the specified source node: altera_internal_jtag|tck
Warning: Node: altera_reserved_tck was determined to be a clock but was found without an associated clock assignment.
Warning: The following clock transfers have no clock uncertainty assignment
	Warning: From Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Rise) to Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Rise) (setup and hold)
	Warning: From Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Fall) to Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Rise) (setup and hold)
	Warning: From Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[2] (Rise) to Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Rise) (setup and hold)
	Warning: From Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Rise) to Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Fall) (setup and hold)
	Warning: From Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[1] (Rise) to Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[1] (Rise) (setup and hold)
	Warning: From Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0] (Rise) to Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[2] (Rise) (setup and hold)
	Warning: From osc_clk (Rise) to osc_clk (Rise) (setup and hold)
Warning: Ignored I/O standard assignments to the following nodes
Warning: Ignored locations or region assignments to the following nodes

実際に端子名が列挙されますが,省略します.DDR-SDRAMのlocaltion設定を記述していたので,そんなものないから制約から消しますよ,というメッセージになります.
記述誤りで無視されることもありえるので,ココもチェック必要です*1

Warning:
 The total number of single-ended output or bi-directional pins in Bank 8 exceeded the recommended amount in a bank where dedicated LVDS, RSDS or mini-LVDS outputs exists.
 Such condition may result in excessive output jitter on the differential outputs at condition where all the single-ended outputs are switching simultaneously.
 Refer to the Pad Placement and DC Guidelines section in the Cyclone III Device I/O Features chapter of the Cyclone III Device Handbook for details on this condition.
	Info: There are 28 output pin(s) with I/O standard 2.5 V and current strength 8mA.
		Info: Location E10 (pad PAD_213) : Pin sram_flash_a[16] of type output uses 2.5 V I/O standard
		Info: Location C9 (pad PAD_214) : Pin sram_flash_a[17] of type output uses 2.5 V I/O standard
		Info: Location D9 (pad PAD_215) : Pin sram_flash_a[18] of type output uses 2.5 V I/O standard
		Info: Location A8 (pad PAD_218) : Pin sram_flash_d[2] of type bi-directional uses 2.5 V I/O standard
		Info: Location B8 (pad PAD_219) : Pin sram_flash_d[3] of type bi-directional uses 2.5 V I/O standard
		Info: Location A7 (pad PAD_220) : Pin sram_flash_a[19] of type output uses 2.5 V I/O standard
		Info: Location B7 (pad PAD_221) : Pin sram_flash_d[4] of type bi-directional uses 2.5 V I/O standard
		Info: Location A6 (pad PAD_222) : Pin sram_flash_a[20] of type output uses 2.5 V I/O standard
		Info: Location B6 (pad PAD_223) : Pin sram_flash_d[15] of type bi-directional uses 2.5 V I/O standard
		Info: Location C7 (pad PAD_224) : Pin sram_flash_d[31] of type bi-directional uses 2.5 V I/O standard
		Info: Location A5 (pad PAD_225) : Pin sram_flash_d[14] of type bi-directional uses 2.5 V I/O standard
		Info: Location B5 (pad PAD_226) : Pin sram_flash_d[13] of type bi-directional uses 2.5 V I/O standard
		Info: Location C5 (pad PAD_227) : Pin sram_flash_d[5] of type bi-directional uses 2.5 V I/O standard
		Info: Location D7 (pad PAD_228) : Pin sram_flash_d[27] of type bi-directional uses 2.5 V I/O standard
		Info: Location F9 (pad PAD_230) : Pin sram_ce_n of type output uses 2.5 V I/O standard
		Info: Location E8 (pad PAD_231) : Pin sram_flash_d[6] of type bi-directional uses 2.5 V I/O standard
		Info: Location A4 (pad PAD_232) : Pin sram_flash_d[7] of type bi-directional uses 2.5 V I/O standard
		Info: Location B4 (pad PAD_233) : Pin sram_flash_d[8] of type bi-directional uses 2.5 V I/O standard
		Info: Location E7 (pad PAD_234) : Pin sram_flash_d[9] of type bi-directional uses 2.5 V I/O standard
		Info: Location F8 (pad PAD_235) : Pin sram_flash_d[26] of type bi-directional uses 2.5 V I/O standard
		Info: Location A3 (pad PAD_236) : Pin sram_flash_d[10] of type bi-directional uses 2.5 V I/O standard
		Info: Location B3 (pad PAD_237) : Pin sram_flash_d[11] of type bi-directional uses 2.5 V I/O standard
		Info: Location E6 (pad PAD_238) : Pin sram_flash_d[29] of type bi-directional uses 2.5 V I/O standard
		Info: Location F7 (pad PAD_239) : Pin sram_adsc_n of type output uses 2.5 V I/O standard
		Info: Location F6 (pad PAD_241) : Pin sram_flash_d[28] of type bi-directional uses 2.5 V I/O standard
		Info: Location D5 (pad PAD_242) : Pin sram_flash_d[12] of type bi-directional uses 2.5 V I/O standard
		Info: Location A2 (pad PAD_246) : Pin sram_clk of type output uses 2.5 V I/O standard
		Info: Location G6 (pad PAD_247) : Pin sram_flash_d[30] of type bi-directional uses 2.5 V I/O standard
	Info: There are 1 output pin(s) with I/O standard 2.5 V and current strength 12mA.
		Info: Location E9 (pad PAD_216) : Pin sram_oe_n of type output uses 2.5 V I/O standard

SingleEndの端子が多すぎてジッタが乗ったりしても知らないよ,とのこと.まぁ大丈夫だろ...
DDRを使うときは,同じバンクにあるLEDの端子を未使用にすること.IO制約により使えなくなる.


Warning: Following 2 pins must use external clamping diodes.
	Info: Pin sram_flash_d[0] uses I/O standard 2.5 V at H3
	Info: Pin sram_flash_d[1] uses I/O standard 2.5 V at D1

外部のクランプダイオードを用意するように言われるが,schematic見ても無いような気が...?

Warning: Following 2 pins have nothing, GND, or VCC driving datain port -- changes to this connectivity may change fitting results
	Info: Pin flash_reset_n has VCC driving its datain port
	Info: Pin sram_flash_a[0] has GND driving its datain port
[HELP]
 CAUSE: The specified pins either have nothing, GND, or VCC driving the datain port.
        If you modify this setting, additional pin placement restrictions such as simultaneously switching outputs may be necessary and may lead to a change in the fitting results.
 ACTION: If you do not intend to connect these pins, no action is required. Otherwise, modify the design to reflect the required connectivity.

端子出力が固定になっていますというメッセージのようですね.
問題がなければ無視してもいいでしょう.


*1 : Pin Plannerで,pinが未定義だと色が変わるようになっていますので,事前チェックはできるでしょう.

Warningについて(Quartus II Assembler)

Warning: Can't convert time-limited SOF into POF, HEX File, TTF, or RBF

NiosII評価ライセンスだとこうなる.買えばOK...


TimeQuest Timing Analyzerの吐くmessageについて

Warning: At least one of the filters had some problems and could not be matched.
 Warning: *|the_pll_0|the_pll|altpll_component|auto_generated|pll1|clk[1] could not be matched with a clock.
[HELP]
 CAUSE: At least one of the filters cannot be matched with an element.
 ACTION: Change the filter to match with at least one element.

false_path設定のところで,パターンマッチングに失敗した旨の表示.これは自分で作った制約ファイルでの話しなので,修正は必要.PLL出力をパターンマッチングで抽出し,clock domain境界でタイミングチェックを行わないようにするため.
bridgeを介在しているため,チェックする必要がないpathのみのdomainをノーチェックとしている.


ガバッと省略(書き溜め不足)

Critical Warning: Timing requirements not met

Info: Path #1: Hold slack is -2.284 (VIOLATED)
  Info: ===================================================================
  Info: From Node    : sram_flash_d[5]
  Info: To Node      : Nios2_NoDDR:Nios2_NoDDR_inst|pipeline_bridge_m1_arbitrator:the_pipeline_bridge_m1|dbs_latent_16_reg_segment_0[5]
  Info: Launch Clock : Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[2]
  Info: Latch Clock  : Nios2_NoDDR_inst|the_pll0|the_pll|altpll_component|auto_generated|pll1|clk[0]
  Info: Multicycle - Setup End   : 2
  Info:
  Info: Data Arrival Path:
  Info:
  Info: Total (ns)  Incr (ns)     Type  Element
  Info: ==========  ========= ==  ====  ===================================
  Info:      0.000      0.000           launch edge time
  Info:      1.058      1.058  R        clock network delay
  Info:      5.158      4.100  R  iExt  sram_flash_d[5]
  Info:      5.158      0.000 RR    IC  sram_flash_d[5]~input|i
  Info:      5.520      0.362 RR  CELL  sram_flash_d[5]~input|o
  Info:      7.631      2.111 RR    IC  Nios2_NoDDR_inst|the_pipeline_bridge_m1|dbs_latent_16_reg_segment_0[5]~feeder|datab
  Info:      7.785      0.154 RR  CELL  Nios2_NoDDR_inst|the_pipeline_bridge_m1|dbs_latent_16_reg_segment_0[5]~feeder|combout
  Info:      7.785      0.000 RR    IC  Nios2_NoDDR_inst|the_pipeline_bridge_m1|dbs_latent_16_reg_segment_0[5]|d
  Info:      7.816      0.031 RR  CELL  Nios2_NoDDR:Nios2_NoDDR_inst|pipeline_bridge_m1_arbitrator:the_pipeline_bridge_m1|dbs_latent_16_reg_segment_0[5]
  Info:
  Info: Data Required Path:
  Info:
  Info: Total (ns)  Incr (ns)     Type  Element
  Info: ==========  ========= ==  ====  ===================================
  Info:     10.000     10.000           latch edge time
  Info:     10.169      0.169  R        clock network delay
  Info:     10.253      0.084      uTh  Nios2_NoDDR:Nios2_NoDDR_inst|pipeline_bridge_m1_arbitrator:the_pipeline_bridge_m1|dbs_latent_16_reg_segment_0[5]
  Info:
  Info: Data Arrival Time  :     7.816
  Info: Data Required Time :    10.253
  Info: Clock Pessimism    :     0.153
  Info: Slack              :    -2.284 (VIOLATED)
  Info: ===================================================================
  Info:

論理合成後にタイミング違反を検出.これはSSRAMへ供給しているクロックと,データ信号との制約に対する違反(Violation)ですね.
図を描けば確認できるかと思いますが,Hold timeのslackを救おうとしても,Setupとの兼ね合いもあるので,単純には解決できない模様です.

ここで注目すべきはSSRAM CLKです.
starterkitのサンプルを見ていて,systemで使っているクロックと同じ100MHzなのにPLL出力が違ったのです.未確認ですが位相をずらして制約をカバーしているのではないかと踏んだわけです.
少し端折りますが,位相をずらして対策をいれたときの,TimeQuest Timing Analyzerを使って図示させます.

TQ_TIMING_VIEW03_a.PNG

SSRAM CLKを2.5nSec早めることでHold Timeを稼ぐことができました.synthesisをやり直しているので,全く同じ回路でPLL遅延だけが変化したのかはわかりかねますが,Timing Errorを回避させました.
とはいえ,今回はLaunch ClockとLatch Clockとが異なっていたのでできた回避作ですね.

図中,Pane-3に波形が図示されますが,Pane-1にはドコでどの程度時間を消費しているかの詳細がわかります.最適化の変更や回路設計そのものの変更などにより,その時間を調整する必要があるのでしょうが,その時限の話はまたぶちあたった時にでも考えましょう.

[Altera][TSR] set_input_delay

2008/11/24FPGA::QuartusIIimport

[Altera][TSR] set_input_delay

Usage

set_input_delay [-add_delay] -clock <name> [-clock_fall] [-fall] [-max] [-min] [-reference_pin <name>] [-rise] [-source_latency_included] <delay> <targets>

Options

-add_delay
Add to existing delays instead of overriding them
-clock
Clock name
-clock_fall
Specifies that input delay is relative to the falling edge of the clock
-fall
Specifies the falling input delay at the port
-max
Applies value as maximum data arrival time
-min
Applies value as minimum data arrival time
-reference_pin
Specifies a port in the design to which the input delay is relative
-rise
Specifies the rising input delay at the port
-source_latency_included
Specifies that input delay includes added source latency
Time value
List of input port type objects

Description

"-clock"オプションで指定されたクロックを基準として,指定された入力ポートにおける,データが到着する時間を指定します.
"clock"は,デザイン内のclock nameを参照する必要があります.
入力遅延は,クロックの立上がりエッヂ(デフォルト)または立下りエッヂ(-clock_fall)を基準に,指定することができます.

もし,単純な生成されたクロック(1つのターゲットで生成されたクロック*1)について,入力遅延が指定されたならば,生成されたクロックへのクロック到着時間は,データ到着時間に加算されます.

入力遅延は,そのクロックネットワークにおけるポート("-reference_pin"で指定)を基準に指定することができます.ポートを基準としたクロック到着時間は,データ到着時間に加算されます.ポート基準pinがないのは,サポート外です.

入力遅延は常にクロック源のレイテンシを含むことができます.標準(デフォルト)では,クロック基準のクロック源レイテンシは,入力遅延に加算されます.しかし,"-source_latency_included"オプションが指定されたとき,入力遅延に含まれる(ことを指定することとなり)ため,クロック源レイテンシは加算されません.

役メモ:意味がわからんな.
▼データ・パスが入力ポートから内部レジスタの場合 ~ ホールド・スラック時間
として,以下の式が定義されている.

  クロックのセットアップ・スラック時間  =   データ所要時間  -  データ到着時間

ここで,右辺は以下のように定義される.
  データ所要時間  =  ラッチ・エッヂ + ディスティネーション・レジスタまでのクロック・ネットワーク遅延  -  μtSU
  データ到着時間  =  ラウンチ・エッヂ + ソース・レジスタまでのクロック・ネットワーク遅延 + ピンの最大入力遅延 + ピンからレジスタまでの遅延

ここでいう"ピンの最大入力遅延"が,本パラメータで指定する値となるのだろう.
synthesis時に,外部の信号遅延を加味して,論理合成されるので,データシートを参照しつつ,
基準に対して早い・遅いでinput delayを定義すると良いだろう.

最大入力遅延(オプション"-max")は,クロックセットアップやリカバリチェックに使われます.また,最小入力遅延(オプション"-min")は,クロックホールドやremoval checksに使われます.もし,与えられたポートに対して,"-min"または"-max"のいずれか一方のみ指定もしくは,どちらも指定がない場合には,同じ値が双方に使われます.

ポートにおける,立上がり(オプション"-rise"),立下り(オプション"-fall")の到着時間は別々に指定できます.もし,与えられたポートにおいて,いずれか一方が指定された場合には,同じ値が両方に使われます.

デフォルトでは,"set_input_delay"は,ポートに対する他のどのような入力遅延も排除します.ただし,同じ"-clock","-clock_fall","-reference_pin"の組み合わせを伴うものを除きます.

異なるクロック,クロックエッヂ,ピン基準の複数入力遅延は,"-add_delay"オプションを使うことで指定できます.

ターゲット"value"は,特定の型のコレクションを生成するのに使うwildcardのTcl list,または,TimeQuestextension置換規約(TimeQuestextension substitution rules)が必要です.
詳細は,"use_timequest_style_escaping"を参照ください.


Example

# Simple input delay with the same value for min/max and rise/fall:
# 1) set on ports with names of the form myin*
set_input_delay -clock clk 1.5 [get_ports myin*]

# 2) set on all input ports
set_input_delay -clock clk 1.5 [all_inputs]

# Input delay with respect to the falling edge of clock
set_input_delay -clock clk -clock_fall 1.5 [get_ports myin*]

# Input delays for different min/max and rise/fall combinations
set_input_delay -clock clk -max -rise 1.4 [get_ports myin*]
set_input_delay -clock clk -max -fall 1.5 [get_ports myin*]
set_input_delay -clock clk -min -rise 0.7 [get_ports myin*]
set_input_delay -clock clk -min -fall 0.8 [get_ports myin*]

# Adding multiple input delays with respect to more than one clock
set_input_delay -clock clkA -min 1.2 [get_ports myin*]
set_input_delay -clock clkA -max 1.8 [get_ports myin*]
set_input_delay -clock clkA -clock_fall 1.6 [get_ports myin*] -add_delay
set_input_delay -clock clkB -min 2.1 [get_ports myin*] -add_delay
set_input_delay -clock clkB -max 2.5 [get_ports myin*] -add_delay

# Specifying an input delay relative to an external clock output port
set_input_delay -clock clk -reference_pin [get_ports clkout] 0.8 [get_ports myin*]



*1 : 訳注:TimeQuestのreportでType:generatedと表示されている,PLLにより生成されたclockかな?

他参考資料

"hc_h51025_j.pdf" 6. HardCopy II デバイスのためのスクリプト・ベースのデザイン

チップ外部のソースから入力ピンまでの遅延を,定義済みのクロックを基準にして指定するのに使用されます. 引数は、遅延の基準クロックを指定します.引数は、デザインのトップレベルの入力信号であり、 は外部遅延です.外部遅延は、-clock_fall 引数が指定されていない場合、 の正(立ち上がり)エッヂから測定されます.

  • min 引数と-max引数は、 がそれぞれ最小外部遅延または最大外部遅延かどうかを指定するのに使用されます.

@IT内,MONOistの日本アルテラの中の人の記事

http://monoist.atmarkit.co.jp/fembedded/index/timing.html

ここを見て解決.このコンテンツのコメントは古いままですが,認識が間違ってました.基準をsource - destinationの間にとるような絵を考えていました...

リンク先にあるように,sourceよりもクロック源信側のノードを基準に考えるほうが自然ですね.

[Altera][TSR] set_multicycle_path

2008/11/24FPGA::QuartusIIimport

[Altera][TSR] set_multicycle_path

Usage

set_multicycle_path [-end] [-fall_from <names>] [-fall_to <names>] [-from <names>] [-hold] [-rise_from <names>] [-rise_to <names>] [-setup] [-start] [-through <names>] [-to <names>] <value>

Options

-end
Specifies that the multicycle is relative to the destination clock waveform (default)
-fall_from
Valid source clocks (string patterns are matched using Tcl string matching)
-fall_to
Valid destination clocks (string patterns are matched using Tcl string matching)
-from
Valid sources (string patterns are matched using Tcl string matching)
-hold
Specifies that the multicycle value applies to clock hold or removal checks
-rise_from
Valid source clocks (string patterns are matched using Tcl string matching)
-rise_to
Valid destination clocks (string patterns are matched using Tcl string matching)
-setup
Specifies that the multicycle value applies to clock setup or recovery checks (default)
-start
Specifies that the multicycle is relative to the source clock waveform
-through
Valid through nodes (string patterns are matched using Tcl string matching)
-to
Valid destinations (string patterns are matched using Tcl string matching)
Number of clock cycles

Description

与えられたpath(given path)のセットのために,multicycle例外を指定します.Multicyclesは,ソースclock("-start")またはデスティネーションclock("-end")によって,指定することができます.これは,ソースclockとデスティネーションclockとが,異なる周波数で動いているときに有用です.例えば,ソースclockがデスティネーションclockよりも2倍早い(半分の周期)であった場合,"-start multicycle"には2が要求されます.

Hold multicycle("-hold")は,setup multicycle("-setup")に対して(relative to)計算されます.hold multicycleの値は,デフォルトのhold multicycle から除外するクロックエッヂ数を再定義します.デフォルトhold multicycle はゼロです.

"-from"と"-to"の値は,デザイン内のclock・register・port・pin・cellのコレクションです."-from"または"-to"の値が指定されない場合,コレクションは自動的に"[get_keepers *]"に変換されます.

指定されないコレクションの片方が,クロックのコレクションである場合,クロックコレクションとして明示的に,この(省略された)コレクションを指定することは,より効果的であることに注意するべきです..(しかし,クロックのコレクションもまた,希望した設定を生成するのみであれば.)clock間で例外を適用することは,"-from clock"で駆動される全てのレジスタまたはポートから,"-to clock"で駆動される全てのレジスタまたはポートへの例外を適用します.

また,clockペア間で例外を適用することは,ノードからノードや,ノードからclock pathへ適用するより,より効果的です.

pin名やコレクションが使われた場合,"-from"の値はclock pin,かつ,"-to"の値はclockを除くレジスタへの入力pinでなければなりません."from clock pins"または"to and from cells"指定は,その"clock pin"で駆動される全てのレジスタか,cell内の全てのレジスタに適用されます.

"-through"値は,pinのコレクションまたはデザイン内のnetです.デザイン内の"through"で適用されたnodeは,throughで指定されたnodeにのみ適用されます.

"-rise_from"と"-fall_from"オプションは,"-from destination nodes"の代わりに使用できる.オプションの"rise"値または"fall"値は,"from"nodeが,clock path上で,どのような論理否定も考慮されたこのノードに入るクロックの立上りまたは立下りエッヂで駆動されることを示します.(clock入力端におけるエッヂを指定する,ということかな.clock出力端から見た値ではない,ということで.)"-from"オプションは,"from"ノードの,立上がりと立下りの組み合わせです.もし,"from"コレクションがclockコレクションの場合,その指定はクロックエッヂの立ち上りまたは立下りによって駆動される,それぞれのnodeに適用されます.

"-rise_to" と"-fall_to"オプションは,前述の"from"オプションと同様の振る舞いをします.これらの指定は,どんなclock pathに沿った論理否定も考慮に入れた"rise"値または"fall"値に関係したnodeやclockへの与えられた指定のみを制限します.

"-from","-to","-throughおよび似たようなオプションは,コレクションでも,特定の型のコレクションを作るためのワイルドカードのTcl listでもよい.使われた値は,標準のTclまたは,"TimeQuest-extension"置換規則が続かなければならない.

詳細は,"use_timequest_style_escaping"コマンドのヘルプを参照ください.


Example

create_clock -period 10.000 -name CLK [get_ports clk]
create_generated_clock -divide_by 2 -source [get_ports clk] -name CLKDIV2 [get_registers clkdiv]

# Apply a source multicycle of 2 with a hold multicycle of 1 for all
# paths from the CLK domain to the CLKDIV2 domain.
set_multicycle_path -start -setup -from [get_clocks CLK] -to [get_clocks CLKDIV2] 2
set_multicycle_path -start -hold -from [get_clocks CLK] -to [get_clocks CLKDIV2] 1

# Apply a multicycle constraint of 3 (with a default hold multicycle of
# 0) for a
# specific path in the design.
set_multicycle_path -end -setup -from [get_pins rega|clk] -to [get_pins regb|*] 3

# Apply a multicycle constraint of 2 to a given cell, except for the
# reset pin.
set_multicycle_path -end -setup -to [get_cells regb] 2
set_multicycle_path -end -setup -to [get_pins regb|aclr] 1

#Apply a multicycle constraint of 3 rising from a clock and falling to a
# node
set_multicycle_path -end -setup -rise_from [get_clocks CLK] -fall_to [get_pins regb|datab] 3

他参照

ホーム > サポート > デザイン・ソフトウェア > TimeQuestタイミングアナライザ > タイミング例外 > TimeQuest set_multicycle_path コマンド
http://www.altera.co.jp/support/software/timequest/exceptions/tq-multicycle-path.html



注意事項

英語力の弱い人が適当に訳しています.自分では意味がわかるようにとれたものと,そうでないものとがあります.概要理解の参考にしていただければ幸いですが,オリジナルの英文を参照されることを強く推奨いたします.

[Altera][TSR] set_false_path

2008/11/24FPGA::QuartusIIimport

[Altera][TSR] set_false_path

Usage

set_false_path [-fall_from <names>] [-fall_to <names>] [-from <names>] [-hold] [-rise_from <names>] [-rise_to <names>] [-setup] [-through <names>] [-to <names>]

Options

-fall_from
Valid source clocks (string patterns are matched using Tcl string matching)
-fall_to
Valid destination clocks (string patterns are matched using Tcl string matching)
-from
Valid sources (string patterns are matched using Tcl string matching)
-hold
Specifies the false_path value (applies only to clock hold or removal checks)
-rise_from
Valid source clocks (string patterns are matched using Tcl string matching)
-rise_to
Valid destination clocks (string patterns are matched using Tcl string matching)
-setup
Specifies the false_path value (applies only to clock setup or recovery checks)
-through
Valid through nodes (string patterns are matched using Tcl string matching)
-to
Valid destinations (string patterns are matched using Tcl string matching)

Description

"false-path"例外を指定し,タイミング解析から,pathを排除もしくはカットします.
"-from"と"-to"の値は,デザイン内のclock・register・port・pin・cellのコレクションです(収集したもの).
"-from"と"-to"の値が指定されないならば,コレクションは自動的に"[get_keepers *]"と変換されます.

以下のことに注意する価値があります.
指定されたコレクションの反対側がclockコレクションであるならば,clockコレクションも願った指定に生成される場合にだけ,clockコレクションだけとして明示的にこのコレクションを指定するのは,より効果的です.

It is worth noting that
 if the counterpart of the unspecified collection  is a clock collection,
   it is more efficient to explicitly specify this collection as a clock collection only if the clock collection also generates the desired assignment.
長すぎて切れない('A`

clock例外を適用すると,例外は全ての"-from clock"で与えられたportもしくはレジスタから,全ての"-to clock"で与えられたportもしくはレジスタに適用されます.
clockペアの例外を適用することは,node-clock間やnode-clock間よりも,効果的です.

pin名かコレクションが使われる場合,"-from"値はclock pinで,かつ,"-to"値はレジスタへのclock以外の入力pinである必要があります."clock pins"からの代入か,"cells"から|への代入は,(cell内または"clock pin"に駆動される)全てのレジスタに適用されます.*1

"-through"値は,デザイン内のpinかnetのコレクションです.

デザイン内のノードを通して適用された例外は,指定されたノードを通したpathにのみ適用されます.

"-rise_from"オプション と "-fall_from"オプションは,"-from destination nodes"の代わりに使えます.このオプションの"rise"か"fall"は,clock pathに沿ったどんな論理否定(inverse)も考慮にいれて,"from" nodeが,このnodeに入るclockの立上がりか立下りで駆動されることを示します.

"-from"オプションは,"from"nodeの立ち上がりと立下り両方の組み合わせです(意訳:両エッヂ指定となる?)."from"コレクションがclockコレクションであれば,その指定はそれぞれの立上がりまたは立下りclockエッヂによって駆動されるnodeへ適用します.

"-rise_to" と "-fall_to"は,前述の"from"オプションと同じようにふるまいます..これらの指定は,clock pathに沿ったどんな論理否定(inverse)も考慮にいれて,指定された"rise"/"fall"値に相当したclockかnodeにのみ,与えられた指定を,制限します.

"-setup"オプションと"-hold"オプションは,"setup/recovery"チェックか"hold/removal"チェックに相当することを適用されるだけために,"false path"を許容します.デフォルト(どちらの値も指定されない場合)は,"false path"に"-setup"/"-hold"の両方を適用します.

"-from"・"-to"・"-through"の値や,他の似たようなオプションは,コレクションか,特定の型のコレクションを生成するのに使うwildcardのTcl list,または,TimeQuestextension置換規約*2が必要です.
詳細は,"use_timequest_style_escaping"を参照ください.
また,情報として,"set_clock_groups"を参照ください.


Example

# Set a false-path between two unrelated clocks
# See also set_clock_groups
set_false_path -from [get_clocks clkA] -to [get_clocks clkB]

# Set a false-path for a specific path
set_false_path -from [get_pins regA|clk] -to [get_pins regB|aclr]

# Set a false-path from a node to a falling clock
set_false_path -from [get_pins regA|clk] -fall_to [get_clocks clkB]

*1 : 原文(文節があってるか怪しい):Assignments from clock pins or to and from cells applies to all registers in the cell or driven by the clock pin.

*2 : TimeQuestextension substitution rules

参考

http://www.fpga.co.jp/cbbs/cbbs.cgi?mode=al2&namber=2605&no=0&KLOG=3

"hc_h51025_j.pdf"の例

タイミング最適化または解析に含めることができないパスを記述する場合に使用されます。クラシック・タイミング・アナライザでは、フォルス・パスを制御する最も一般的なコマンドは、set_timing_cut_assignment コマンドです。




注意事項

英語力の弱い人が適当に訳しています.自分では意味がわかるようにとれたものと,そうでないものとがあります.概要理解の参考にしていただければ幸いですが,オリジナルの英文を参照されることを強く推奨いたします.

[Altera][TSR] get_ports

2008/11/24FPGA::QuartusIIimport

[Altera][TSR] get_ports

Usage

get_ports [-nocase] [-nowarn] <filter>

Options

-nocase
Specifies case-insensitive node name matching
-nowarn
Do not issue warnings messages about unmatched patterns
Valid destinations (string patterns are matched using Tcl string matching)

Description

デザイン内の,(design inputとoutput)portのコレクションを返します.

コレクションのフィルタは,ワイルドカードのTcl listであり,続いて標準TclまたはTimeQuestextension置換規約*1が必要です.
詳細は,"use_timequest_style_escaping"を参照ください.


Example

project_open chiptrip
create_timing_netlist
# Get all ports starting with "In".
set ports [get_ports In*]
foreach_in_collection port $ports {
  puts [get_port_info -name $port]
}
delete_timing_netlist
project_close


*1 : TimeQuestextension substitution rules

注意事項

英語力の弱い人が適当に訳しています.自分では意味がわかるようにとれたものと,そうでないものとがあります.概要理解の参考にしていただければ幸いですが,オリジナルの英文を参照されることを強く推奨いたします.