FC2カウンター FPGAの部屋 FPGA Editorの使い方

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

FPGAの部屋

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

ISE10.1のFPGA EditorでIOBやSLICEのパラメータを変更

”Spartan3Aのプログラマブル遅延素子2”でFPGA EditorでIOB_DELAYの値を変更したがFPGA EditorでのDLY値の変更方法を書いておこうと思う。

まずはProject NavigatorのProcessesウインドウからImplement Design -> Place & Route -> View/Edit Routed Design (FPGA Editor) をダブルクリックし、FPGA Editorを起動する。
FPGA_Editor_IOB_1_090309.png

List1ウインドウのtestinを選択し、ピンクの四角で囲ったZoom Selectionアイコンをクリックする。
FPGA_Editor_IOB_2_090309.png

testinのIOBがズームされるので、その選択されたIOBをダブルクリックする。
FPGA_Editor_IOB_3_090309.png

Block1ウインドウが開き、IOBの内容を見ることが出来る。
FPGA_Editor_IOB_4_090309.png

それではFPGA Editorを編集可能な状態にする。いつもやっているが、FileメニューからMain Properties...を選択する。
FPGA_Editor_IOB_5_090309.png

Main Propertiesダイアログが開く。Edit Mode: を Read Write に変更する。
FPGA_Editor_IOB_6_090309.png

変更したらOKボタンをクリックする。これでFPGA Editorは編集可能なモードになった。
FPGA_Editor_IOB_7_090309.png

編集可能なモードになると背景がグレーから黒に変更されるのだが、このBlock1ウインドウはまだグレーで編集可能になっていない。これを編集するには、下の図でピンクの枠で囲ったBegin Editing アイコンをクリックする。
FPGA_Editor_IOB_8_090309.png

これで背景が黒になって、緑の枠で囲ったIO STANDRARDSやSLEW RATE、IBUF DELAY, IFD DELAYが編集可能となった。
FPGA_Editor_IOB_9_090309.png

これでIBUF DELAY の値を変更したら、FileメニューからSAVEを選択して、IOB_Delay_test.ncd ファイルに書き込む。
FPGA_Editor_IOB_10_090309.png

これでめでたく、IBUF_DELAYの値を変更した.ncd ファイルを生成することが出来た。これでISEからでも単体で起動しても、Timing Analyzerで解析すると新しいDELAY値のタイミング解析をすることが出来る。
ISEでは、Generate Programming Fileのプロセスまで終わっていたら、FPGA Editorで.ncd ファイルを変更するとGenerate Programming Fileのプロセスにはオレンジの?マークがついていると思う。Generate Programming Fileのプロセスを再実行すると、FPGA Editorで変更した内容が反映されたbit ファイルを生成することが出来る。
今回はIOBのパラメータを変更したが、SLICEのパラメータの変更も同様に出来る。
  1. 2009年03月10日 05:52 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:0

FPGA Editor video tutrial

検索していたら、youtubeでFPGA Editorのビデオ チュートリアルを見つけた。
1/3はFPGA Editorの紹介ビデオだった。私は英語は苦手だが、大体何をやっていかがわかった。大体知っていることばかりだったが、attribボタンとinfoボタンは使ったことがなかったので、新鮮だった。
2/3, 3/3は、ネットを切ったり、つなぎなおしたりなどだった、FPGA Editorでこんなことをしたくないなと思う事柄だった。できるのは知っているが、こんなことをやり始まったら、まるで自分でPlace & Routeをやる羽目になりそう。
3/3の最後でprobeの仕方を説明していた。これはこのブログでも”FPGA Editorの使い方3”で説明している。
  1. 2008年06月11日 05:42 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:4

FPGA Editorで配置と配線を割り当てる3

最初から見る場合は、FPGA Editorで配置と配線を割り当てる1をご覧ください。

いよいよ、UCFファイルに制約を書き戻そう。
Toolsメニューから Directec Routing Constraints... を選択する。
FPGA_Editor_Lock_11_071031.png

