䟋ずしおMicrosemi SmartTimeを䜿甚した制限時間ず静的FPGA時間分析

倧孊で勉匷し、さたざたなテストのコツを蚭蚈し、デゞタル回路の実隓宀䜜業をしおいるずきでも、䞀芋正しい再怜査プロゞェクトが「ハヌドりェア」で数回動䜜するこずを拒吊する状況にありたした。 圓時、プログラマブルロゞックの研究のawn明期に、デザむンフロヌの最埌のポむントにたどり着くこずはほずんどありたせんでしたが、これはおそらくトラブルでした。 Timing Analyzerを誀っおクリックした堎合、数秒のクむックルックの埌、退屈になり、デバッグボヌドのいじめずVHDLでの新しい狂気の䜜成に戻りたした。



倚かれ少なかれ適切か぀深刻なプロゞェクトの時期が来たずき、それぞれより倚くの問題があり、私はグヌグルをより集䞭的に䜿い始め、私の質問ぞの答えを探し始めたした。 ここで、「タむミング分析」や「蚭蚈䞊の制玄」などのひどいフレヌズが出くわすようになりたした。読んで少し掞察を埗たずき、非垞に重芁なものを芋逃しおいたこずに気付きたした。 最初はこれらの未知の構成芁玠を恐れおパニックに陥りたした。結局、最初のプロゞェクトはそれらがなくおも正垞に動䜜したした。呚波数は数十MHzしかなかったからです。 しかし、より高い呚波数ずより耇雑なプロゞェクトになるず、培底的な䞀時的な分析ず最適化なしにはできたせん。 人々ずやり取りしたずき、私たちの開発者党員がこれらのプロセスに十分に粟通しおいるわけではないこずに驚いたのですが、これはおそらくロシア語でのドキュメントず説明が非垞に少ないためです。 そのため、MicrosemiのツヌルおそらくActelを䜿甚しお、䜜業䞭に蓄積したものをFPGAず共有するこずにしたした。 この投皿は、完党に正確であるず䞻匵するものではなく、棚に知識を眮き、おそらく誰かが同じこずをするのを助けたいずいう願望の結果です。 すべおのコメントず提案を歓迎したす。



同期回路ず基本的な定矩



したがっお、原則ずしお、同期回路を扱っおいたす。 このようなスキヌムは、次の芁玠で構成されおいたす。





これらの芁玠の接続は、動䜜䞭にデバむスを通過する信号パスを構成したす。 実際、私はすでに重芁な抂念- パスを抂説したした。 デバむスのパフォヌマンス、特に最倧クロック呚波数、プロゞェクトの䞻な芁件の1぀、開発者がこれたで長い間苊劎しおきたこずを決定するだけです。









信号は、マむクロ回路の入力端子から移動を開始し、順次および組み合わせ芁玠を通過しお、出力端子に到達したす。 クロック゜ヌスCLKは、クロック信号の゚ッゞほずんどの堎合、゚ッゞに沿っおで入力の状態を蚘憶する回路のすべおのトリガヌをクロックしたす。 トリガヌ間および入力/出力ポヌト間は組み合わせロゞックです。 信号パスには2皮類の遅延がありたす。







通垞、それらの比率は50/50です。぀たり、組み合わせ回路の野生のパスは、次のバルブの入力からその出力たでの遅延ず通信回線に沿った信号の䌝播ずの間で半分に分割されたす。 回路の最倧遅延は、 クリティカルパス 、぀たり最長パスに察応したす。これは、デバむスの最長期間ずそれに応じた最倧呚波数を決定したす。 ここでは、いく぀かの基本的な抂念を考慮する必芁がありたす。











圓然、信号を送信するずき、盞互䜜甚の2぀の偎面-゜ヌスずレシヌバヌが明らかに衚瀺されたす。 これらはパスの終点です。 ゚ンドポむントは、I / Oポヌトおよびトリガヌにするこずができたす。 トリガヌに぀いお詳しく芋おみたしょう。 この䟋では、1぀のクロック信号によっおクロックが䟛絊され、1぀のトリガヌの出力Qから2番目のトリガヌの入力Dぞのパスが実行されたす。 クロック信号は1぀だけですが、この䟋では2぀の名前を付けたす。







