[Q2HB] Avalon-MM Pipeline Bridge

[Altera][Q2HB][IP] Avalon-MM Pipeline Bridge

Component Overview

Avalon-MM Pipeline Bridgeは,そのMasterとSlaveの間にレジスタを挿入します.SOPC Builder systemにおいて,register-to-register delay(レジスタ間データ遅延)がsystem interconnect fabric内で生じた場合に,pipeline bridgeを入れることで遅延を削減し,fMAXを満足するようにできるかもしれません.
分離される信号は以下のとおり.

  • MsterからSlaveへの信号(address,write data,control signals)
  • SlaveからMsterへの信号(read data,waitrequest(Optional))

# かなり意訳.レイテンシ増加はあるだろうが,レジスタを挟むのでtiming解析の視点では遅延時間短縮が図れる.

Avalon-MM pipelineを使うことで,トポロジー制御を,pipelineステージを追加することなく行える.pipelineを生成させないためには,"Pipeline Options"を全てノーチェックとする.

★caution
レイテンシ無しのpipeline bridgeは,パイプライン読み出しをサポートしているSlaveには使用できません.

A pipeline bridge with no latency cannot be used with slaves that support pipelined reads.

もしSlaveが読み出しレイテンシを有さないのであれば,パイプラインステージ無しでは接続できません.なぜならば,pipeline bridgeのslaveポートは,"read data valid"信号を有するためです.パイプライン読み出しコンポーネントは,読み出しレイテンシ無しにはできません.

[Pipeline options] Pipeline Stages and Effects on Latency
以下の三種類の信号グループに対して,レジスタを挟むかどうかを指示します.

  • Insert one pipeline stage for master-to-slave signals
    (address, writedata, write, read, byteenable, chipselect, burstcount(optional))
  • Insert one pipeline stage for slave-to-master signals
    (readdata, readdatavalid)
  • Insert one pipeline stage for waitrequest signals
    (waitrequest)

pipeline stageを挿入した際の影響は以下のとおり.

  • 各方向で,1サイクルだけレイテンシが増加する.
  • Bridgeのmaster側の書き込み転送は,Bridgeのslave側の書き込み転送から切り離される(decoupled).
    ∵Avalon-MM Write転送はslaveからのACKを待たないので.
  • waitrequestレジスタステージを含めると,waitrequest信号がアサートされたときに,master-to-slave信号のレイテンシが追加で1サイクル増加します.

Burst Support
Bridgeは,設定可能な最大burst長で,burstをサポートします.burstサポートと設定したとき,最大burst長を上限として,master-slave間でburstを伝えます.
burstサポートを無効にした場合は,burst lengthを1とすることと等価です.この場合,system interconnect fabricは自動的にmaster-to-bridge burstをシーケンシャルな個々の転送に展開します.




注意事項

英語力の弱い人が適当に訳しています.
自分では意味がわかるようにとれたものと,そうでないものとがあります.概要理解の参考にしていただければ幸いですが,オリジナルの英文を参照されることを強く推奨いたします.
また,自分なりに理解して解説したり,参照した資料などへのリンクも記述していますが,ALTERA社の検閲は入っておりません.各自自己責任においてご利用ください.
入門者の敷居を下げるべく,説明文の誤り指摘や修正案等のコメントをいただけますと幸いです.

[Altera][QSF] OUTPUT_ENABLE_GROUP

2008/12/01FPGA::QuartusIIimport

[Altera][QSF] OUTPUT_ENABLE_GROUP

Syntax

set_instance_assignment -name OUTPUT_ENABLE_GROUP -to <to> -entity <entityname> <value>


Description

output enable group numberを指定したノードに設定します.

このオプションをONにすることは,Vref入力や双方向端子が存在するときに,Fitterに,指定されたノードをVrefグループで駆動される端子数の最大数の要求を違反しないため,output enable groupとして見るように伝えます.

双方向端子において,Fitterは全ての可能なピンを決定します.このことは,どの双方向ピンも,VREFグループ内の全ての双方向ピンのOutputEnable時に"in"として駆動されないときに,潜在的に"out"に駆動されることをさします.

For bidirectional pins,
 the Fitter determines all possible pins
  that may potentially drive out
   when any bidirectional pin is driving in by looking at the output enable of all the bidirectional pins in the VREF group.