Directec Routing Constraintsダイアログが立ち上がる。
1.真ん中のConstraint File を inv_test.ucf に変更する。
2.下の Placement Constraint Type を Use Absolute Location Constraint に変更する。
3.上のほうの、line0, line1, line2, line3 をすべて選択する。
FPGA_Editor_Lock_12_071031.png

OKボタンをクリック。これで、この配置、配線のUCF制約が書き込まれた。
ISEに戻って、inv_test.ucf をプロジェクトに加えてみてみよう。このやり方は既知だと思うので書かない。知らない方はこのブログのチュートリアルなどを見てください。
無事に下のようなUCFファイルができていると思う。

// 11/01 @ 05:13:29
NET "line0"
ROUTE="{3;1;2vp30ff896;c48324d4!-1;-93904;135480;S!0;-159;0!1;1596;416!2;"
"1884;-1336!3;0;704!4;327;0;L!}";
NET "in" LOC=A28;
INST "U0" LOC=SLICE_X1Y159;
INST "U0" BEL="F";


NET "line1"
ROUTE="{3;1;2vp30ff896;23783c4a!-1;-90256;135464;S!0;1261;424!1;-1588;"
"-968!2;327;0;L!}";
INST "U0" LOC=SLICE_X1Y159;
INST "U0" BEL="F";
INST "U1" LOC=SLICE_X1Y158;
INST "U1" BEL="F";


NET "line2"
ROUTE="{3;1;2vp30ff896;6e161340!-1;-90256;135120;S!0;1261;-1192!1;-1653;"
"1093!2;232;-365;L!}";
INST "U1" LOC=SLICE_X1Y158;
INST "U1" BEL="F";
INST "U2" LOC=SLICE_X0Y159;
INST "U2" BEL="G";


NET "line3"
ROUTE="{3;1;2vp30ff896;a69c6d3e!-1;-90416;134808;S!0;-2075;-896!1;-1413;"
"840;L!}";
NET "out" LOC=G25;
INST "U2" LOC=SLICE_X0Y159;
INST "U2" BEL="G";


これで、無事にUCF制約ができたので、今まで配置、配線していたFPGA Editor を終了しよう。そのときに inv_test_map.ncd をセーブするか?と聞いてくるので、もういじることがないならば、”いいえ”ボタンをクリック。またいじりたいならば、”はい”ボタンをクリックする。
ISEで、UCFファイルをプロジェクトに追加してから、プロジェクトをImplement してみよう。その後、 FPGA Editorを起動して確かめてみよう。
FPGA_Editor_Lock_13_071031.png

その結果、Place & Route でウォーニングが出て、line3 のインスタンスが消えてしまった。これは、line2 スライスにline2, line3 の2つの論理素子が統合されてしまったからのようだ。line2 スライスの内部が下の図にある。
FPGA_Editor_Lock_14_071031.png

次に、line4 ネットはどこに行ったのかというと、最後の INV プリミティブが out のIOB内にマップされてしまっているため、IOB内部になってしまった。(ピンクの矢印)
FPGA_Editor_Lock_15_071031.png

これで終了です。
  1. 2007年11月01日 05:55 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:4

FPGA Editorで配置と配線を割り当てる2

最初から見る場合は、FPGA Editorで配置と配線を割り当てる1をご覧ください。

次に論理素子の配置だ。まずはList1ウインドウの in をクリックして、次にArray1ウインドウの A28 端子をコントロールキーを押しながらクリック。つまり、2つ同時に選択するわけだ。
FPGA_Editor_Lock_5_071031.png

次に、Toolsメニューから Place -> Manual Place を選択する。
FPGA_Editor_Lock_6_071031.png

そうすると Array1ウインドウの A28 ピンが赤くなり、List1ウインドウに in が A28 に割り当てられたことが表示される。
FPGA_Editor_Lock_7_071031.png

今度は in と接続される line1 を配置する。同様に List1ウインドウから line1 を選択し、コントロールキーを押しながら、SLICE_X1Y159 を選択する。
FPGA_Editor_Lock_8_071031.png

