連載
» 2008年11月28日 00時00分 公開

必修! FPGAタイミング解析の基礎(2):SDCを使ったタイミング制約を押さえよう (2/3)

[小原成介(日本アルテラ),@IT MONOist]

仮想クロックを定義する

 前回説明したように、I/Oタイミング制約のために、仮想的に周辺デバイスを考えます。周辺デバイスは、50MHzのクロックでFPGAの出力データを受信するので、これを仮想クロックとして、次のように定義します。このようにして定義したクロックを使って、I/Oタイミングの制約を行います。


create_clock -name vclk -period 20 

 基本クロックと同じコマンドですが、この例のように対象ノードを指定しないと、仮想クロックになります。

非同期関係を制約する

 SDCでは、複数のクロックの定義をすると、それらはすべて同期関係にあると推定されます。つまり、それらの間のデータやパスはすべて、タイミング解析の対象となります。非同期であることを考慮して、設計されている場合には、制約でそのことを明示する必要があります。

非同期パスの例 図3 非同期パスの例

 図3に示す回路では、CLKIN1とCLKIN2は非同期関係のため、その間のパスは解析をする必要はありません。そこで、以下の(1)、(2)のいずれかの制約で、非同期関係であることを指示します。

create_clock -name clkin1 -period 10 [get_ports CLKIN1]
create_clock -name clkin2 -period 15 [get_ports CLKIN2]
 
(1)
set_clock_groups -asynchronous -group {clkin1} -group {clkin2}
 
(2)
set_false_path -from [get_clocks clkin1] -to [get_clocks clkin2]
set_false_path -from [get_clocks clkin2] -to [get_clocks clkin1] 

排他関係を制約する

 排他関係の代表例は、クロックがマルチプレクスされている場合です。マルチプレクス・クロックで駆動されるFFには、2種類のクロックが入りますが、この2つのクロック間のパスを解析する必要はありません。このことを制約で明示する必要があります。

 少し分かりにくいと思いますので、具体例で説明します。図4の回路には、CLKINポートから、100MHzのクロックが入力されて、内部で2分周されています。CLKINと分周クロックがマルチプレクスされてから、FF1とFF2へ分配されています。2つのクロックを定義すれば、問題はなさそうですが、それだけではなく、次の4つのパスが解析の対象になります。

排他関係の例示 図4 排他関係の例示
  1. FF1(CLKINで駆動) → FF2(CLKINで駆動)
  2. FF1(CLKINで駆動) → FF2(分周クロックで駆動)
  3. FF1(分周クロックで駆動) → FF2(分周クロックで駆動)
  4. FF1(分周クロックで駆動) → FF2(CLKINで駆動)

 (2)と(4)は意味のない解析ですので、制約によって排除する必要があります。そのためには、次のように「set_clock_groups」コマンドを使って、CLKINと分周クロックが排他関係にあることを示します。

create_clock -name clkin -period 10 [get_ports CLKIN]
create_generated_clock -name divclk -source [get_ports CLKIN] \
    -divide_by 2 [get_pins DIVFF|regout]
 
set_clock_groups -logically_exclusive -group {clkin} -group {divclk}
 
(アルテラのTimeQuestでは、「-logically_exclusive」は「-exclusive」オプションになります)

マルチサイクル制約とは?

 同期回路では、あるクロックエッジから、次のクロック・エッジの間にデータの受け渡しが行われるのが原則です。タイミング解析ツールも自動的に、送信エッジの次のエッジを受信エッジとして、セットアップ解析を行います。2サイクル以上でデータの受け渡しを行う回路の場合には、解析するエッジの変更をツールに指示します。このために使うのがマルチサイクル制約です。

 マルチサイクル制約の設定が必要となるのは、大きく分けて、次の2つの場合があります。

(1)送受信のクロック間に位相差がある場合

(2)クロック・イネーブルを使っている場合

 (1)は図5に示すように、送信と受信のクロック位相に差がある場合です。設計者は時間(クロック周期+α)でのデータの受け渡しを意図していますが、ツールは時間(α)でデータの受け渡しが行われるものとして、タイミング解析を行います。

送信と受信のクロック位相に差がある場合 図5 送信と受信のクロック位相に差がある場合

 (2)は図6に示すように、クロック・イネーブルを使って、2サイクルをかけてデータ転送をしている場合です。設計者は2クロック周期でのデータの受け渡しを意図していますが、ツールは1クロック周期でデータの受け渡しが行われるものとして、タイミング解析を行います。

クロック・イネーブルを使っている場合 図6 クロック・イネーブルを使っている場合

 いずれの場合も、マルチサイクル制約を行うことで、ツールに設計者の意図を教える必要があります。2つの場合の違いは、ホールド解析エッジを変更する必要があるかどうかです。それぞれ、どのように制約を与えればいいかを次に説明します。

関連キーワード

FPGA関連 | 回路 | FPGA | 設計 | ASIC | 半導体


Copyright © ITmedia, Inc. All Rights Reserved.