この挙動は,Vrefグループが出力の最大数を上回る結果となり,フィットしない結果となる.'Output Enable Group'オプションを有効にすることは,ユーザに,指定したピンに対してoutput enable groupを指定することを許可します.このように,ユーザはデザイン内のピンが同時に"in"と"out"に駆動されるかを指定することを許可します.

Fitterは,Output Enable Groupを指定されることで,pinが分割されたOutput Enable Groupである時か,Output Enable Groupではない時に,pinが潜在的にoutputであることのみ考えます.どんなpinも"in"に駆動されないときに,VREFグループ内のoutputとなる総数を下げることができます.

結果的に,Fitterは双方向ピンの潜在的なoutput総数を数えない.また,法的な範囲(in the legal range)でのVREFグループのoutput数を数えない.

ユーザは,FitterがVREFグループのピンのoutput enable groupを検出できなかったときに,このオプションを onにするべきでしょう.例えば,Output Enableがステートマシンや組み合わせ回路から来るときが該当します.VREFグループが保障するoutput数に関する詳細な情報について,デバイスファミリのデータシートを参照ください.AlteraのWEBサイトのLiteratureセクションにあります.


Type

Integer


Device Support

省略.Cyclone1,2,3 と Stratix系は大丈夫でしょう

Notes

This assignment supports wildcards.




注意事項

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

[Altera][TSR] derive_pll_clocks

2008/11/24FPGA::QuartusIIimport

[Altera][TSR] derive_pll_clocks

Usage

derive_pll_clocks [-create_base_clocks] [-use_tan_name]

Options

-create_base_clocks
Creates base clocks on input clock ports of the design that are feeding the PLL
-use_tan_name
Use net names as clock names

Description

デザイン内のPLLか同様のリソースを特定し,そのクロック出力端子をgenerated clockとして生成します.複数のgenerated clockが,PLLがクロックスイッチ切り替えを使っているのであれば,各クロック出力端子毎に作られるでしょう.(1つは入力クロック端子inclk[0],一方はinclk[1]入力クロック端子).

デフォルトでは,このコマンドはPLLを駆動する入力クロックポートに基準クロック(base clock)を作りません.By default this command does not create base clocks on input clock ports that are driving the PLL. "create_base_clocks"オプションを使うとき,"derive_pll_clocks"もまたPLLを駆動する入力クロックポート上の基準クロックを作ります.When you use the create_base_clocks option, derive_pll_clocks also creates the base clock on an input clock port deriving the PLL.このオプションは既存のクロックを上書きしません.デフォルトでは,クロック名は出力クロック端子名と同じになります.ネット名を使う(同じ名前は,クラシックなTiming Analyzerが使います)ためには,"-use_tan_name"オプションを使用してください.


Example

project_open top
create_timing_netlist

# Create the base clock for the input clock port driving the PLL
create_clock -period 10.0 [get_ports sysclk]

# Create the generated clocks for the PLL.
derive_pll_clocks
update_timing_netlist

# Other user actions
report_timing
delete_timing_netlist
project_close


注意事項

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

[Altera][TSR] get_pins

2008/11/24FPGA::QuartusIIimport

[Altera][TSR] get_pins

Usage

get_pins [-compatibility_mode] [-hierarchical] [-no_duplicates] [-nocase] [-nowarn] <filter>

Options

-compatibility_modeUse simple Tcl matching (Classic Timing Analyzer style)
-hierarchicalSpecifies use of a hierarchical searching method
-no_duplicatesDo not match duplicated pin names
-nocaseSpecifies case-insensitive node name matching
-nowarnDo not issue warnings messages about unmatched patterns
Valid destinations (string patterns are matched using Tcl string matching)


Description

デザイン内のピンのコレクションを返します.コレクション内の全てのピン名は,指定パターンとしてマッチします.ワイルドカードは,一度に複数のピンを選択するのに使えます.

このコマンドでは,以下の3つのTcl文字列マッチング方法があります.

  • デフォルトの方法
  • "-hierarchical"オプションを使う方法
  • "-compatibility_mode"オプションを使う方法

デフォルトでは,1階層レベルを分割するために,次から'|'が使われます.特殊文字として扱われ,ワイルドカードにあわせる文字列マッチング実行時に,考慮に入れられます.

デフォルトマッチングスキームが有効なとき,指定されたパターンは絶対ピン名(absolute pin names)(全体の階層パスを含んだ名前)に対してマッチングされます.

