FC2カウンター FPGAの部屋 PlanAhead12.4でCreate New Projectしてみる2(論理合成、インプリメント)
FC2ブログ

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

FPGAの部屋

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

PlanAhead12.4でCreate New Projectしてみる2(論理合成、インプリメント)

PlanAhead12.4でCreate New Projectしてみる1(プロジェクトを作るまで)”の続き。
途中まで、”PlanAhead12.4でCharDispCtler のNSLコードのデバック”の記事をコピペします。

さて前回で、プロジェクトが完成したが、UCFファイルは生成しただけで、まだピンの配置や動作周波数を設定してない。PlanAheadのプロジェクトからどうやってConstraints Editorやピン配置用の設定画面(これは、PlanAheadでやるのだが。。。)を出すかが良くわからない?

とりあえず、論理合成はUCFが必要ないので、論理合成をしてみよう。FlowメニューからSynthesis Settings を選択するとSynthesis Settings ダイアログが表示される。
PlanAhead124_13_110212.png

Options の... ボタンをクリックして、オプションを見てみる。
PlanAhead124_14_110212.png

-netlist_hierarchy はrebuiltになっている。
ダイアログをすべて閉じて、Project ManagerのSynthesizeをクリックして、論理合成を行う。
PlanAhead124_15_110211.png

Top Module Nameを尋ねるダイアログがでる。トップモジュールの名前。Top_wDCMを入れて、OKボタンをクリックする。
PlanAhead124_16_110211.png

論理合成が終了して、Synthesis Completed ダイアログが表示される。取り敢えず、レポートをみるため、View Reportsのラジオボタンをクリックして、OKボタンをクリックする。(追記:Synthesis Completed ダイアログで、Open Netlist Designを選ぶとI/Oピンの位置が設定できました。詳しくは最後の追記を参照ください)
PlanAhead124_22_110211.png

Project Manager の下のウインドウにReportsウインドウが追加される。ReportsウインドウのSynthesisの下のXST Reportsをダブルクリックするとリポートが表示される。Warnningが強調表示されることもないようだ。テキストのレポートファイルを表示している感じだ。
PlanAhead124_23_110211.png

Project Summaryには、Resourcesの使用状況がグラフで示されている。これは見やすい。
次に左のウインドウのImplementをクリックしてImplementを行う。ここでUCFが空だが、取り敢えずImplementを行うことにする。この時点でUCFをグラフィカルに設定する設定方法が見つからない。
PlanAhead124_24_110211.png

Implementが終了すると、Implementation Completedダイアログが開く。デフォルトのOpen Implemented Desginにラジオボタンを設定して、OKボタンをクリックする。
PlanAhead124_21_110211.png

Implemented Desginダイアログが開くので、OKボタンをクリックする。するとDesign Plannerが表示されて、FPGA内部でのリソースのアサインが見える。
PlanAhead124_25_110211.png

IO Plannerをクリックして、IOのフロアプランを行う。
まずは、p_resetをIOピンに割りつける。左のIOポートからp_resetを右のPackageウインドウのT15にドラックアンドドロップする。これは、Spartan-3A Starter Kitの押しボタンスイッチのBTN_SOUTHのIOピン番号だ。
PlanAhead124_26_110211.png

更に、下のPackage Pinウインドウで、I/O StdをLVTTLに設定する。
PlanAhead124_27_110211.png

次に、Package PinウインドウのT15で右クリックして、右クリックメニューからConfigure I/O Ports...を選択する。
PlanAhead124_28_110211.png

Configure Portsダイアログが出る。Pull Type:をNONEからPULLDOWNに変更する。OKボタンをクリックする。
PlanAhead124_29_110211.png

順次、IOピンを割り当てる。1つのIOピンをLVTTLにすると、デフォルトでLVCMOS25のピンはIOバンク電圧が違うのでドラックアンドドロップでI/Oピンを割り当てられない。そこで、ドラックアンドドロップする前に、IO電圧をLVTTLに変更する必要がある。これは先ほど同様に右上のI/O Portsウインドウ上で、右クリックして、右クリックメニューからConfigure I/O Ports...を選択して、I/O Standardを変更する。こうしたほうが良いと思う。この、I/O Portsの属性は複数のI/Oピンを選択して、変更することができる。
I/Oピンの割り当てが終了すると、Top_wDCM.ucfは以下のようになった。