同様に、Toolsメニューから Place -> Manual Place を選択する。そうすると in から line1 スライスまで、配線が引かれる。
FPGA_Editor_Lock_9_071031.png

同様に、line2, line3, out をそれぞれ、SLICE_X1Y158, SLICE_X0Y159, G25 に割り当てる。結果は以下のようになるはず。
FPGA_Editor_Lock_10_071031.png

これで配置と配線は終了した。

またまた、長くなったので、FPGA Editorで配置と配線を割り当てる3に続く。
  1. 2007年10月31日 22:03 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:0

FPGA Editorで配置と配線を割り当てる1

MIXIからの流れで、FPGA Editorで配置と配線を割り当てる方法をやってみようと思う。
BUFプリミティブやINVプリミティブだけだと、Floorplannerで見てもインスタンスが見つからない。そこでFPGA Editorで配置、配線を固定する方法を試して見た。元はVirtexだったが、慣れていないのでVirtex2Pでやってみることにする。Virtexでも同様にできると思うし、実際にやってみた。
まずは、ソースはINVだけを並べていわば遅延素子。ネットにKEEP属性を加えてある。

module inv_test(in, out);
    input in;
    output out;
    wire line0, line1, line2, line3, line4;
    
    assign line0 = in;
    assign out = line4;
    
    INV U0(line1,line0); // synthesis attribute keep of line0 is true;
    INV U1(line2,line1); // synthesis attribute keep of line1 is true;
    INV U2(line3,line2); // synthesis attribute keep of line2 is true;
    INV U3(line4,line3); // synthesis attribute keep of line3 is true;

endmodule


これをXC2VP30-6FF896でプロジェクトをつくり、上の inv_test.v をプロジェクトに加える。(使用ツールはISE9.2i SP3)
FPGA_Editor_Lock_1_071031.png

Processペインの Implement Desgin を展開して、MAP を展開する。その中の Manually Place & Route (FPGA Editor) をダブルクリック。
FPGA_Editor_Lock_2_071031.png

ピンクで囲った Routes をクリックして、配線を表示して、次に緑で囲った Zoom to Box で点線で囲った範囲をズームする。左上をズームしよう。
FPGA_Editor_Lock_3_071031.png

数回ズームして、左上隅のすぐ下の4つIOBが集まっているところをズームしよう。左上のIOBの位置は A28 だ。
FPGA_Editor_Lock_4_071031.png

ここで、いつもどおりにFPGA EditorをRead/Writeモードに設定しよう。
"File" - "Main Properties..."を選択する。
FPGA_Editor_10_060318.png

Main Propertiesダイアログが立ち上がる。
FPGA_Editor_11_060318.png


"General"タブが選択されていて、その中の"Edit Mode"が"No Logic Changes"が選択されていると思うが、ここのプルダウンメニューから"Read Write"を選ぶ。これでFPGA Editorで編集が出来るようになった。
FPGA_Editor_12_060318.png


長いので分割します。
FPGA Editorで配置と配線を割り当てる2へ続く。
  1. 2007年10月31日 21:52 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:2

DCMの位相シフト量の変え方

今回はFPGA EditorでDCMの位相シフト量を変更してみよう。
DCMではFPGAの中および外に出力するクロックを生成している。その位相関係の都合が悪い場合に位相シフト量を変更したいということがある。今まではもう一度論理合成、インプリメント、BitgenをしていたがFPGA Editorで変更するとお手軽である。
まずはISEのProcessesペインからFPGA Editorを起動する。
FE_DCM_PS_change_1_080813.png

最初にFPGA EditorをRead/Writeモードに設定しよう。
"File" - "Main Properties..."を選択する。
FPGA_Editor_10_060318.png


Main Propertiesダイアログが立ち上がる。
FPGA_Editor_11_060318.png


"General"タブが選択されていて、その中の"Edit Mode"が"No Logic Changes"が選択されていると思うが、ここのプルダウンメニューから"Read Write"を選ぶ。これでFPGA Editorで編集が出来るようになった。
FPGA_Editor_12_060318.png

