FC2カウンター FPGAの部屋 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路7(インプリメント)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路7(インプリメント)

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路のインプリメントを行った。
DDR2 SDRAMのUCFは以前作ったDDR2_burst_testからほとんどコピーした。後の、CMOSカメラ関係のUCFはPlanAheadを使って配置した。VGA信号関係は、他のところからコピーして修正した。UCFが完成したので、早速ISE12.1でインプリメントをしてみた。インプリメント結果を下に示す。
CamDispCntrler_DDR2_13_100802.png

LUTの使用率は8%だった。Timinigエラーが1つある。これを見てみよう。Project Navigator のProcessesウインドウのImplement Design -> Place & Route -> Generate Post-Place & Route Static Timing -> Analyze Post-Place & Route Static Timing をダブルクリックしてTiming Analyzerを立ち上げる。下がTiming Analyzerの画面。
CamDispCntrler_DDR2_14_100802.png

(2010/08/04:修正)(このTimingエラーは、overflowやunderflowの結果を保持しようとして、保持回路を付けたときにクロックドメインを間違えたため発生したエラーでした。クロックドメインを修正したら発生しなくなりました。訂正致します。この記事は、ネットを使用したTIG制約の例として残しますが、原因となったエラーはバグでした)

IPを使った非同期FIFOのoverflow やunderflow がエラーとなっている。clk_ddr2(133.33MHz)からclk_cam(25MHz) へのパスがエラーとなっている。本来、非同期FIFOはWrite, Readの依存関係がないクロックを入れて使うものあり、その辺のことは考えてあるので、clk_ddr2とclk_cam間の制約は無しで良いはずである。しかもインスタンスがよくわからないということがあるので、clk_ddr2とclk_cam間のすべての制約を無視するように設定する。現在の回路はclk_ddr2, clk_cam間のやりとりはすべて非同期FIFOのIPを通すか、タイミング的に十分で問題ない様に考えてある(はず?)。
それで、TIG制約を使用して、clk_ddr2とclk_cam間の制約を除外することにする。
Project Navigator のProcessesウインドウのUser Constraints -> Create Timing Constrains をダブルクリックしてConstrains Editor を立ち上げる。
まずは、clk_ddr2とclk_camのグループ制約を作成する。左のConstraint Type からGroup Constrains -> DownSteram Elements By Nets を選択する。clk_ddr2とclk_cam のグループ制約を作る。
CamDispCntrler_DDR2_15_100803.png

次はTIG制約を作ろう。左のConstraint Type からTiming Constrains -> Exceptions -> Paths を選択する。
右上の欄に、TS_CLK_DDR2_to_CAM制約を追加する。
CamDispCntrler_DDR2_16_100803.png

これでTIG制約はできたので、保存すると下の制約がUCFファイルに追加された。

#Created by Constraints Editor (xc3s700a-fg484-4) - 2010/08/03
NET "clk_cam" TNM_NET = TMN_CLK_CAM;
NET "clk_ddr2" TNM_NET = TMN_CLK_DDR2;
TIMESPEC TS_CLK_DDR2_to_CAM = FROM "TMN_CLK_DDR2" TO "TMN_CLK_CAM" TIG;


これでもう一度インプリメントすると、タイミングエラーが無くなった。
CamDispCntrler_DDR2_17_100803.png

これで、インプリメントは終了したので、いよいよSpartan-3A Starter kitにダウンロードして確かめてみるのだが、コネクタの配線(電源)を間違えるとCMOS基板がだめになってしまうので慎重にやることにする。
  1. 2010年08月03日 04:55 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:6

コメント

TIG について


よく分かっていないので、はずしているかもしれないのですが、
IP が出力するのと異なるクロックで Overflow / Undeflow を
読むのであれば、間に同期回路が必要な気がします。
そんなことないでしょうか?

非同期 FIFO が想定する通りの使い方で IP を使う限り、手動で
TIG を書く必要は無いような・・・
  1. 2010/08/03(火) 20:19:32 |
  2. URL |
  3. 武内 #-
  4. [ 編集 ]

武内さん、こんにちは。
記事を書き直したとおり、後の保持回路のクロックドメインを間違えていました。ご指摘ありがとうございました。
  1. 2010/08/04(水) 04:01:21 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

おはようございます。

http://tinyurl.com/26hagxn に書いた内容とかぶるのですが、
「異なるクロックドメインをまたぐ信号に一括で TIG を掛ける」
のは、今回のようなうっかりミスの発見を遅らせてしまうと言う
意味で、あまりお勧めできない方法なんだと思っています。

非同期 FIFO や二重 FF のような同期専用モジュールの内部に TIG が
掛かっていれば、その他で個別に TIG を書かなければならない箇所は
かなり限られると思います。そして、そのような箇所はタイミング
チャート等を書きながら、正しい信号の受け渡しができることを検討
する余地のある箇所なので、「個別に TIG を書くこと」イコール
「要注意マークを付けること」と考えています。
  1. 2010/08/04(水) 05:51:42 |
  2. URL |
  3. 武内 #-
  4. [ 編集 ]

確かにそうだと思いますが、IPはクロックドメイン間のTIG制約を自分でやってくれるのでしょうか?やってくれれば良いと思いますが、自分で書いていない非同期FIFOのIPのTIG制約を書くのはめんどうだと思っています。非同期FIFOのIPのTIG制約は自動的にPCFなどに書かれているのか御存知ですか?

#ずいぶん前?のISEでは非同期FIFOのIPで、非同期FIFO内のパスでタイミングエラーが出ていたのでTIG制約をかけた気がしたのですが、もう一度確かめられるものならば、確かめてみます。
  1. 2010/08/04(水) 06:07:18 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

言われてみれば、確かにそうですね。自分では CoreGen の非同期 FIFO を使っていないのに適当なことを書いてしまいました。

罪滅ぼしに調べてみたところ、ipcore_dir に生成される fifo_generator_ug175.pdf の中に Setup and Hold Time Violations というセクションがあって、そこに制約の書き方があるのを発見しました。

実のところ自分の書いた非同期 FIFO の中でも、複数ビットの信号をクロックドメイン間で受け渡す際、それらの信号線間で伝達遅延に2クロック以上の差があると論理が破綻してしまうことがあって (非同期 FIFO 内で使うグレイコードのやりとりです) そういう時のうまい制約のかけ方が思い浮かばず困っていたのですが、ここにあるように TIG ではなく MAXDELAY を使うのが良いのですね。

自分のコードにも取り入れようと思いました。
  1. 2010/08/04(水) 07:12:03 |
  2. URL |
  3. 武内 #-
  4. [ 編集 ]

こんにちは。返事が遅くなってすみません。
ビット間の遅延の差の話ですね。了解しました。Maxskewで出来れば良いと思ったのですが、Maxdelayで対処するとのことですね。
いろいろ教えていただいて、ありがとうございました。また、なにかありましたら、どんどん、ご指摘ください。
  1. 2010/08/05(木) 12:11:19 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1541-9bdfac2e
この記事にトラックバックする(FC2ブログユーザー)