FC2カウンター FPGAの部屋 ISE11.1iのチュートリアル3(制約 (UCF) の作成)
FC2ブログ

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

FPGAの部屋

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

ISE11.1iのチュートリアル3(制約 (UCF) の作成)

”ISE11.1iのチュートリアル2(プロジェクトの作成)”の続き。

今回は制約ファイル(UCF)を作成しよう。PlanAheadを使用する。
最初にDesignペインの内のProcessesペインのUser Constrainsの+をクリックして展開する。そのうちのI/O Pin Planning (PlanAhead) - Pre-Synthesis をダブルクリックする。
ISE11_1_tutorial_21_090509.png

ISE Project Navigatorのダイアログが開く。UCFをプロジェクトに追加するか聞いてくるので、Yeaボタンをクリックする。
ISE11_1_tutorial_22_090509.png

Welcome to PlanAheadの説明ダイアログが開く。もう一度開くと面倒なので、下のAlways show this dialog on startupのチェックボックスをクリックして外す。Closeボタンンをクリックする。
ISE11_1_tutorial_23_090509.png

PlanAheadが開く。下図に示す。
ISE11_1_tutorial_24_090509.png

I/O Portsペインのan_n (4) とScalar ports (11) の前の+をクリックして展開する。a_n をPackageペインのE14パッドにドラック&ドロップする。
ISE11_1_tutorial_25_090510.png

IOパッドを固定すると、PlanAheadにIOパッドの情報が表示される。
ISE11_1_tutorial_26_090510.png

上の図のI/O PortsペインのI/O Std を見るとLVCMOS25と表示されている。これをLVCOMS3.3に変更する。(I/O電圧が3.3Vなので。。。本当はトラ技の原稿のほうも直さないと駄目ですね。動いていますが。。。)
左上のI/O Port Properties では、下のGeneralタブが現在、選択されているが、これをConfigureタブをクリックして切り替える。I/O Port Properties のI/O Standard をLVCMOS33に変更する。
ISE11_1_tutorial_27_090510.png

I/O Standard をLVCMOS33に変更したので、この値をApplyボタンをクリックして、反映させる。
ISE11_1_tutorial_28_090510.png

この作業を下のUCFに従って行う。全部のIOパッドを固定する。(このUCFがあればこの作業はいらないのだが、PlanAheadの使い方の練習である)

NET "a_n" LOC = "E14" ;
NET "an_n<0>" LOC = "D14" ;
NET "an_n<1>" LOC = "G14" ;
NET "an_n<2>" LOC = "F14" ;
NET "an_n<3>" LOC = "E13" ;
NET "b_n" LOC = "G13" ;
NET "c_n" LOC = "N15" ;
NET "clk" LOC = "T9" ;
NET "d_n" LOC = "P15" ;
NET "dp_n" LOC = "P16" ;
NET "e_n" LOC = "R16" ;
NET "f_n" LOC = "F13" ;
NET "g_n" LOC = "N16" ;
NET "reset_sw" LOC = "L14" ;
NET "roll" LOC = "M13" ;


作業が終了したら、FileメニューからSave Project...を選択して、プロジェクトをセーブする。
ISE11_1_tutorial_29_090510.png

これでPlanAheadでのI/Oパッドの配置は終了なので、PlanAheadを閉じる。
Project Navigatorに戻るとDesignペインのHierarchyにdice_top.ucfが追加されている。下にdice_top.ucfの内容を示す。

NET "a_n" LOC = E14;
NET "a_n" IOSTANDARD = LVCMOS33;
NET "an_n[0]" LOC = D14;
NET "an_n[0]" IOSTANDARD = LVCMOS33;
NET "an_n[1]" LOC = G14;
NET "an_n[1]" IOSTANDARD = LVCMOS33;
NET "an_n[2]" LOC = F14;
NET "an_n[2]" IOSTANDARD = LVCMOS33;
NET "an_n[3]" LOC = E13;
NET "an_n[3]" IOSTANDARD = LVCMOS33;
NET "b_n" LOC = G13;
NET "b_n" IOSTANDARD = LVCMOS33;
NET "c_n" LOC = N15;
NET "c_n" IOSTANDARD = LVCMOS33;
NET "clk" LOC = T9;
NET "clk" IOSTANDARD = LVCMOS33;
NET "d_n" LOC = P15;
NET "d_n" IOSTANDARD = LVCMOS33;
NET "dp_n" LOC = P16;
NET "dp_n" IOSTANDARD = LVCMOS33;
NET "e_n" LOC = R16;
NET "e_n" IOSTANDARD = LVCMOS33;
NET "f_n" LOC = F13;
NET "f_n" IOSTANDARD = LVCMOS33;
NET "g_n" LOC = N16;
NET "g_n" IOSTANDARD = LVCMOS33;
NET "reset_sw" LOC = L14;
NET "reset_sw" IOSTANDARD = LVCMOS33;
NET "roll" LOC = M13;
NET "roll" IOSTANDARD = LVCMOS33;


それでは、次にタイミングの制約をUCFファイルに加えよう。
DesignペインのProcessesのUser Constraintsを展開した先のCreate Timing Constrains をダブルクリックする。
ISE11_1_tutorial_30_090510.png

論理合成が始まってエラーが出なければ、Timing Constraints画面が立ち上がる。
今回は、動作周波数のみ制約する。左真ん中のConstraint TypeからClock Domainsをダブルクリックする。
ISE11_1_tutorial_31_090510.png

Clock Periodダイアログが立ち上がる。Spartan3 Starter Kitの水晶発振器は50MHzなので、周期としては20ns である。デフォルトが20ns であるので、そのままOKボタンをクリックする。
ISE11_1_tutorial_32_090510.png

そうすると、クロック周期の制約がCreate Timing Constraits for Clock Domains (PERIOD)に表示される。Saveアイコンをクリックしてセーブし、Closeアイコンをクリックしてクローズする。
ISE11_1_tutorial_33_090510.png

するとUCFにPERIOD制約が追加されている。

NET "clk" TNM_NET = clk;
TIMESPEC TS_clk = PERIOD "clk" 20 ns HIGH 50%;



これで今回の制約ファイル(.ucf) の作成は終了した。必要であれば入力パッドにセットアップ時間、ホールド時間(正確にいえばデータの有効時間)の制約や、出力パッドにクロックエッジからの出力時間などの制約を加えることができる。結構、それらの制約が厳しければDCMを使用して、クロックのディレイをキャンセルすることをお勧めする。

”ISE11.1iのチュートリアル4(テストベンチの作成)”に続く。
  1. 2009年05月12日 05:16 |
  2. FPGAリテラシー及びチュートリアル
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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