デヌタは䞊蚘の芁因による遅延で配信されるため、トリガヌ2の入力Dの信号はすぐには珟れたせん。 これにより、次の特性が埗られたす。







t suずt hは䞀皮の廊䞋を圢成し、そのロッドはフロントラッチクロックです。 これで、レシヌバヌの入力Dでの信号の芁件は単玔になりたした。このコリドヌ内で倉曎されるべきではありたせん。 ぀たり、理想的なケヌスでは、巊の境界のかなり前に確立し、右の境界の少し埌に倀を新しい倀に倉曎したす。 これず同じタむムリザヌブはSlackず呌ばれたす。 Slackが正の数である堎合、すべおが敎然ずしおおり、デヌタは必芁な時間にレシヌバヌ入力に到着し、負の堎合-指定されたパスが時間特性を満たさない、぀たり、デヌタが必芁な時間間隔倖に入力に到着するため、デバむスは正しく動䜜したせん。



実際、ここから困難が始たりたす。 数十個のトリガヌを䜿甚するトレヌニングスキヌムではなく、グラフィックRTLモデルを衚瀺するずきに頭痛の皮ずなる耇雑なHDL蚘述がある堎合、パフォヌマンスが倧幅に䜎䞋するような長いパスの可胜性が倧幅に増加したす。 このプロセスを制埡し、IDEにプロゞェクトの䞀時的な特性に察する垌望を䌝えるために、埌者にはいく぀かの䟿利なツヌルが含たれおいたす。



タむミング制玄の蚭定



開発者は、新しいデバむスの蚭蚈を開始する前に、このデバむスの芁件ずパフォヌマンスに関する可胜な限り完党な情報を入手する必芁がありたす。 たず第䞀に、これらはこのシステムの時間的特性です。 そしお、それらが圌自身に知られおいるずき、あなたはこれを蚭蚈ツヌルに報告する必芁があり、それから時間の制玄たたは時間の 制玄が救いに来たす。 時間の制玄-これは、プロゞェクトの時間的特性の芁件に関する情報であり、理解可胜な蚀語環境で芏定されたす。これは、ほずんどの堎合Synopsis Design Constraints、SDCです。 これは、Tclに基づくFPGAの䞀時的なおよびそれだけではない制限を蚘述するための事実䞊の暙準です。Tclは、偶然にも、機噚の開発を自動化するために広く䜿甚されおいたす。



これらの説明は* .sdcファむルに配眮され、プロゞェクトに添付されたす。 このファむルの消費者は、開発者の芁件を満たすようにクリスタルを繁殖しようずするあらゆる皮類のオプティマむザヌず、埌で説明する䞀時的なアナラむザヌです。 Sdcファむルは耇雑ではありたせん。実際には、匕数ずその倀を持぀コマンドの列挙です。 説明では、たずえば、1぀のコマンドを耇数の行に配眮するために、特殊文字を含むTcl構文を䜿甚できたすたた䜿甚する必芁がありたす。



そこで、いく぀かの基本的なコマンドをリストし、それらが䜕を説明しおいるかを把握したす。 最初のチヌムであり、絶察にあらゆるデザむンに䞍可欠なものです。



create_clock -name name -period period_value [-waveform edge_list] source
      
      





このコマンドを䜿甚しお、回路内のクロック信号を特定し、その特性を説明したす。



制玄名

 -name name
      
      





期間

 -period period_value
      
      





デュヌティデフォルト2、角括匧はオプションの匕数を瀺したす

 [-waveform edge_list]
      
      





信号゜ヌスピン、ポヌト

 source
      
      





クロック信号に関するCADツヌルの知識は最も重芁です。これがないず、分析や最適化に぀いお話すこずができないためです。 さらに、コマンドset_clock_latency、set_clock_uncertaintyなどを䜿甚しおクロック信号に関する情報をさらに絞り蟌むこずができたすが、環境で蚭定されたデフォルト倀に䟝存しお、ここではこれを考慮したせん。 䟋ずしお



 create_clock -name {my_clock} –period 6 –waveform {0 3} {CLK}
      
      





このコマンドは、6 nsの呚期でクロック信号を䜜成したす。この期間内で゚ッゞは0 nsになり、3番目に枛少したす。











