FC2カウンター FPGAの部屋 キャラクタ描画テスト回路のインプリメント1(TIG制約)
fc2ブログ

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

FPGAの部屋

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

キャラクタ描画テスト回路のインプリメント1(TIG制約)

前回、キャラクタ描画テスト回路のシミュレーションを行ったので、今度はインプリメントをしてみた。
最初にDDR2 SDRAMのバーストテストの時のUCFを貼りつけて、VGA出力などの足りないところはSpartan3A Starter Kitのユーザーズガイドから持ってきてUCFを完成させた。それでインプリメントしたところ、最初にVGA信号用のDCMとDDR2 SDRAM用のDCMを同じクロック入力パッドから入力していたので、片方のクロック配線が一般配線に回ってしまうというエラーが出てしまった。これは、DDR2 SDRAM用のDCM出力 (BUFG出力) からVGA信号用のDCMのクロック入力につなぐくことにして問題解決。
次に入力クロックの周期だが、20nsecでは到底メットしないとのエラーが出て、Place & Route(以下P&Rと省略)でエラーで止まってしまう。幾つか値を入れたところ100nsecでやっと通って、インプリメントが成功した。全くもっておかしいので、P&R後のタイミング解析結果を見てみたところ、非同期FIFO のclk_vga(65MHz予定クロック)ロジックからclk_ddr2(150MH予定クロック)ロジックまでの非同期FIFO のパスを解析してしまっている。
Bitmap_VGAC_implement_1_100213.png

これは、2つのクロックを使用するロジック間のパスのTIG制約を加える必要がある。以前に、”UCFの書き方3”で説明したことがあるが、今度はConstraints EditorからTIG制約を追加してみようと思う。それでは制約を追加しよう。
Project NavigatorのProcessesペインのUser ConstraintsからCreate Timing Constraints をダブルクリックする。
Bitmap_VGAC_implement_2_100213.png

Constraints EditorがProject Navigator上に表示されるので、左のConstraints TypeからGroup ConstraintsのBy DCM Outputsを選択して、DCM/PLL/MMCM 出力ピンごとの制約のグループ化を行うことにする。double click to add a new constraints... をダブルクリックすると、Group Constraints by DCM/PLL/MMCM Outputs (TNM)ダイアログが出てくる。
Bitmap_VGAC_implement_3_100213.png

ダイアログのTime name を入力して、VGAクロック用のDCMを選択する。Available output net pins: リストからCLKFXをクリックで選択して、AddボタンでOutput net pin targets: リストに追加する。(VGA用クロックはCLKFXで作っている)Createボタンをクリックして、制約を生成する。
Bitmap_VGAC_implement_4_100213.png

同様にDDR2_CLKの制約を生成する。
Bitmap_VGAC_implement_5_100213.png

2つのグループ制約が生成できた。
Bitmap_VGAC_implement_6_100213.png

次にTIG制約を生成しよう。
左のConstraints TypeからTiming ConstraintsのExceptionsのPathsを選択する。右の1ライン目を右クリックして、右クリックメニューからCreate Constraints を選択する。
Bitmap_VGAC_implement_7_100213.png

Path Exceptionsダイアログが表示される。TIMESPEC nameにTS_VGA2DDR2_CLK_TIGを入力して、Time groupsにFrom group:にVGA_CLK_OUTPUTを選択し、To groups:にDDR2_CLK_OUTPUTを選択する。Constraint typeでMark as false pathsのラジオボタンをクリックする。Createボタンをクリックする。これでVGA_clkで動作するロジックからDDR2_clkで動作するロジックへのパスを無視する設定をすることができた。
Bitmap_VGAC_implement_8_100213.png

次に、DDR2_clkで動作するロジックからVGA_clkで動作するロジックへのパスを無視する設定をする。これが出来上がり図。
Bitmap_VGAC_implement_9_100213.png

これでセーブして、UCFファイルを見てみると、下のような制約が付加された。

PIN "dcm_DDR2_VGA_clk_i/dcm_VGA_clk_dcm.CLKFX" TNM = VGA_CLK_OUTPUT;
PIN "ddr2_sdram_cont_i/dcm_module_inst/DCM_INST1.CLK0" TNM = DDR2_CLK_OUTPUT;
TIMESPEC TS_VGA2DDR2_CLK_TIG = FROM "VGA_CLK_OUTPUT" TO "DDR2_CLK_OUTPUT" TIG;
TIMESPEC TS_DDR22VGA_CLK_TIG = FROM "DDR2_CLK_OUTPUT" TO "VGA_CLK_OUTPUT" TIG;


これで、入力クロックの周期制約をもう一度、20nsecにしてインプリメント。P&Rの途中でけられることはなくなった。良かった。やはり、上記のパスが原因だった。しかし、タイミングエラーはまだある。
  1. 2010年02月13日 10:00 |
  2. VGAコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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