FC2カウンター FPGAの部屋 FPGA内の配線を固定する
FC2ブログ

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

FPGAの部屋

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

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

コメント

コメントの投稿


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

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