FC2カウンター FPGAの部屋 スパルタン3スタータキットでのISE8.1iのチュートリアル5(インプリメンテーション編)
FC2ブログ

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

FPGAの部屋

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

スパルタン3スタータキットでのISE8.1iのチュートリアル5(インプリメンテーション編)

今度はインプリメンテーション編だ。
まずはSourcesペインのSources for:のプルダウンメニューをSynthesis/Implementに戻そう。
最初にSynthesisをしよう。
1.SourcesペインでトップのLedTestをクリックする。
2.ProcessesペインのSynthesize - XSTをダブルクリックする。
ISE81i_30_060209.png


ProcessesペインのSynthesize - XSTを展開する。View RTL Schematicをダブルクリックして論理合成後の回路を見てみよう。ここで意図した回路になっていなければ、どこかがおかしいはずである。
ISE81i_31_060209.png


箱をダブルクリックすると下の階層が開いていく。SourcesのLedTestを展開して下位モジュールをクリックすると右の回路図で該当の回路モジュールが赤で示される。これで目的の回路になっているかどうかを確認する。
ISE81i_32_060209.png


目的の回路が出来ていれば、回路図ファイルを閉じて元に戻そう。今度はUCFを作成する。初めにタイミング制約を作ろう。
スパルタン3スタータキットの水晶発信器は50MHzなので周期は20nsになる。このクロック周期で動作するように制約を書ける。タイミング制約はProcessesペインのUser Constraintsを展開してCreate Timing Constrainsをダブルクリックする。
UCFを作ってプロジェクトに入れるというダイアログが出るからYesボタンをクリックする。
ISE81i_33_060209.png


Constraints Editorが起動する。真ん中のペインのclkの行のPeriod内をダブルクリックする。Clock Periodを入力するダイアログが開く。クロックは50MHz, 20nsなのでSpecify TimeのTime:に20 nsを入力。デューテー比は50%なのでTime HIGH:を50%にする。OKボタンをクリックする。
ISE81i_35_060210.png


Periodフィールドに”"20ns HIGH 50%"の制約が入る。
ISE81i_34_060209.png


Constraint EditorでFileメニューからSaveを選んででセーブ。そうするとSourcesペインの一番下にLedTest.ucfファイルがいるのがわかると思う。
ISE81i_36_060210.png


出来上がったLedTest.ucfを見てみよう。ProcessesペインのUser Constraintsの下のEdit Constraints (Text)をダブルクリックすると右にテキストのUCFファイルが表示される。それは下のようなものだ。

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


ISE81i_37_060210.png


今度はPACEでピンをアサインしよう。とりあえず作らなければいけないUCFを下に示す。上の2行はすでにConstraint Editorで作成済みだ。
UCFはピンの配置や動作周波数の指定、遅延の指定など制約を記述するファイルでXilinxのFPGAを使う際には必須のファイルだ。Constraint EditorもPACEもUCFを作成できるグラフィカルなツールである。

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

#PACE: Start of Constraints generated by PACE

#PACE: Start of PACE I/O Pin Assignments
NET "btn<3>" LOC = "L14" ;
NET "btn<0>" LOC = "M13";
NET "clk" LOC = "T9" ;
NET "AN_n<3>" LOC = "E13";
NET "AN_n<2>" LOC = "F14";
NET "AN_n<1>" LOC = "G14";
NET "AN_n<0>" LOC = "D14";
NET "DP_n" LOC = "P16";
NET "G_n" LOC = "N16";
NET "F_n" LOC = "F13";
NET "E_n" LOC = "R16";
NET "D_n" LOC = "P15";
NET "C_n" LOC = "N15";
NET "B_n" LOC = "G13";
NET "A_n" LOC = "E14";


最初が#で始まる行はコメントになる。
最初の”NET "clk" TNM_NET = "clk"; TIMESPEC "TS_clk" = PERIOD "clk" 20 ns HIGH 50 %;”はclkにPERIOD制約をかけていて、最大遅延20nsにしろということである。
次からの”NET "btn<3>" LOC = "L14" ;”はbtn<3>という信号をスパルタン3FPGAのL14番ピンにマップしろということである。これをそのままコピペしても良いのだが、PACEで作ってみる。途中までPACEでやってみて、あきたら残りをLedTest.ucfにコピペでも良い。
それではPACEを立ち上げてみよう。ProcessesペインのUser Constraintsの下のAssign Package Pinsをダブルクリックする。
ISE81i_38_060210.png


右側のウインドウの下のPackage Viewタブをクリックする。パッケージが表示される。左側のDesign Object List - I/O Pinsウインドウの一番左の青四角を右側のウインドウのパッケージの指定されたピンにドラックアンドドロップする。例えば上の表で言うとbtn<3>はL14ピンである。L14にドラックアンドドロップするとそのピンの色が青に変わる。
ISE81i_39_060210.png


この色も変えることが出来る。詳しくは”PACEの使い方2”を見てほしい。
FileメニューからSaveすると最初にBus Delimiterを聞いてくるのでXSTだったら最初のXST Default: <>ラジオボタンをクリックして、OKボタンをクリックする。
ISE81i_40_060210.png


ぜんぷピン番号を入れてセーブすると上の表のようなUCFが出来る。これは間違えないようにしてほしい。ボードが壊れる可能性もあると思う。(私は良くやっているがまだ壊れたことはない)出来たらPACEを終了する。
注意としては、btnは3~0までVHDLファイルではあるが、実際使っているのは3と0だけなので、2と1をPACEでアサインするとエラーになる。
これで準備は出来たので、インプリメンテーションを全部してみよう。
ProcessesペインのGenerate Programming Fileをダブルクリックすると、デザインをインプリメントしてスパルタン3にダウンロードするコンフィギュレーションデータまで作ってくれる。
真ん中のペインのDesign Overviewを見るといろんな情報が一覧できるようだ。これはISE7までには無かった便利な機能だ。例えばTiming Constraintsをクリックすると、20nsの制約に対して実際は5.864nsの最大遅延のようだ。これは約170MHzで動作できることになる。
ISE81i_41_060210.png


これでインプリメンテーション編を終わりにします。次はFPGAへのコンフィギュレーション編だ。
再三言っているがどんなことでも良いからコメントをよろしくお願いします。
何か一人相撲のような気がしてきた。
  1. 2006年02月09日 19:18 |
  2. FPGAリテラシー及びチュートリアル
  3. | トラックバック:0
  4. | コメント:1

コメント

FPGAの補足

操作手順が理解できて助かる
  1. 2013/04/30(火) 13:47:32 |
  2. URL |
  3. 村上 直之 #yZu5XL2Q
  4. [ 編集 ]

コメントの投稿


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

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