なぜいま、正しいタイミング解析が重要なのか?:必修! FPGAタイミング解析の基礎(1)(1/3 ページ)
複雑な回路でも間違いなく解析したい。そんな設計者のために、タイミング解析とSDCフォーマットによるタイミング制約の方法を伝授!!
半導体デバイスの集積度は、1年半で2倍になるといわれます。
その直接的な要因には“デバイスの製造技術の向上”があり、間接的な要因には“半導体デバイスを使うさまざまな電子機器の高機能化”が挙げられます。PCや携帯電話など私たちの身の回りにある電子機器を考えていただければ、その進化が実感できると思います。また、こうした急速な発展は半導体デバイスのみならず、FPGAやASICなどの論理設計デバイスの世界でも同様です。
しかし、こうした発展の一方で忘れてはならないのが、設計者への負担です。半導体デバイス、論理設計デバイスの規模が増大すればするほど、論理設計やタイミング設計の複雑さが増し、設計者の頭を悩ませ続けます。
インターフェイス回路は従来の共通クロック同期に代わってソース・シンクロナスやダブル・データ・レートが一般的になったり、1つのデバイス内に10種類以上のクロックを使った複雑な設計がなされたり、プロセスの進歩により温度や電圧の変動による影響やチップ内のタイミングばらつきの相対的な増加が次第に大きくなったりして、タイミング設計に大きなインパクトを与えています。特に、“タイミング制約の漏れ”は、デバイスの動作の不具合を引き起こすため、論理設計のミスと同様に致命的なものです。逆に、過剰な制約はタイミング収束を困難にし、開発の工程を遅らせる原因ともなります。
こうした状況の中、ある種の曲がり角に差し掛かったのがFPGA開発です。なぜなら、ASICを凌駕(りょうが)するほど、大規模化、高機能化が急速に進んでいるのにもかかわらず、従来のFPGA開発ツールでは「複雑な回路のタイミング制約や解析をなるべく簡単に間違いなく(一貫した方法で)行いたい」という設計者の要求に応え切れなくなってきたからです……。
では、どうしたら設計者の要求に応えられるのか? そこで、登場したのが「より厳しい環境に置かれているASIC開発の手法を取り入れる」という考え方です。ASIC開発というのは、回路修正にマスク再作成のための莫大な費用が掛かることもあり、タイミング解析を含めた設計手法とツールが、FPGAと比べて早くから発達してきました。こうした手法の中から近年、FPGA開発ツールに取り入れられたのが、タイミング制約のためのフォーマット「SDC(Synopsys Design Constraints)」です。
SDCはASIC開発で業界標準のフォーマットです。業界標準の手法が普及することは、設計者にとっても大きなメリットであり、今後SDCに対応したFPGA開発ツールが増えていくと予想されます。また、この動きがさらに広まれば、ASIC設計者にとってのスタンダードであるSDCの知識が、VHDLやVerilogなどの知識と同様に、FPGA設計者にも求められることになるでしょう。
「あぁ、また新しいことを習得しないと……」とお嘆きかもしれませんが、実はそんなに悲観することはありません。SDCの習得は、HDLほど時間はかかりませんし、いくつかのコマンドさえ覚えてしまえば、ほとんどの回路を正しく制約できるようになります。
というわけで(ちょっと前置きが長くなりましたが)、本連載では複雑な回路でも間違いなく解析が進められるように、「タイミング解析」と「SDCフォーマットによるタイミング制約」の方法について順を追って解説し、タイミング解析・制約の基礎を伝授していきたいと思います。
正しくタイミングを解析できていますか?
そもそも、「タイミング解析」とはどのようなものでしょうか?
FPGAに限らず、一般的にデジタル回路の設計では、要求されたスピードで回路が動作しているかを確認するために、スタティック・タイミング解析を行います。これを突き詰めていうならば、以下の2つを確認することです。
- セットアップ解析
→データがフリップ・フロップ間を伝わるのが遅過ぎないか? - ホールド解析
→データがフリップ・フロップ間を伝わるのが早過ぎないか?
ちょっと簡単過ぎる表現ですね。実際に皆さんが設計されている回路は非常に複雑だと思います。例えば、次のような回路を設計していて、タイミングを解析するのに苦労したことはないでしょうか?
- 異なるクロック間でデータ転送をしている
- クロックを内部で生成したり、切り替えたりして使っている
- ソース・シンクロナスや、ダブル・データ・レート転送をしている
「いまさら、スタティック・タイミング解析の勉強なんて……」と思っている設計者の方でも、これまでに経験のない複雑な回路になると、どのように扱ってよいか迷ってしまう場合が多いようです。
タイミング制約とは?
では、「タイミング制約」とはどのようなものでしょうか?
タイミング制約とは、タイミングに関する設計要求を開発ツールに対して指示することをいいます。最も基本的なタイミング制約の例は、クロック周波数の指定です。これ以外にも、設計要求に応じてさまざまな制約が必要となります。例えば、回路の入出力ポートには、入出力データの遅延の制約が必要ですし、複数のクロックがあれば、それらの関係を制約として定義することが必要です。
それではFPGA開発ツールは、設計者が指定したタイミング制約をどのように使うのでしょうか?
一つは、タイミング解析結果の比較対象です。つまり、解析結果が制約の範囲内であれば、ツールは設計要求を満たしていると判断します。このため、正しくタイミング制約を指定することが、正しいタイミング解析の鍵といえます。
もう一つは、論理合成と配置配線の目標です。開発ツールはHDLで記述された回路を、最適な方法でFPGAに実装しようとします。このとき、タイミング制約を最適化の基準として使います(Timing-driven Compilation)。つまり、開発ツールで回路を最適化する際には、正しくタイミング制約を指定することが重要となります。
SDCフォーマットとは?
複雑な回路になればなるほどタイミング制約の複雑さが増し、プロセスが微細化すればするほど、細かなタイミング制約が求められます。つまり、こういった要求に答えられる開発環境やタイミング制約の方法が、設計をするうえで重要になってくるわけです。ここで、冒頭に紹介したSDCと呼ばれるタイミング制約のフォーマットが登場してきます。
SDCとはどのようなものなのでしょうか?
SDCフォーマットはASIC開発ツールのEDA(Electronic Design Automation)ベンダであるシノプシス社が開発したフォーマットで、ツール・コマンド言語(TCL:Tool Command Language)ベースの文法と、一貫した方法でさまざまな制約を記述できるという特長があります。SDCを使うと、例えばTCLを利用して必要なパスの遅延を抽出することが可能となります。さらに、これまでのFPGA用フォーマットでは、ソース・シンクロナス出力や、ダブル・データ・レートI/Fを正確に制約できませんでしたが、SDCでは正確な記述が可能となります。
これらSDCによるメリットを取り入れるため、FPGA開発でもSDCをサポートしたツールが登場しはじめています。例えば、アルテラ社の「Quartus II」、メンター・グラフィックス社の「Precision Synthesis」、アクテル社の「Designer」などがその一例です。こうしたツールを使うことで、前述したSDCの特長に加え、ツール固有の記述フォーマットの習得が不要になる、ASICとFPGA間での移行が容易になるといったメリットがあります(なお、本連載では、Quartus IIを題材に解説を進めていきます)。
ここで、実際のSDCの記述がどのようなものか見てみましょう。登場するコマンドの意味と使い方は、次回以降で詳しく説明しますので、今回はSDCのイメージをつかんでいただければと思います。
図1に示すサンプル回路は、イーサネットPHYチップにデータを送信する回路です。1GbitモードではGMII(Gigabit Media Independent Interface)インターフェイスで動作し、100MbitモードではMII(Media Independent Interface)インターフェイスで動作します。GMIIインターフェイスは、データ(TXD)を125MHzのクロック(GTX_CLK)とともに、ソース・シンクロナスで送信します。MIIインターフェイスは、PHYチップから受け取る25MHzのクロック(TXCLK)に同期して、データ(TXD)を送信します。
(1) CLKの定義 | create_clock -name CLK -period 40 [get_ports CLK] |
---|---|
(2) PLL出力クロックの定義 | create_generated_clock -name PLLCLK -source [get_ports CLK] -multiply_by 5 [get_pins pll|c0] |
(3) GTX_CLKの定義 | create_generated_clock -name GTX_CLK -source [get_pins pll|c0] [get_ports GTX_CLK] |
(4) TXCLKの定義 | create_clock -name TXCLK -period 40 [get_ports TXCLK] |
(5) クロック間の関係を設定 | set_clock_groups -exclusive -group {PLLCLK} -group {TXCLK} |
(6) GMIIの出力設定 | set_output_delay -clock GTX_CLK -max 2 [get_ports TXD*] set_output_delay -clock GTX_CLK -min 0 [get_ports TXD*] |
(7) MIIの出力設定 | set_output_delay -clock TXCLK -max 15 [get_ports TXD*] -add_delay set_output_delay -clock TXCLK -min 0 [get_ports TXD*] -add_delay |
図1 イーサネットPHYチップにデータを送信する回路 |
この例では、クロックの切り替えと、ソース・シンクロナス・インターフェイスがあり、さらにモードごとに異なるI/Oの制約が必要です。従来のFPGA開発ツールでは、この回路に適切な制約を与えるのは困難か、ツールによっては不可能な場合もあります。
SDCでは図1に示すように、クロックを順に定義し(1)〜(4)、クロック間の関係を指定し(5)、出力タイミングの制約をモードごとに行います(6)(7)。そのため、より複雑な回路でも、よく使われる10種類程度のコマンドだけで適切に制約することが可能なのです。
Copyright © ITmedia, Inc. All Rights Reserved.