”Spartan3Aのプログラマブル遅延素子2” でFPGA EditorでIOB_DELAYの値を変更したがFPGA EditorでのDLY値の変更方法を書いておこうと思う。
まずはProject NavigatorのProcessesウインドウからImplement Design -> Place & Route -> View/Edit Routed Design (FPGA Editor) をダブルクリックし、FPGA Editorを起動する。
List1ウインドウのtestinを選択し、ピンクの四角で囲ったZoom Selectionアイコンをクリックする。
testinのIOBがズームされるので、その選択されたIOBをダブルクリックする。
Block1ウインドウが開き、IOBの内容を見ることが出来る。
それではFPGA Editorを編集可能な状態にする。いつもやっているが、FileメニューからMain Properties...を選択する。
Main Propertiesダイアログが開く。Edit Mode: を Read Write に変更する。
変更したらOKボタンをクリックする。これでFPGA Editorは編集可能なモードになった。
編集可能なモードになると背景がグレーから黒に変更されるのだが、このBlock1ウインドウはまだグレーで編集可能になっていない。これを編集するには、下の図でピンクの枠で囲ったBegin Editing アイコンをクリックする。
これで背景が黒になって、緑の枠で囲ったIO STANDRARDSやSLEW RATE、IBUF DELAY, IFD DELAYが編集可能となった。
これでIBUF DELAY の値を変更したら、FileメニューからSAVEを選択して、IOB_Delay_test.ncd ファイルに書き込む。
これでめでたく、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のパラメータの変更も同様に出来る。
2009年03月10日 05:52 |
FPGA Editorの使い方
| トラックバック:0
| コメント:0
検索していたら、
youtubeでFPGA Editorのビデオ チュートリアル を見つけた。
1/3はFPGA Editorの紹介ビデオだった。私は英語は苦手だが、大体何をやっていかがわかった。大体知っていることばかりだったが、attribボタンとinfoボタンは使ったことがなかったので、新鮮だった。
2/3, 3/3は、ネットを切ったり、つなぎなおしたりなどだった、FPGA Editorでこんなことをしたくないなと思う事柄だった。できるのは知っているが、こんなことをやり始まったら、まるで自分でPlace & Routeをやる羽目になりそう。
3/3の最後でprobeの仕方を説明していた。これはこのブログでも
”FPGA Editorの使い方3” で説明している。
2008年06月11日 05:42 |
FPGA Editorの使い方
| トラックバック:0
| コメント:4
最初から見る場合は、
FPGA Editorで配置と配線を割り当てる1 をご覧ください。
いよいよ、UCFファイルに制約を書き戻そう。
Toolsメニューから Directec Routing Constraints... を選択する。
Directec Routing Constraintsダイアログが立ち上がる。
1.真ん中のConstraint File を inv_test.ucf に変更する。
2.下の Placement Constraint Type を Use Absolute Location Constraint に変更する。
3.上のほうの、line0, line1, line2, line3 をすべて選択する。
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を起動して確かめてみよう。
その結果、Place & Route でウォーニングが出て、line3 のインスタンスが消えてしまった。これは、line2 スライスにline2, line3 の2つの論理素子が統合されてしまったからのようだ。line2 スライスの内部が下の図にある。
次に、line4 ネットはどこに行ったのかというと、最後の INV プリミティブが out のIOB内にマップされてしまっているため、IOB内部になってしまった。(ピンクの矢印)
これで終了です。
2007年11月01日 05:55 |
FPGA Editorの使い方
| トラックバック:0
| コメント:4
最初から見る場合は、
FPGA Editorで配置と配線を割り当てる1 をご覧ください。
次に論理素子の配置だ。まずはList1ウインドウの in をクリックして、次にArray1ウインドウの A28 端子をコントロールキーを押しながらクリック。つまり、2つ同時に選択するわけだ。
次に、Toolsメニューから Place -> Manual Place を選択する。
そうすると Array1ウインドウの A28 ピンが赤くなり、List1ウインドウに in が A28 に割り当てられたことが表示される。
今度は in と接続される line1 を配置する。同様に List1ウインドウから line1 を選択し、コントロールキーを押しながら、SLICE_X1Y159 を選択する。
同様に、Toolsメニューから Place -> Manual Place を選択する。そうすると in から line1 スライスまで、配線が引かれる。
同様に、line2, line3, out をそれぞれ、SLICE_X1Y158, SLICE_X0Y159, G25 に割り当てる。結果は以下のようになるはず。
これで配置と配線は終了した。
またまた、長くなったので、
FPGA Editorで配置と配線を割り当てる3 に続く。
2007年10月31日 22:03 |
FPGA Editorの使い方
| トラックバック:0
| コメント:0
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)
Processペインの Implement Desgin を展開して、MAP を展開する。その中の Manually Place & Route (FPGA Editor) をダブルクリック。
ピンクで囲った Routes をクリックして、配線を表示して、次に緑で囲った Zoom to Box で点線で囲った範囲をズームする。左上をズームしよう。
数回ズームして、左上隅のすぐ下の4つIOBが集まっているところをズームしよう。左上のIOBの位置は A28 だ。
ここで、いつもどおりにFPGA EditorをRead/Writeモードに設定しよう。
"File" - "Main Properties..."を選択する。
Main Propertiesダイアログが立ち上がる。
"General"タブが選択されていて、その中の"Edit Mode"が"No Logic Changes"が選択されていると思うが、ここのプルダウンメニューから"Read Write"を選ぶ。これでFPGA Editorで編集が出来るようになった。
長いので分割します。
FPGA Editorで配置と配線を割り当てる2 へ続く。
2007年10月31日 21:52 |
FPGA Editorの使い方
| トラックバック:0
| コメント:2
今回はFPGA EditorでDCMの位相シフト量を変更してみよう。
DCMではFPGAの中および外に出力するクロックを生成している。その位相関係の都合が悪い場合に位相シフト量を変更したいということがある。今まではもう一度論理合成、インプリメント、BitgenをしていたがFPGA Editorで変更するとお手軽である。
まずはISEのProcessesペインからFPGA Editorを起動する。
最初にFPGA EditorをRead/Writeモードに設定しよう。
"File" - "Main Properties..."を選択する。
Main Propertiesダイアログが立ち上がる。
"General"タブが選択されていて、その中の"Edit Mode"が"No Logic Changes"が選択されていると思うが、ここのプルダウンメニューから"Read Write"を選ぶ。これでFPGA Editorで編集が出来るようになった。
次にList1ウインドウで位相シフト量を変更したいDCMを選択する。
FunctionボタンのうちF11を押すとそのDCMがハイライトされる。
その状態で右端のeditblockボタンをクリックする。
DCMのBlockウインドウが立ち上がるので
ピンクの四角で囲んだ "Show/Hide Attribute"ボタンをクリックする。下に属性が示されるので位相シフト量が変えたければPHASE_SHIFTの値を変更する。変更したら
青の四角で囲んだ "Save Changes and Close Window"ボタンをクリックする。そうすると変更内容がセーブされる。
上のウインドウではDCMのすべて属性が設定変更できるので便利なのだ。
これでDCMの変更が出来たので"File"メニューから"Save"を選択してセーブしてFPGA Editorを終了する。
ISEのProcessesペインを見てみると"Generate Programming File"の項目が
? になっていると思う。
"Generate Programming File"をダブルクリックして起動するとパラメータを修正したDCMになったビットファイルが出来る。
FPGA EditorからもBitGenでビットファイルを作れるが、いろいろオプションを入れるのが面倒なのでISEからビットファイルを作ったほうが簡単なようだ。事実うちのプロジェクトではFPGA EditorからもBitGenでビットファイルを作ったのだが、オプションが足りないのかうまく行かなかった。
後は以前紹介した
プローブをテストピンに接続する方法 でテストピンに信号を出してオシロで波形観察している。配線遅延は換算しないといけないがBGAの信号をお手軽に観察できてとても便利だ。
2006年08月13日 21:17 |
FPGA Editorの使い方
| トラックバック:0
| コメント:0
以前書いた
”DDR SDRAMのDQS信号でデータをサンプルする方法2” でスライスの位置を変えると配線がかなり変わってしまうということを書いた。この時にはコンポーネントを固定して配線だけはPlace & Routeにお任せした。DDR SDRAMコントローラの遅延素子の配線などは配線も固定しておかないと遅延が変わってしまうので心配である。そこでFPGA Editorで配線も固定する方法を探ってみた。
まずは例によってISEからFPGA Editorを起動する。起動したらList1ペインのプルダウンメニューから"ALL Nets"を選択する。ネットが下に出てくるので固定したいネットを選択する。この場合はSRL16Eへのクロック入力のdqs_delay3を選択する。ファンクションキーF11を押すとArray1ペインに選択したネットがハイライトされる。
Toolsメニューから"Directed Routing Constraints..."を選択するとDirected Routing Constraintsダイアログが開く。目的のネットを検索して選択する。今はコンポーネントの位置は絶対位置で指定してあるのでルーティングだけ指定するため、下のPlacement Constrait TypeからDo not generate Placement Constraintを選択する。
これで一番下の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だった。
コンポーネントまで近い位置に固定したものは最大遅延が0.655nsだったので、これよりも性能が悪い。一応これを相対位置マクロにしようとしたが出来なかった。絶対位置だったら出来るのだが。
原因がわからないのでdqs_delay_2でやってみることにした。
これで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だけは変わっていなかった。
ここでRLOC_ORIGIN=X3Y148;をRLOC_ORIGIN=X3Y146;位にして縦にずらしてみようと思う。そうすると下に2スライスずれた。
遅延時間は以前は0.588nsで縦にずらした後は0.592nsだった。
このようにDirected Routing制約は相対指定だということがわかった。いろいろ便利に使えそうである。
2006年08月02日 19:12 |
FPGA Editorの使い方
| トラックバック:0
| コメント:0