次にList1ウインドウで位相シフト量を変更したいDCMを選択する。
FE_DCM_PS_change_2_080813.png

FunctionボタンのうちF11を押すとそのDCMがハイライトされる。
FE_DCM_PS_change_3_080813.png

その状態で右端のeditblockボタンをクリックする。
FE_DCM_PS_change_4_080813.png

DCMのBlockウインドウが立ち上がるのでピンクの四角で囲んだ"Show/Hide Attribute"ボタンをクリックする。下に属性が示されるので位相シフト量が変えたければPHASE_SHIFTの値を変更する。変更したら青の四角で囲んだ"Save Changes and Close Window"ボタンをクリックする。そうすると変更内容がセーブされる。
FE_DCM_PS_change_5_080813.png

上のウインドウではDCMのすべて属性が設定変更できるので便利なのだ。
これでDCMの変更が出来たので"File"メニューから"Save"を選択してセーブしてFPGA Editorを終了する。
ISEのProcessesペインを見てみると"Generate Programming File"の項目がになっていると思う。
FE_DCM_PS_change_6_080813.png

"Generate Programming File"をダブルクリックして起動するとパラメータを修正したDCMになったビットファイルが出来る。
FPGA EditorからもBitGenでビットファイルを作れるが、いろいろオプションを入れるのが面倒なのでISEからビットファイルを作ったほうが簡単なようだ。事実うちのプロジェクトではFPGA EditorからもBitGenでビットファイルを作ったのだが、オプションが足りないのかうまく行かなかった。
後は以前紹介したプローブをテストピンに接続する方法でテストピンに信号を出してオシロで波形観察している。配線遅延は換算しないといけないがBGAの信号をお手軽に観察できてとても便利だ。
  1. 2006年08月13日 21:17 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:0

FPGA内の配線を固定する

以前書いた”DDR SDRAMのDQS信号でデータをサンプルする方法2”でスライスの位置を変えると配線がかなり変わってしまうということを書いた。この時にはコンポーネントを固定して配線だけはPlace & Routeにお任せした。DDR SDRAMコントローラの遅延素子の配線などは配線も固定しておかないと遅延が変わってしまうので心配である。そこでFPGA Editorで配線も固定する方法を探ってみた。
まずは例によってISEからFPGA Editorを起動する。起動したらList1ペインのプルダウンメニューから"ALL Nets"を選択する。ネットが下に出てくるので固定したいネットを選択する。この場合はSRL16Eへのクロック入力のdqs_delay3を選択する。ファンクションキーF11を押すとArray1ペインに選択したネットがハイライトされる。
Route_fix_1_060802.png

Toolsメニューから"Directed Routing Constraints..."を選択するとDirected Routing Constraintsダイアログが開く。目的のネットを検索して選択する。今はコンポーネントの位置は絶対位置で指定してあるのでルーティングだけ指定するため、下のPlacement Constrait TypeからDo not generate Placement Constraintを選択する。
Route_fix_2_060802.png

これで一番下のApplyボタンを押すとUCFファイルにルーティング情報が追加される。下のように。

NET "dqs_delay_3"
ROUTE="{3;1;2vp7ff896;ef0d7cef!-1;-62768;60008;S!0;1489;-1656!0;-4616;"
"1117!0;-1703;-3480!1;-3156;-5496!1;-6105;-603!2;1160;-1717;L!3;-2929;"
"-2391!4;-2949;1269!5;1160;-1717;L!5;1160;-1373;L!7;1336;-1041;L!7;1336;"
"-697;L!8;1160;-1717;L!8;1160;-1373;L!}";


これでルートは固定されたはずである。
今回はコンポーネントは固定しあるがUCFでセットアップ時間などの制約だけで位置を固定していない場合はUse Relative Location ConstraintかUse Absolute Location Constraintを選択してコンポーネントも指定すると良いだろう。
ここでソフトウェアマニュアルの制約ガイドを見るとDirected Routing制約は相対指定だそうなので位置相対でルーティングを指定できるそうだ。今まで絶対位置指定だと思っていた。
それを検証するためにコンポーネントの絶対位置指定を消去した。消去した制約はこれ。(ちなみに前の制約とインスタンス名が違うがこれはISE8.1iからISE8.2iに変更したら変わってしまった)