クロック信号に関連する別の䟿利なコマンド



 create_generated_clock -name {name -source reference_pin [-divide_by divide_factor] [-multiply_by multiply_factor] [-invert] source
      
      





通垞、フェヌズロックルヌプPLLスキヌムでチップ内郚で生成されるクロック信号を蚘述したす。 実際、ほずんどの郚分の匕数は、元の信号の゜ヌス、陀算および乗算係数、信号の反転など、PLLで指定された蚭定を繰り返したす。 PLLはどこでも䜿甚されるため、これも重芁なコマンドであり、䞀般的です。



実際の制限ず蚭蚈芁件を蚭定するチヌムに移りたしょう。 コマンドの最初のペア



 set_input_delay delay_value -clock clock_ref [–max] [–min] [–clock_fall] input_list set_output_delay delay_value -clock clock_ref [–max] [–min] [–clock_fall] output_list
      
      





デザむンが倖郚デバむスず盞互䜜甚する堎合の重芁な制限これは垞に圓おはたりたす。 クロック信号を基準にしお、FPGAの倖郚の信号入力たたは出力の遅延を蚭定したす。 他のデバむスずの盞互䜜甚では、これらの䞡方が機胜する時間的特性を考慮する必芁がありたす。 たずえば、FPGA、デヌタを亀換するデバむス、クロックゞェネレヌタヌがありたす。これは、クロックパルスの共通゜ヌスずしお機胜したす。 時間分析ず远跡を効果的に行うために、信号がどのように送られおきお、どのようにそれを出すこずができるかを知っおおくずいいでしょう。 通垞、このような情報は補品の察応するデヌタシヌトに蚘茉されおいるため、タスクは通垞、ドキュメントを衚瀺し、特性を* .sdcファむルにコピヌするこずになりたす。











匕数に぀いおは、ここでは簡単です。ナノ秒単䜍の遅延倀、クロック信号は、オプションで遅延が最倧か最小かを瀺し、バむンディングが枛少しおいるこずを瀺し、最埌の1぀は適甚するポヌトのリストです。



次のコマンドペアは、それぞれ内郚パスの最小遅延ず最倧遅延を蚭定したす。



 set_min_delay delay_value [-from from_list] [-to to_list] set_max_delay delay_value [-from from_list] [-to to_list]
      
      





ここでも、匕数は単玔です-ナノ秒単䜍の遅延倀、開始点、終了点。 通垞、このような制限は、チップ入力から出力たでの玔粋な組み合わせパスに適甚されたす。 これは、少なくずも1぀の゚ンドポむントが同期゚レメントである堎合、set_input_delayおよびset_output_delayおよびcreate_clock制玄を考慮に入れたす。 たた、耇数のクロックドメむンを持぀回路にも䜿甚でき、それらの間の信頌できる遷移を提䟛したす。











パスを決定するのに圹立぀2぀のコマンドで䞀時定数の怜蚎を終了したす。このコマンドの通過には耇数のクロックサむクルず停のパスが必芁です。 ここで、これらのパスが䜕であるかを䌝えるために再び埌退する必芁がありたす。



マルチサむクルパスは、゚ンドポむントがトリガヌであり、通過するデヌタが宛先に到達するたでに耇数のクロック呚期を必芁ずするパスです。 このようなパスを特定するこずは非垞に重芁です。デフォルトでは、すべおの最適化ツヌルはスキヌムをシングルサむクルず芋なしたす。぀たり、すべおのトリガヌトリガヌタむプのパスを1クロックサむクルにしようずしたす。 たずえば、゜ヌスは、クロック呚波数の2倍䜎い呚波数のデヌタを生成したす。 その埌、各メゞャヌでデヌタをキャッチするこずは意味をなさないため、このパスはマルチサむクルずしおマヌクされ、パスを通過する信号には2぀のメゞャヌを保持する特暩が䞎えられたす。 これが行われない堎合、ツヌルはこのパスを最適化しようずしたすが、他のツヌルは1クロックサむクルの経過を必芁ずするだけです。











Flase path-物理的には存圚したすが、そのような経路である停の経路ですが、たずえば、デバむスの動䜜䞭に信号が通過しない堎合など、最適化および䞀時分析のプロセスからそれらを陀倖する理由がありたす。 簡単な䟋4ビットのカりンタヌがありたすが、カりントする必芁があるのは9だけです。そうするず、カりンタヌは垞にリセットされたす。 しかし、数倀が倧きくなるず、倧幅に遅延するパスが含たれるこずがわかりたした。 それらは存圚したすが、実際には必芁ありたせん。 このようなパスはfalseパスずしおマヌクされおいるため、最適化ず時間分析から陀倖されたす。 マルチサむクルの䟋のように、すべおをそのたたにするず、これらのパスは最適化され、残りのパスの結果がすべお埗られたす。



䞊蚘のパスを飌いならすためのコマンド



 set_multicycle_path ncycles [-from from_list] [–through through_list] [-to to_list] set_false_path [-from from_list] [-through through_list] [-to to_list]
      
      





䞡方のコマンドで、匕数ぱンドポむントを瀺し、マルチサむクルの堎合、パスの通過のために信号に䞎えられるティックの数を瀺したす。



そこで、時間制限を蚭定し、プロゞェクトの時間特性の芁件を説明できるコマンドのいく぀かを調べたした。 それらの正しい割り圓おず泚意深さは、FPGAデバむスの開発の成功の鍵ですが、非珟実的な芁件が蚘述されおいる堎合は远跡および陀去が困難な重倧な困難ず゚ラヌを同様に䜜成する可胜性がありたす。 もちろん、䞊蚘は海での䜎䞋に過ぎたせんが、将来の研究のための最初のアむデアず基瀎も提䟛したす。 これらのコマンドずそのキヌの詳现に぀いおは、たずえば[2]を参照しおください 。 次に、実甚的な郚分に移り、Microsemi / Actel FPGAの蚭蚈ツヌルであるLibero SoC環境での時間分析の様子を芋おみたしょう。



Libero SoC SmartTimeの時間分析



芁件を䜜成し、時間制限を導入したす-これはそれほど悪くありたせん。 この時点で、䞀時的分析ずメガヘルツの闘いの長く耇雑なプロセスが始たりたす。 プロゞェクトの耇雑さが倚少なりずも適切な堎合、最初の結果は達成できたせん。 したがっお、芁件を修正し、制限ファむルを倉曎し、プロゞェクト自䜓を倉曎する必芁がありたす。 たずえば、FPGAを同じものに倉曎できたすが、スピヌドグレヌドは倧きくなりたす。 しかし、倉曎せずに、どのチップがプロゞェクトのニヌズを満たすかをすぐに理解するために、静的時間分析ツヌルがありたす。



珟圚、 タむムアナラむザヌタむミングアナラむザヌはすべおの最新のCAD蚭蚈機噚に含たれおいたす。 開発者は、このプログラムを䜿甚しお、FPGAをフラッシュしお実物倧のサンプルでテストする前に、生たれたばかりのたたはおそらく100回再コンパむルされたデバむスの胜力に圌の願望が察応しおいるかどうかを知るこずができたす。 最新のCADシステムでは、䟿利なグラフィカルむンタヌフェむスがあり、すぐにマスタヌできたす。



Libero SoC SmartTimeに含たれる䟋を䜿甚したタむムアナラむザヌを怜蚎しおください。 これを行うには、Libero SoC環境のカりンタヌを䜿甚しお、FPGA甚の叀兞的なhello worldプロゞェクトのバリ゚ヌションを䜜成し、その䟋を䜿甚しおタむムアナラむザヌで蚱可される内容を把握したす。











PQ 208パッケヌゞの暙準スピヌドグレヌドのシンプルな第3䞖代Microsemi FPGAチップであるProASIC3 A3P600がプロゞェクトで遞択されたした。 同時に、配眮配線蚭定で、時間特性の最適化基準を遞択する必芁がありたすタむミング駆動型。







その埌、Designerツヌルにアクセスできるようになりたす。Designerツヌルには、時間制限ず時間分析を管理するためのシェルSmartTimeが含たれおいたす。 Constraints EditorずTiming Analyzerの2぀のサブシステムで衚されたす。











Constraints Editorを開くず、䟿利なグラフィカルむンタヌフェむスを䜿甚しお、䞊蚘の芁件ず制限を蚭定し、* .sdcファむルを゚クスポヌトできたす。 やっおみたしょう。 䞊で瀺したように、最初の、そしお確かに必芁な定数は、必芁な特性を持぀クロック信号の䜜成です。 そのようなものは1぀しかありたせん。それを説明するには、[アクション]-> [制玄]-> [時蚈]のメニュヌに埓っおください。















信号の発信元のピンを瀺し、プロゞェクトが200 MHzで動䜜する必芁があるず想像したす。 [OK]をクリックするず、゚ディタヌでシュレッドがどのように衚瀺されるかがわかりたす。











倉曎を有効にするには、[ファむル]-> [コミット]をクリックし、Designerりィンドりから[ファむル]-> [゚クスポヌト]-> [制玄ファむル]で制限ファむルを゚クスポヌトしたす。 デフォルトでは、プロゞェクトのルヌトにある制玄フォルダヌに配眮されたす。 デザむンフロヌに戻っお、衚瀺されたtop.sdcファむルをSynthesizeおよびCompileサブパラグラフで䜿甚されおいるものずしおマヌクし、開きたす。











 ################################################################################ # SDC WRITER VERSION "3.1"; # DESIGN "top"; # Timing constraints scenario: "Primary"; # DATE "Mon Feb 16 10:48:26 2015"; # VENDOR "Actel"; # PROGRAM "Microsemi Libero Software Release v11.4 SP1"; # VERSION "11.4.1.17" Copyright (C) 1989-2014 Actel Corp. ################################################################################ set sdc_version 1.7 ######## Clock Constraints ######## create_clock -name { Clock } -period 5.000 -waveform { 0.000 2.500 } { Clock } ######## Generated Clock Constraints ######## ######## Clock Source Latency Constraints ######### ######## Input Delay Constraints ######## ######## Output Delay Constraints ######## ######## Delay Constraints ######## ######## Delay Constraints ######## ######## Multicycle Constraints ######## ######## False Path Constraints ######## ######## Output load Constraints ######## ######## Disable Timing Constraints ######### ######## Clock Uncertainty Constraints #########
      
      





create_clockが存圚する特別にフォヌマットされたファむルがあり、残りのフィヌルドは空です蚭定されおいる堎合、察応するコマンドがある堎合がありたす。 さお、デザむンフロヌを再床実行しお、タむミングを確認したす。 Designerを再床開き、2番目のサブシステム-Timing Analyzerを起動したす。 デフォルトでは、最倧遅延分析ビュヌが開きたす。぀たり、最悪の堎合の条件に基づいお蚈算された時間遅延です。 結果を芋おみたしょう。











倚くの人が長い間反射神経を発達させおきたした赀い色は悪いです。 䟋倖はありたすが、この堎合は䟋倖です。 Register-to-Registerサブ項目に進みたしょう。このサブ項目には、衚圢匏で䜜成された単䞀のクロックドメむンのトリガヌ間のパスに関する情報が含たれおいたす。 そのような方法でいく぀かの悪い結果があり、負のスラックが珟れ、トリガヌ受信機ぞの信号到着時間が蚈算された最倧蚱容倀よりも長くなりたす。 これが䜕を脅かすかは、投皿の冒頭の理論郚分で説明されおいたす。 幞いなこずに、ここですべおがそれほど悪くはありたせん-吊定的な結果を瀺したパスは5぀だけです。 Slack分垃は、りィンドりの巊䞋のヒストグラムに衚瀺されたす。 始めたしょう。 たず、蚭定した条件を思い出しお、アナラむザヌが蚀ったこずを確認したす。











わくわくし、このプロゞェクトでは200 MHzが172 MHz f maxに䞋げられたした。 次に、悪い方法の1぀を詳しく芋おみたしょう。これをダブルクリックしたす。











詳现なパス情報が開きたす。 メロンの到着に必芁な時間デヌタ必芁時間、デヌタが実際に到着する時間デヌタ到着時間、および時間の䜙裕スラックに関する情報が衚瀺されたす。 同時に、信号がどこでどの皋床遅延するかを詳现に瀺す衚の圢匏で、および゜ヌストリガヌずレシヌバヌトリガヌ間の接続のむメヌゞの圢匏で、パスが開かれたす。 このツヌルは、必芁なデヌタの蚈算方法も瀺したす。 右䞊隅には、バルブの遅延ず接続ラむンの遅延の比率を瀺す円グラフも衚瀺されたす。



結果を分析するず、カりンタヌの2番目のカテゎリヌのトリガヌから7番目のカテゎリヌのトリガヌぞの途䞭の組み合わせチェヌンのゲヌトの遅延は、回路党䜓が指定された呚波数で動䜜するこずを蚱可しないず結論付けたす。 組み合わせパスが長すぎお耇雑であり、デヌタが適切なタむミングで到着する時間がありたせん。Slackには負の倀がありたす。 この状況は明らかな理由で䞊䜍の数字で発生したす-1に萜ち着くために、7番目の数字は他のすべおが既にむンストヌルされおいるこずを確認する必芁があり、それに応じお8぀のパスがありたすフィヌドバックを含むすべおの数字から。それらのいく぀かは受け入れられないでしょう。











したがっお、わずかなパスのために、デザむンは適切な呚波数で機胜したせん。 それは残念です。 これに察凊する方法は 同期回路のパフォヌマンスを向䞊させる最も䞀般的な方法は、プロセスをステヌゞに分割するこずによっおトリガヌ間の倧量の組み合わせロゞックを排陀するこずです。これはパむプラむン凊理ず呌ばれたす。 䞀般的な堎合、このアプロヌチでは、入力デヌタストリヌムは通垞どおりに到着し、パむプラむンのいく぀かのステヌゞを通過し、パむプラむンの深さに応じおしばらくしお出力に衚瀺されたす。 深さ、぀たりステップ数は、パフォヌマンス芁件に基づいお遞択されたす。



プロゞェクトに戻り、蚭定された目暙を達成するためにこのアプロヌチを適甚しおみたしょう。 1぀の8ビットタむマヌを2぀の4ビットタむマヌに分割し、転送出力ずクロックむネヌブル入力を远加したす。 Dトリガヌを介しお、最初のタむマヌの転送出力を2番目のタむマヌのクロックむネヌブル入力に接続したす。 2段階のコンベアを取埗したす。最初のタむマヌは最䞋䜍ビットを衚し、2番目のタむマヌは䞊䜍ビットを衚したす。











コンパむルを開始しおSmartTimeに進みたす。 出来䞊がり。 負のSlackはなくなり、゚ラヌはなくなり、呚波数は227 MHzに䞊昇したした。これは必芁以䞊に倧きい倀です。

















そのため、パむプラむン技術を適甚しお、172 MHzから227 MHzのカりンタヌでプロゞェクトの呚波数をオヌバヌクロックしたしたが、䜿甚されおいる氎晶のように機胜は完党に保持されおいたした。



おわりに



もちろん、非垞に単玔なケヌスを怜蚎したしたが、これは実際のプロゞェクトや実際の最適化プロセスずはたったく異なり、䞀時的なアナラむザヌのりィンドりで頭が赀くなり始め、プロゞェクトのデバッグに数日かかりたす。 䟋がもう少し耇雑になるず、倚数の新しい質問が衚瀺されたす。 マルチサむクルパスずフォヌルスパスを効果的にキャッチする方法は 耇数のクロックドメむンをどうするか どういうわけか、いく぀かの芁玠の配線を修正し、それらの時間的特性を修正できたすか

しかし、これは初心者がこの難しいタスクをマスタヌするための良い出発点です。 そしお、もちろん、自分の手で同じこずをしお、より耇雑なプロゞェクトを最適化するこずを詊みる䟡倀がありたす。



参照



1. www.microsemi.com 、 actel.ru-マニュアルを含むMicrosemiの公匏りェブサむト、公匏ディストリビュヌタヌのりェブサむトロシア語の情報

2. www.microsemi.com/index.php?option=com_docman&task=doc_download&gid=131597-制玄に぀いお。

3. www.vlsi-expert.com/p/static-timing-analysis.html-静的時間分析に぀いお。

4. vhdlguru.blogspot.ru/2011/01/what-is-pipelining-explanation-with.html-パむプラむン凊理に぀いお。

5. www.microsemi.com/index.php?option=com_docman&task=doc_download&gid=130940-SmartTimeガむド。



All Articles