NET "p_reset" IOSTANDARD = LVTTL;
NET "p_reset" PULLDOWN;
NET "m_clock" IOSTANDARD = LVCMOS33;
NET "VGA_VSYNC" DRIVE = 8;
NET "VGA_VSYNC" SLEW = FAST;
NET "VGA_VSYNC" IOSTANDARD = LVTTL;
INST "u_dcm_inst/IBUFG_inst" LOC = E12;
INST "VGA_VSYNC_OBUF" LOC = B11;
NET "p_reset" LOC = T15;
NET "VGA_VSYNC" LOC = B11;
NET "u_dcm_inst/clkin" LOC = E12;
NET "VGA_BLUE[0]" LOC = C7;
NET "VGA_BLUE[1]" LOC = D7;
NET "VGA_BLUE[2]" LOC = B9;
NET "VGA_BLUE[3]" LOC = C9;
NET "VGA_GREEN[0]" LOC = C5;
NET "VGA_GREEN[1]" LOC = D5;
NET "VGA_GREEN[2]" LOC = C6;
NET "VGA_GREEN[3]" LOC = D6;
NET "VGA_HSYNC" LOC = C11;
NET "VGA_RED[0]" LOC = A3;
NET "VGA_RED[1]" LOC = B3;
NET "VGA_RED[2]" LOC = B8;
NET "VGA_RED[3]" LOC = C8;
NET "VGA_BLUE[0]" IOSTANDARD = LVTTL;
NET "VGA_BLUE[1]" IOSTANDARD = LVTTL;
NET "VGA_BLUE[2]" IOSTANDARD = LVTTL;
NET "VGA_BLUE[3]" IOSTANDARD = LVTTL;
NET "VGA_GREEN[0]" IOSTANDARD = LVTTL;
NET "VGA_GREEN[1]" IOSTANDARD = LVTTL;
NET "VGA_GREEN[2]" IOSTANDARD = LVTTL;
NET "VGA_GREEN[3]" IOSTANDARD = LVTTL;
NET "VGA_HSYNC" IOSTANDARD = LVTTL;
NET "VGA_RED[0]" IOSTANDARD = LVTTL;
NET "VGA_RED[1]" IOSTANDARD = LVTTL;
NET "VGA_RED[2]" IOSTANDARD = LVTTL;
NET "VGA_RED[3]" IOSTANDARD = LVTTL;
NET "VGA_BLUE[0]" DRIVE = 8;
NET "VGA_BLUE[1]" DRIVE = 8;
NET "VGA_BLUE[2]" DRIVE = 8;
NET "VGA_BLUE[3]" DRIVE = 8;
NET "VGA_GREEN[0]" DRIVE = 8;
NET "VGA_GREEN[1]" DRIVE = 8;
NET "VGA_GREEN[2]" DRIVE = 8;
NET "VGA_GREEN[3]" DRIVE = 8;
NET "VGA_HSYNC" DRIVE = 8;
NET "VGA_RED[0]" DRIVE = 8;
NET "VGA_RED[1]" DRIVE = 8;
NET "VGA_RED[2]" DRIVE = 8;
NET "VGA_RED[3]" DRIVE = 8;
NET "VGA_BLUE[0]" SLEW = FAST;
NET "VGA_BLUE[1]" SLEW = FAST;
NET "VGA_BLUE[2]" SLEW = FAST;
NET "VGA_BLUE[3]" SLEW = FAST;
NET "VGA_GREEN[0]" SLEW = FAST;
NET "VGA_GREEN[1]" SLEW = FAST;
NET "VGA_GREEN[2]" SLEW = FAST;
NET "VGA_GREEN[3]" SLEW = FAST;
NET "VGA_HSYNC" SLEW = FAST;
NET "VGA_RED[0]" SLEW = FAST;
NET "VGA_RED[1]" SLEW = FAST;
NET "VGA_RED[2]" SLEW = FAST;
NET "VGA_RED[3]" SLEW = FAST;


このPlanAheadプロジェクトから、Constraints Editorの起動方法がわからなかったので、このI/Oピンの配置に、タイミング制約をテキストエディタで追加した。

もう一度左のウインドウのImplementボタンをクリックして、インプリメントを行った。その結果、制約はすべて満たされた。
PlanAhead124_30_110211.png

途中で、I/OピンをGUIで設定する方法があるのかもしれないが、よくわからなかった。今回はインプリメントしても幾らも時間がかからなかったので、インプリメントしてI/OピンをGUIで設定したが、Constraints Editorを起動したり、自分でテキストで書いてUCFを作ったほうが良いかもしれない?

(2011/02/16:追記)
論理合成の後で、I/Oピンの位置をGUIで指定することが出来ました。”PlanAhead ソフトウェア チュートリアル クイック フロー概要”の21ページを参照しました。

論理合成後のSynthesis Completed ダイアログでOpen Netlist Designラジオボタンを選択してクリックする。
PlanAhead124_31_110216.png

Netlist Designが開く。右上のNetlist Designで、I/O Plannerをクリックする。
PlanAhead124_32_110216.png

I/O PlannerでI/Oピンの位置を設定できるようになる。現在はすでにI/Oピンの位置を設定してある状態である。
PlanAhead124_33_110216.png

(もう1つ追記)
論理合成が終了した後で、FlowメニューからNetlist Designを選択しても、同様のウインドウが出てきます。

(さらに追加)
デフォルトのImplementオプションです。
PlanAhead124_34_110216.png

”PlanAhead12.4でCreate New Projectしてみる3(Program and Debug)”に続く。
  1. 2011年02月13日 04:40 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:2

コメント

ISE で、GUIから設定するのは、無理がありそうです(^^ゞ
なにか矛盾が起きますというか、起きたしw

やっぱりテキストでUCFとかを編集しないと、設計者の意図を反映しないようです
  1. 2011/02/14(月) 08:12:59 |
  2. URL |
  3. アプロ #-
  4. [ 編集 ]

PlanAheadのプロジェクトはまだ発展途上のような気がします。ISimも13で統合されるそうですし、ISE13を待ちたいと思います。
  1. 2011/02/14(月) 19:55:23 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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