INST "delay3" LOC = "SLICE_X2Y75" ;
INST "delay2" LOC = "SLICE_X1Y75" ;
INST "delay1" LOC = "SLICE_X0Y75" ;
INST "lut_fifo_inst/DIST_FIFO_GEN[7].SRL16E_inst" LOC = "SLICE_X0Y70";
INST "lut_fifo_inst/DIST_FIFO_GEN[6].SRL16E_inst" LOC = "SLICE_X0Y70";
INST "lut_fifo_inst/DIST_FIFO_GEN[5].SRL16E_inst" LOC = "SLICE_X0Y71";
INST "lut_fifo_inst/DIST_FIFO_GEN[4].SRL16E_inst" LOC = "SLICE_X0Y71";
INST "lut_fifo_inst/DIST_FIFO_GEN[3].SRL16E_inst" LOC = "SLICE_X0Y72";
INST "lut_fifo_inst/DIST_FIFO_GEN[2].SRL16E_inst" LOC = "SLICE_X0Y72";
INST "lut_fifo_inst/DIST_FIFO_GEN[1].SRL16E_inst" LOC = "SLICE_X0Y74";
INST "lut_fifo_inst/DIST_FIFO_GEN[0].SRL16E_inst" LOC = "SLICE_X0Y74";


これをMAXDELAY制約だけにする。

NET "dqs_delay_3" MAXDELAY=0.67 ns;


これでインプリメントしたところ最大遅延が0.955nsで制約は満たされなかった。ちなみにデバイスはVirtex2pro xc2vp7-6ff896だ。入出力ポートの制約は”DDR SDRAMのDQS信号でデータをサンプルする方法2”を見てほしい。
新しいdqs_delay_3ネットのルーティングは下のとおり。最大遅延時間は0.955nsだった。
Route_fix_3_060802.png

コンポーネントまで近い位置に固定したものは最大遅延が0.655nsだったので、これよりも性能が悪い。一応これを相対位置マクロにしようとしたが出来なかった。絶対位置だったら出来るのだが。
原因がわからないのでdqs_delay_2でやってみることにした。
Route_fix_4_060802.png

これでRLOCを使った絶対位置指定をしてみる。
Toolsメニューから"Directed Routing Constraints..."を選択するとDirected Routing Constraintsダイアログが開く。目的のネットを検索して選択する。下のPlacement Constrait TypeからUse Absolute Location Constraintを選択しRLOC Styleにチェックを入れる。ApplyボタンをクリックするとRLOC_ORIGIN=X3Y148;に指定した相対位置で制約が書かれる。

NET "dqs_delay_2"
ROUTE="{3;1;2vp7ff896;74ee056b!-1;-66224;56288;S!0;-216;2177!1;-1632;"
"6712!2;1736;1404!3;112;-365;L!}";
INST "delay2" RLOC=X0Y0;
INST "delay2" RPM_GRID=GRID;
INST "delay2" RLOC_ORIGIN=X3Y148;
INST "delay2" U_SET="dqs_delay_2";
INST "delay2" BEL="F";
INST "delay3" RLOC=X0Y12;
INST "delay3" U_SET="dqs_delay_2";
INST "delay3" BEL="F";


そのUCFでもう一度インプリメントしたらそのほかの配置は変わっていたがdqs_delay_2だけは変わっていなかった。
Route_fix_5_060802.png

ここでRLOC_ORIGIN=X3Y148;をRLOC_ORIGIN=X3Y146;位にして縦にずらしてみようと思う。そうすると下に2スライスずれた。
遅延時間は以前は0.588nsで縦にずらした後は0.592nsだった。
Route_fix_6_060802.png

このようにDirected Routing制約は相対指定だということがわかった。いろいろ便利に使えそうである。
  1. 2006年08月02日 19:12 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:0
»