パターン内の全ての階層レベルはレベルごとにマッチングされます.書式"|"のピン名は,マッチングに使われます.全cell名(full cell name)は,階層を考慮するために,複数のパイプ文字'|'を含めることに注意してください.

どんな含まれたワイルドカードも,たった1階層レベルしか参照しません.例えば,"*|*"と"*|*|*"は,それぞれ最も高い階層レベルと2番目の階層レベルとを参照するので,異なるコレクションを提供します.


"-hierarchical"マッチングスキームを使うとき,パイプ文字'|'は,特殊文字として扱われ,文字列マッチングの実行時に適用されます.このマッチングスキームは,階層構造を通して強制的に再帰的にに実行します.
指定されたパターンは関係するピンに対してマッチングされる.(どんな階層構造情報も含まれない,直接名(immediate name))
様式"|"のピン名がマッチングに使われます."short cell name"は,パイプ文字('|')を含んではいけないことに注意してください.どのような含まれているワイルドカードも,関連するピン名にマッチするように拡張されます.
例えば,"*" と "*|*" は,前者が後者に拡張されるので,性格に同じピンにマッチします.


"-compatibility_mode"マッチングスキームは,全て,絶対的なピン名に対して(for full, absolute pin names.)Classic timing analyzerの文字列マッチング挙動を模擬します.

パイプ文字('|')は,ワイルドカードと使ったときに特殊文字として扱われません.デフォルトマッチングスキームは,ピンのみだけではなく,それらのピンから複製されたピンも返します.(前者のピンから,Quartusによって自動生成されるピンを参照ください(どこかにリンクしてるのかな))

複製されたピンを含めないようにするには,"-no_duplicates"オプションを使ってください.特定の型のコレクションを生成するのに使うwildcardのTcl list,または,TimeQuestextension置換規約が必要です.詳細は,"use_timequest_style_escaping"を参照ください.


Example

# Get regout pin of "reg" cell
get_pins -nocase reg|regout

# Create a collection of all pins of "reg" cell
get_pins reg|*

# Create a collection of all pins on the highest hierarachical level
set mycollection [get_pins *]

# Output pin names.
foreach_in_collection pin $mycollection {
  puts [get_pin_info -name $pin]
}

# Create a collection of all pins in the design
set fullcollection [get_pins -hierarchical *]

# Output pin IDs and names.
foreach_in_collection pin $fullcollection {
  puts -nonewline $pin
  puts -nonewline ": "
  puts [get_pin_info -name $pin]
}

注意事項

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

[Altera][TSR] set_clock_groups

2008/11/24FPGA::QuartusIIimport

[Altera][TSR] set_clock_groups

Usage

set_clock_groups [-asynchronous] [-exclusive] -group <names>

Options

-asynchronous
Specify mutually exclusive clocks (same as the -exclusive option). Exists for compatibility.
-exclusive
Specify mutually exclusive clocks
-group
Valid destinations (string patterns are matched using Tcl string matching)

Description

"Clock groups"は,どのclockが関連しないかを指定するのに早くて便利な方法を提供します.Clock groups provide a quick and convenient way to specify which clocks are not related.

非同期clockは,完全に関係のないものです*1.(例えば,独立した異なるclock源を持つとき)

排他的なclock,同時にはactiveにならないものです*1.(例えば,multiplexされたclock)

TimeQuestは,まるでそれらが同じであるかのように,どちらのオプションも扱います("-exclusive" , "-asynchronous").

"set_clock_groups"の結果は,どんなgroup内の全てのclockも,他の各group内のclock全てから遮断(cut)されます.このコマンドは,全部のgroupの各clockから,他のgroupの各clockへ"set_false_path"を呼び出すのと等価です.clockドメインを切り離す指定を容易にするため,"set_clock_groups"を作りました(?).

単品の"-group"オプションを使うことは,TimeQuestに,"デザイン内のほかの全てのclockから,このgroupを切り離せ"と伝えます.


Example

project_open top
create_timing_netlist
create_clock -period 10.000 -name clkA [get_ports sysclk[0]]
create_clock -period 10.000 -name clkB [get_ports sysclk[1]]

# Set clkA and clkB to be mutually exclusive clocks.
set_clock_groups -exclusive -group {clkA} -group {clkB}

# The previous line is equivalent to the following two commands.
set_false_path -from [get_clocks clkA] -to [get_clocks clkB]
set_false_path -from [get_clocks clkB] -to [get_clocks clkA]

*1 : テキトウ.例文で把握されたし.

注意事項

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