FC2カウンター FPGAの部屋 MIG

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

FPGAの部屋

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

Spartan-3AとVirtex-5のMIG (Memory Interface Generator)

Spartan-3AのMIGのユーザー・インターフェースは、FIFOが入っていないような感じで、タイミングを満たすように作るのが面倒だ。対して、Virtex-5のMIGのユーザー・インターフェースは、FIFOを使用していてインターフェースするのが簡単になっている。
自作DDR2 SDRAMコントローラのユーザー・インターフェースは、Virtex-5のMIGのように、FIFOを使用していて、ほとんど同じプロトコルになっている。Spartan-3AのMIGも同様のプロトコルだったら、CMOSカメラ・ディスプレイ回路で自作IPと置き換えて確かめてみようと思ったが、IOパッドを固定するところで、エラーが出てしまった。更に、プロトコルも違ってるので、ラッパー回路を作る必要があるので、諦めることにした。
現在動作している自作DDR2 SDRAMのIPがあるので良しとした。一応、MIGの使い方はひと通りやってみることができた。Virtex-5のMIGは使おうと思っている。

これで、MIGの勉強はとりあえず終了とする。

  1. 2011年05月20日 21:50 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

XUPV5-LX110T Development SystemでMIGを試す4(Virtex-5のMIGの動作)

XUPV5-LX110T Development SystemでMIGを試す3(ISimでシミュレーション)”の続き。
前回、DDR2 SDRAMのテストベンチにdefineして、ISimでのシミュレーションがうまくいった。今回は、Virtex-5のユーザー回路とのインターフェースについて探ってみたい。

XUPV5-LX110Tの使用しているDDR2 SDRAMだが、SO-DIMMを使用している。Micron社製でMT4HTF3264HY-256MB(PDF)だ。DDR2 SDRAMチップはMT47H32M16(PDF)が使われているようだ。このDDR2 SDRAMチップは16ビット幅なので、Rowアドレス13ビット、Columnアドレス10ビット、Bankアドレス2ビットの計25ビットのアドレスを持っている。
Memory Interface Solutions UserGuideの380ページのTable 9-8: DDR2 SDRAM Controller User Interface Signalsのapp_af_adr[30:0]に説明があるが、Virtex-5のMIGのユーザー回路から与えるアドレスの割り当ては、Bank + Row + Column addressとなっている。至極まっとうな割り当てだと思うが、マルチバンク対応のコントローラをCPUで使用する場合には、データの局所性という観点からRow + Bank + Column の方が良いかもしれない。add_af_addrは31ビット幅あるが、今回のアドレス幅は25ビットである。

Memory Interface Solutions UserGuideの372ページのFigure 9-7: DDR2 Memory Controller Block Diagram を下に引用する。
ML509_MIG_6_110519.png

DDR2 SDRAMコントローラの入出力信号はSystem Clocks and Reset, User Application, Memory Deviceの信号に分けられる。そのうちのUser Applicationの信号について見ていこう。

Virtex-5用MIGで生成されたDDR2 SDRAMコントローラのユーザー・インターフェース信号について下に記す。()内はそれぞれDDR2 SDRAMコントローラに対しての入力、出力を表す。

app_af_cmd[2:0]:(入力) 3ビットのコマンド。000がWriteコマンド、001がReadコマンド。それ以外は不正値。
app_af_addr[30:0]:(入力) 31ビットのアドレス。今回は25ビット幅、26ビット目はChip Select。アドレスの割当はBank + Row + Column address。
app_af_wren:(入力) User Address FIFOへのWrite enable。これが1の時は、app_af_cmdとapp_af_addrが有効。
aff_wdf_data[2*DQ_WIDTH-1:0]:(入力) User Input Data。DDR2 SDRAMのデータ幅の2倍のデータ幅がある。クロックの立ち上がりのデータが下位、クロックの立ち下がりのデータが上位。128ビット幅。
app_wdf_mask_data[2*DM_WIDTH–1:0]:(入力) User Data Mask。DDR2 SDRAMのマスク幅の2倍の幅がある。 クロックの立ち上がりのマスクが下位、クロックの立ち下がりのマスクが上位。16ビット幅。
app_wdf_wren:(入力) User Write FIFOのWrite enable。これが1の時は、aff_wdf_dataとapp_wdf_mask_dataが有効。
app_af_afull:(出力) Address FIFOのAlmost Full。残り12以下の時に1になる。
app_wdf_afull:(出力) User Write FIFOのAlmost Full。残り12以下の時に1になる。
rd_data_valid:(出力) rd_data_fifo_outのデータが有効であることを示す。
rd_data_fifo_out[2*DQ_WIDTH–1:0]:(出力) メモリからReadしたデータ。128ビット幅。
phy_init_done:(出力) DDR2 SDRAMコントローラの初期化とキャリブレーションが終了した。
clk0_tb:(出力) ユーザー回路へのclk0出力


Write, Read両方とも、前のトランザクションとRow + Bankアドレスが違っていたら自動的にプリチャージして、Activateコマンドを発行してくれるようだ。

・Write
Memory Interface Solutions UserGuideの384ページのFigure 9-12: DDR2 SDRAM Write Burst for Four Bursts (BL = 4)を下に引用する。
ML509_MIG_7_110519.png

Address FIFOは1024深度、User Write FIFOは512深度あるようだ。
Writeはアドレス(app_af_addr) とコマンド(app_af_cmd)を決めて、app_af_wrenを1にしてAddress FIFOに書きこむと同時に、app_wdf_wrenを1にして、D1,D0をデータ(app_wdf_data)、M1,M0をマスク(app_mask_data) に書きこむ。次のクロックでは、app_af_wrenは0に戻して、データのみを書き込む。これで4バーストモードの1つのWriteができるようになる。コマンドはWrirte(000)。

実際にシミュレーションでデータをWirteしている部分を下に示す。
ML509_MIG_9_110519.png

データをUser Write FIFOに書き始めてから、実際にDDR2 SDRAMのWriteアクセスが実行されるまでに116.25ns/3.75ns = 31クロックかかっている。4バーストWrite8個分のトランザクションが始まって、DDR2 SDRAMにWriteし終わる間のクロックは約71クロック。なお、最初の4バーストWrite4個分のバーストできたが、後の4バーストWrite4個分のバーストと2つに分けられている。これは、Rowアドレスが異なるからである。

・Read
Memory Interface Solutions UserGuideの386ページのFigure 9-14: DDR2 SDRAM Read Burst (BL = 4) for Four Bursts を下に引用する。
ML509_MIG_8_110519.png

Readの場合は、app_af_wrenを1にして、アドレス(app_af_addr) とコマンド(app_af_cmd)を決めてAddress FIFOに必要な分だけ書きこむ。DDR2 SDRAMコントローラがDDR2 SDRAMからReadしたデータは、rd_data_fifo_outにrd_data_validが1の時に出力される。

実際にシミュレーションでReadしている例を下に示す。
ML509_MIG_10_110519.png

これは、ユーザー回路からReadコマンドが発行されてから、実際にDDR2 SDRAMにReadコマンドが発行されるまでは、255.1ns / 3.75ns ≒ 68クロックである。これは、Writeの実行を待っているために遅くなってしまった。FIFOの深度が大きいと最大のレイテンシが大きくなるので注意が必要だと思う。
ユーザー回路からReadコマンドが発行されてから、最後のReadデータが到着するまでのクロック数は85クロックだった。

あまりFIFOに入れすぎると、後で入れたコマンド処理のレイテンシが増大してしまうかもしれないので、もし、それが懸念される用途に使用する場合は注意が必要だと思う。
  1. 2011年05月19日 17:37 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

Spartan-3A Starter KitでMIGを使用する8(論理シミュレーション2)

”Spartan-3A Starter KitでMIGを使用する7(論理シミュレーション1)”でMIGのuser desginのシミュレーションができた。今回はユーザー回路からどのようにMIGが制御されているかを見ていく。Memory Interface Solutions UserGuide参照。

DDR2 SDRAMの初期化のシミュレーション波形を下に示す。
MIG_74_110516.png

200us 待ってから、Burst Length=4, CAS Latncy=3, ODT Rtt = Disabled, DQS_N Enable = Enabledに設定している。シミュレーション時の初期化時のログを下に示す。

268252100.0 ps INFO: Precharge All
268372100.0 ps INFO: Load Mode 2
268372100.0 ps INFO: Load Mode 2 High Temperature Self Refresh rate = 1X (0C-85C)
268492100.0 ps INFO: Load Mode 3
268612100.0 ps INFO: Load Mode 1
268612100.0 ps INFO: Load Mode 1 DLL Enable = Enabled
268612100.0 ps INFO: Load Mode 1 Output Drive Strength = Full
268612100.0 ps INFO: Load Mode 1 ODT Rtt = Disabled
268612100.0 ps INFO: Load Mode 1 Additive Latency = 0
268612100.0 ps INFO: Load Mode 1 OCD Program = OCD Exit
268612100.0 ps INFO: Load Mode 1 DQS_N Enable = Enabled
268612100.0 ps INFO: Load Mode 1 RDQS Enable = Disabled
268612100.0 ps INFO: Load Mode 1 Output Enable = Enabled
268732100.0 ps INFO: Load Mode 0
268732100.0 ps INFO: Load Mode 0 Burst Length = 4
268732100.0 ps INFO: Load Mode 0 Burst Order = Sequential
268732100.0 ps INFO: Load Mode 0 CAS Latency = 3
268732100.0 ps INFO: Load Mode 0 Test Mode = Normal
268732100.0 ps INFO: Load Mode 0 DLL Reset = Reset DLL
268732100.0 ps INFO: Load Mode 0 Write Recovery = 3
268732100.0 ps INFO: Load Mode 0 Power Down Mode = Fast Exit
268852100.0 ps INFO: Precharge All
268972100.0 ps INFO: Refresh
269092100.0 ps INFO: Refresh
269212100.0 ps INFO: Load Mode 0
269212100.0 ps INFO: Load Mode 0 Burst Length = 4
269212100.0 ps INFO: Load Mode 0 Burst Order = Sequential
269212100.0 ps INFO: Load Mode 0 CAS Latency = 3
269212100.0 ps INFO: Load Mode 0 Test Mode = Normal
269212100.0 ps INFO: Load Mode 0 DLL Reset = Normal
269212100.0 ps INFO: Load Mode 0 Write Recovery = 3
269212100.0 ps INFO: Load Mode 0 Power Down Mode = Fast Exit
269332100.0 ps INFO: Load Mode 1
269332100.0 ps INFO: Load Mode 1 DLL Enable = Enabled
269332100.0 ps INFO: Load Mode 1 Output Drive Strength = Full
269332100.0 ps INFO: Load Mode 1 ODT Rtt = Disabled
269332100.0 ps INFO: Load Mode 1 Additive Latency = 0
269332100.0 ps INFO: Load Mode 1 OCD Program = OCD Default
269332100.0 ps INFO: Load Mode 1 DQS_N Enable = Enabled
269332100.0 ps INFO: Load Mode 1 RDQS Enable = Disabled
269332100.0 ps INFO: Load Mode 1 Output Enable = Enabled
269452100.0 ps INFO: Load Mode 1
269452100.0 ps INFO: Load Mode 1 DLL Enable = Enabled
269452100.0 ps INFO: Load Mode 1 Output Drive Strength = Full
269452100.0 ps INFO: Load Mode 1 ODT Rtt = Disabled
269452100.0 ps INFO: Load Mode 1 Additive Latency = 0
269452100.0 ps INFO: Load Mode 1 OCD Program = OCD Exit
269452100.0 ps INFO: Load Mode 1 DQS_N Enable = Enabled
269452100.0 ps INFO: Load Mode 1 RDQS Enable = Disabled
269452100.0 ps INFO: Load Mode 1 Output Enable = Enabled
269452100.0 ps INFO: Initialization Sequence is complete


次にユーザー回路とのインターフェース信号を見ていく。
Spartan-3A用のMIGのデータ入力(user_input_data) は90度位相のずれたクロック(clk90_int) に同期している必要がある。その他の信号は、0度のクロック(clk_int) の立ち下がりに同期させる必要がある。また、DDR2 SDRAMからReadしたデータ(usr_output_data) や有効信号(usr_data_valid) は0度のクロック(clk_int) の立ち上がりに同期している。
Virtex-5のMIGよりユーザーインターフェースを作るのが面倒だ。コマンド入力用FIFOが付いていない感じだ。MIGのユーザーインターフェースの上にFIFOを使ったラッパーを作ったほうが良いかもしれない。

Spartan-3A用のMIGのユーザー・インターフェース信号について簡単に説明する。

clk0:位相0度のクロック
clk90:位相90度のクロック
user_command_register:Write Request(100) やRead Request(110)、NOP(000) などのコマンド。Initialize memory(010)。(clk0の立ち下がりに同期)
user_cmd_ack:MIGからコマンドをうけとれるという返事。リフレッシュなどの用事があってコマンドを受け取れない場合はアサートされない。(clk0の立ち下がりに同期)
user_input_address:アドレス入力。使いにくいことにROW+COLUMN+BANKの順番になっているので、まともに使用するためには、COLUMNとBANKのアドレスを入れ替える必要がありそう。(clk0の立ち下がりに同期)
burst_done:バーストの終了時に4バーストモードは2クロック間、8バーストモードは4クロック間アサートする。(clk0の立ち下がりに同期)
user_input_data:clk90に同期してデータを出力する(Writeのみ)。(clk90の立ち上がりに同期)
user_data_valid:user_output_dataが有効。(Readのみ)(clk90の立ち上がりに同期)
user_output_data:Readしたデータ。(Readのみ)(clk90の立ち上がりに同期)


Memory Interface Solutions UserGuideの332ページのFigure 8-10: DDR2 SDRAM Write Burst, Burst Lengths of Four and Two Burstsを下に引用する。
MIG_75_110519.png

上の図はSpartan-3A用MIGのWriteの例だ。

1.clk0の立ち下がりに同期して、ユーザー回路はWriteコマンドを発行し始める。
2.最低1クロック後にMIGは、clk0の立ち下がりに同期してuser_cmd_ackをアサートし、Writeコマンドを受け付けたことをユーザー回路に知らせる。ただし、リフレッシュ動作中でuser_cmd_ackのアサートが遅れることもある。
3.user_cmd_ackがアサートされた後のclk90の立ち上がりに同期して、ユーザー回路はuser_input_dataにWriteするデータを入力する。user_input_dataはDDR2 SDRAMのデータ幅の2倍幅となっている。4バーストモードならば、2つのデータを入力する必要がある。
4.ユーザー回路が入力するアドレス(row+column+bank address)は、user_cmd_ackがアサートされた後の3クロック間維持する。その後のバーストアドレスは2クロック維持する。(clk0の立ち下がりに同期)
5.write burstを終了させるときに、ユーザー回路はburst_doneをアサートしてMIGに知らせる。4バーストモードの時は2クロック間アサートする。
6.burst_doneのアサート後にWriteコマンドをデアサートする。(NOPコマンドに変更)
7.プリチャージをした後に、MIGはuser_cmd_ackをデアサートする。user_cmd_ackをデアサートされたら、ユーザー回路は次のコマンドを入力することができる。


実際にシミュレーションでデータをWirteしている部分を下に示す。
MIG_77_110519.png

4バーストモードで2組のデータをWriteすると、25クロックほどかかる。


次に、Memory Interface Solutions UserGuideの333ページのFigure 8-11: DDR2 SDRAM Read, Burst Lengths of Four and Two Burstsを下に引用する。
MIG_76_110519.png

上の図はSpartan-3A用MIGのReadの例だ。

1.clk0の立ち下がりに同期して、ユーザー回路はReadコマンドを発行し始める。
2.最低1クロック後にMIGは、clk0の立ち下がりに同期してuser_cmd_ackをアサートし、Readコマンドを受け付けたことをユーザー回路に知らせる。ただし、リフレッシュ動作中でuser_cmd_ackのアサートが遅れることもある。
3.ユーザー回路が入力するアドレス(row+column+bank address)は、user_cmd_ackがアサートされた後の3クロック間維持する。その後のバーストアドレスは2クロック維持する。(clk0の立ち下がりに同期)
4.user_output_dataが有効なのは、user_data_validがアサートされた時である。
5.DDR2 SDRAMのReadしたデータがuser_output_dataに出力される。user_output_dataはDDR2 SDRAMのバス幅の2倍の幅がある。DDR2 SDRAMは1クロックで2つのデータを読み書きするが、その2つのデータがuser_output_dataにSDR1クロックで出力される。4バーストモードでは、2つのデータがclk90の立ち上がりに同期して出力される。
6.read burstを終了させるときに、ユーザー回路はburst_doneをアサートしてMIGに知らせる。4バーストモードの時は2クロック間アサートする。
7.burst_doneのアサート後にReadコマンドをデアサートする。(NOPコマンドに変更)
8.プリチャージをした後に、MIGはuser_cmd_ackをデアサートする。user_cmd_ackをデアサートされたら、ユーザー回路は次のコマンドを入力することができる。大体、Readコマンドを発行してからデータが来るまで17クロックかかるようだ。


実際にシミュレーションでReadしている例を下に示す。
MIG_78_110519.png

4バーストモードで2組のデータをReadすると、データが到着し終わるまでに26.75クロックかかる。

Spartan-3AのMIGで困ったことは、user_input_addressのアドレス割り当てがrow+column+bank addressなことだ。COLUMNアドレスとBANKアドレスを入れ替えないと使いにくい。
  1. 2011年05月18日 05:50 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

Spartan-3A Starter KitでMIGを使用する7(論理シミュレーション1)

Spartan-3A Starter KitでMIGを使用する6(MIGのインプリメント状況)”でMIGをインプリメントの状況を見た。
今回は論理シミュレーションを行う。

右のProject Managerをクリックして、Behavioral Simulationを表示させる。下の図は表示させた状態。
MIG_59_110516.png

FileメニューからAdd Sources...を選択すると、Add Sourcesダイアログが開く。Add or Simulation Sourcesラジオボタンをクリックする。
MIG_60_110516.png

Add or Simulation Sourcesダイアログが開く。Add Files...ボタンをクリックする。
MIG_61_110516.png

example_design\simに移動して、そこのVerilogファイルをすべて選択して、OKボタンをクリックする。
MIG_62_110516.png

Add or Simulation Sourcesダイアログに選択したVerilogファイルがリストされる。Next>ボタンをクリックする。
MIG_63_110516.png

Add Sources Summaryダイアログが表示された。Finishボタンをクリックする。
MIG_64_110516.png

PlanAheadのProject ManagerのSourcesウインドウにSimulation-Only Sourcesが追加されている。
MIG_65_110516.png

Project Managerの中のBehavioral Simulationをクリックする。
MIG_66_110516.png

Launch Behavioral Simulation ダイアログが開く。Simulation Top Module Nameを入力する。Simulation Top Module Nameの脇の…ボタンをクリックする。
MIG_67_110516.png

するとトップモジュールを検索して、候補が出てくる。sim_tb_topを選択して、OKボタンをクリックする。
MIG_68_110516.png

Launch Behavioral SimulationダイアログのSimulation Top Module Nameにsim_tb_topが表示された。Launchボタンをクリックするとシミュレーションが始まるが、Options...ボタンをクリックして、オプション設定を見てみよう。
MIG_69_110516.png

Simulation Optionsダイアログが開く。Launch OptionsとLanguage Optionsがある。Language Optionsは”PlanAhead13.1を試してみた1(インプリメント、シミュレーション)”でdefine値を指定するのに使用したので、Launch Optionsを見てみよう。Project Navigatorのシミュレーションのプロバティと同様な設定項目がある。このままだと1000ns シミュレーションを行う。今回はデフォルトとするので、OKボタンをクリックする。
MIG_70_110516.png

Launch Behavioral Simulationダイアログに戻る。Launchボタンをクリックするとコンパイルが始まり、ISimが起動する。
MIG_71_110516.png

300us間シミュレーションを行うと、270380100.0 psで、ERROR: Activate Failure. Initialization sequence is not complete.で止まってしまった。これは、”XUPV5-LX110T Development SystemでMIGを試す3(ISimでシミュレーション)”で遭遇したのと同じエラーだ。DDR2 SDRAMモデルにdefine値を与える必要がある。
MIG_72_110516.png

example_design\simフォルダのddr2_model_parameters.vhの最初に下の記述を追加した。

`define x512Mb
`define sg3
`define x16


修正後にISimのRe-Launchボタンをクリックする。コンパイルが始まって終了する。
Consoleウインドウで、

restart; run 300us


とコマンドを入力して、300us 間シミュレーションを行う。
MIG_73_110516.png

今度は、エラー無く300us 間のシミュレーションが完了した。下の図はDDR2 SDRAMの初期化部分を拡大した。
MIG_74_110516.png
  1. 2011年05月17日 05:41 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

Spartan-3A Starter KitでMIGを使用する6(MIGのインプリメント状況)

Spartan-3A Starter KitでMIGを使用する5(インプリメント)”でMIGをインプリメントしてみた。

MIGのインプリメント状況を見てみようと思った。PlanAheadの配置図を下に示す。
MIG_54_110516.png

cal_ctlというPblockが真ん中の上にある。他のスライスはIOに沿ってまばらに配置されているようだ。DCMもDCMを外したので、実装されていない。
FPGA Editorをクロスプローブ用に立ち上げて、見てみた。この時にうまくクロスプローブ出来なかった。やり方がおかしいのだろうか?
cntrl0_ddr2_dq[0]を見てみよう。
MIG_55_110516.png
(MIGのcntrl0_ddr2_dq[0]のIOB)

IOBの出力用FFは使用されている。DDRなので、IOBのDDRレジスタを使用する必要がある。IOのトライステート制御用のFFは片側だけ使用されている。これは4つ単位でデータを出力するので、そうなるのだと思う。入力FFはスルーされている。
下に、私の自作DDR2 SDRAMコントローラのIOBを示す。
MIG_56_110516.png
(自作DDR2 SDRAMコントローラのddr2_dq[0]のIOB)

IOのトライステート制御用のFFを2つ使用している。これは、ODDR2プリミティブをインスタンスしているからだ。(自作DDR2 SDRAMコントローラのVeilog HDLコードの一部)

    ODDR2 #(
        .DDR_ALIGNMENT("NONE"),
        .SRTYPE("ASYNC")
    ) ODDR2_TRI(
        .Q(tri_out),
        .C0(clk270),
        .C1(clk90),
        .CE(tri_ddr_ce_to_io),
        .D0(tri_ddr_d0_to_io),
        .D1(tri_ddr_d1_to_io),
        .R(1'b0),
        .S(reset)
    );
    
    ODDR2 #(
        .DDR_ALIGNMENT("NONE"),
        .SRTYPE("SYNC")
    ) ODDR2_DATA(
        .Q(to_io_pad),
        .C0(clk270),
        .C1(clk90),
        .CE(data_ddr_ce_to_io),
        .D0(data_ddr_d0_to_io),
        .D1(data_ddr_d1_to_io),
        .R(1'b0),
        .S(reset)
    );
    
    IOBUF IOBUF_DQ(
        .O(dq_data_from_io),
        .IO(io_pad),
        .I(to_io_pad),
        .T(tri_out)
    );



もう一度MIGの実装に戻る。
cntrl0_ddr2_dq[0]の出力(IOパッドの入力)は、fifo_0_data_out[0]とfifo_1_data_out[0]スライスに入力されている。2つのスライスを見てみるとSLICE MでデュアルポートのRAMとして設定されていた。どちらかがクロックの立ち上がりのデータをキャプチャして、どちらかは立ち下がりのデータをキャプチャするのだと思う。これは、自作DDR2 SDRAMコントローラと同じ構成のようだ。
MIG_57_110516.png
(MIGのcntrl0_ddr2_dq[0]と次段回路の接続状況)

FPGA Editorでこの配線の遅延値を測定してみた。

driver - comp.pin "cntrl0_ddr2_dq[0].I", site.pin "AA1.I"
0.464ns - comp.pin "main_00/top0/data_path0/data_read0/fifo_1_data_out[0].BY", site.pin "SLICE_X0Y3.BY"
0.464ns - comp.pin "main_00/top0/data_path0/data_read0/fifo_0_data_out[0].BY", site.pin "SLICE_X0Y2.BY"


0.464nsの低遅延配線を使用しているようだ。
自作DDR2 SDRAMコントローラでも、低遅延の配線を試行錯誤して見つけて使用している。下に接続状況を示す。なお、配線が多いので、他の配線は消してある
MIG_58_110516.png
(自作DDR2 SDRAMコントローラのddr_dq[0]と次段の接続状況)

ddr2_dq[0]からの出力は、MIGと同様にRAMに指定された2つのSLICE Mに接続されている。立ち下がりのデータキャプチャ用と立ち下がりのデータキャプチャ用だ。
FPGA Editorでこの配線の遅延値を測定した結果を下に示す。

driver - comp.pin "ddr2_dq<0>.I", site.pin "H1.I"
0.411ns - comp.pin "ddr2_sdram_cont_inst/read_write_io_inst/dout<16>.BY", site.pin "SLICE_X2Y63.BY"
0.411ns - comp.pin "ddr2_sdram_cont_inst/read_write_io_inst/dout<0>.BY", site.pin "SLICE_X2Y62.BY"


MIGも自作DDR2 SDRAMコントローラもDDR2 SDRAMのデータの受け方は同じ方法を取っているのがわかった。ただし、Readのタイミングをどのように判断しているかの解析はしていない。

MIGのインプリメントを見るのはこの辺で終了とする。次はシミュレーションしてみたい。

  1. 2011年05月16日 05:41 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

Spartan-3A Starter KitでMIGを使用する5(インプリメント)

Spartan-3A Starter KitでMIGを使用する4(UCFを変更してロード)”の続き。

Spartan-3A Starter KitでMIGを使用する4(UCFを変更してロード)”で、UCFをSpartan-3A Starter Kitに合わせて変更し、MIGでロードしてみたが、IOパッドの位置がだめなようでエラーが出てしまった。やはり、Spartan-3A Starter KitのDDR2 SDRAMコントローラは、自分で作るかリファレンス・デザインを使うしか方法がないようだ。
今回は、MIGで生成したDDR2 SDRAMコントローラのexample desginをインプリメントしてみようと思う。

IPとして生成したMIGはそのままではインプリメント出来ないので、一旦削除した。
FileメニューからAdd Source...を選択すると、Add Sourcesダイアログが現れた。Add or Create Design Sourcesのラジオボタンをクリックして(デフォルト)、Next >ボタンをクリックする。
MIG_37_110514.png

Add or Create Design SourcesダイアログでAdd Filesボタンをクリックする。
MIG_38_110514.png

MIG_test_131\Spa3AKit_MIG_test\Spa3AKit_MIG_test.srcs\sources_1\ip\mig_v3_61_4\mig_v3_61_4\example_design\rtlのexample designのVerilogソースファイルをすべて選択してOKボタンをクリックする。
MIG_39_110514.png

Add or Create Design SourcesダイアログにVerilogソースファイルが入った。Next>ボタンをクリックする。
MIG_40_110514.png

Add Sources Summaryダイアログが出るので、Finishボタンをクリックする。
MIG_41_110514.png

MIGのexample designのVerilogファイルがプロジェクトに入った。
MIG_42_110514.png

FileメニューからAdd Source...を選択すると、Add Sourcesダイアログが現れた。Add or Create Constraintsのラジオボタンを選択する。
MIG_45_110514.png

Add or Create Constraintsダイアログが開く。Add Files...をクリックする。
MIG_46_110514.png

以前と同様に、parの下のmig_v3_61_4.ucfを指定する。
MIG_47_110514.png

mig_v3_61_4.ucfが入った。Next>ボタンをクリックする。
MIG_48_110514.png

Summaryが表示される。Finishボタンをクリックする。
MIG_49_110514.png

これで、UCFファイルがプロジェクトに追加された。
次に、インプリメントするためにトップモジュールを指定する。
mig_v3_61_4.vを選択して右クリックする。右クリックメニューからSpecify Top Module...を選択する。
MIG_43_110514.png

Specify Top Moduleダイアログが表示さる。Top Module Nameをmig_v3_61_4に修正して、Scan and Add RTL Include Files とAuto Re-order Source Files にチェックを入れて、OKボタンをクリックする。
MIG_44_110514.png

ここでRTL DesignのSynthesize ボタンをクリックする。
MIG_50_110514.png

Synthesis Completedダイアログが出る。続けてImplementを行う。Implementラジオボタンを選択して(デフォルト)、OKボタンをクリックする。
MIG_51_110514.png

Implementation Completedのダイアログが開く。今回はSpartan-3A Starter Kitにピン配置が合っていないので、ビットファイルを作っても使えない。デフォルトのままOKボタンをクリックした。
MIG_52_110514.png

インプリメント結果が表示された。
MIG_53_110514.png

なお、ISE13.1のPlanAheadを使用したビットファイルの生成、実機へのダウンロードは、”PlanAhead13.1を試してみた2(実機にダウンロード)”を参照のこと。
  1. 2011年05月14日 22:45 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

Spartan-3A Starter KitでMIGを使用する4(UCFを変更してロード)

Spartan-3A Starter KitでMIGを使用する3(ボードの信号では生成できなかった)”の続き。

twitterで@osamu_takeuchiさんからMIGのピン配置変更についてのやり方を教えていただいたので、もう一度やってみることにした。参照サイト、”電気回路/HDL/Xilinx Memory Interface Generator (MIG) による DDR2 SDRAM のアクセス

それによると、MIGで一度生成したIPのUCFを希望のピン配置に書き換えて、MIG Output OptionダイアログでVerify UCF and Update Design and UCFのラジオボタンを選択するそうだ。
MIG_17_110509.png

早速やってみることにした。mig_3_61_4.ucfのLOC制約をSpartan-3A Starter Kitのピン配置に合わせて書き換えた。変更した部分を下に示す。

NET "cntrl0_ddr2_ck[0]" LOC = "M1" ; #bank 3
NET "cntrl0_ddr2_ck_n[0]" LOC = "M2" ; #bank 3
NET "cntrl0_ddr2_dm[0]" LOC = "J3" ; #bank 3
NET "cntrl0_ddr2_dm[1]" LOC = "E3" ; #bank 3
NET "cntrl0_ddr2_a[12]" LOC = "Y2" ; #bank 3
NET "cntrl0_ddr2_a[11]" LOC = "V1" ; #bank 3
NET "cntrl0_ddr2_a[10]" LOC = "T3" ; #bank 3
NET "cntrl0_ddr2_a[9]" LOC = "W2" ; #bank 3
NET "cntrl0_ddr2_a[8]" LOC = "W1" ; #bank 3
NET "cntrl0_ddr2_a[7]" LOC = "Y1" ; #bank 3
NET "cntrl0_ddr2_a[6]" LOC = "U1" ; #bank 3
NET "cntrl0_ddr2_a[5]" LOC = "U4" ; #bank 3
NET "cntrl0_ddr2_a[4]" LOC = "U2" ; #bank 3
NET "cntrl0_ddr2_a[3]" LOC = "U3" ; #bank 3
NET "cntrl0_ddr2_a[2]" LOC = "R1" ; #bank 3
NET "cntrl0_ddr2_a[1]" LOC = "T4" ; #bank 3
NET "cntrl0_ddr2_a[0]" LOC = "R2" ; #bank 3
NET "cntrl0_ddr2_ba[1]" LOC = "R3" ; #bank 3
NET "cntrl0_ddr2_ba[0]" LOC = "P3" ; #bank 3
NET "cntrl0_ddr2_cke" LOC = "N3" ; #bank 3
NET "cntrl0_ddr2_cs_n" LOC = "M5" ; #bank 3
NET "cntrl0_ddr2_ras_n" LOC = "M3" ; #bank 3
NET "cntrl0_ddr2_cas_n" LOC = "M4" ; #bank 3
NET "cntrl0_ddr2_we_n" LOC = "N4" ; #bank 3
NET "cntrl0_ddr2_odt" LOC = "P1" ; #bank 3
NET "cntrl0_ddr2_dq[15]" LOC = "F3"; #bank 3
NET "cntrl0_ddr2_dq[14]" LOC = "G3"; #bank 3
NET "cntrl0_ddr2_dq[13]" LOC = "F1"; #bank 3
NET "cntrl0_ddr2_dq[12]" LOC = "H5"; #bank 3
NET "cntrl0_ddr2_dq[11]" LOC = "H6"; #bank 3
NET "cntrl0_ddr2_dq[10]" LOC = "G1"; #bank 3
NET "cntrl0_ddr2_dq[9]" LOC = "G4"; #bank 3
NET "cntrl0_ddr2_dq[8]" LOC = "F2"; #bank 3
NET "cntrl0_ddr2_dq[7]" LOC = "H2"; #bank 3
NET "cntrl0_ddr2_dq[6]" LOC = "K4"; #bank 3
NET "cntrl0_ddr2_dq[5]" LOC = "L1"; #bank 3
NET "cntrl0_ddr2_dq[4]" LOC = "L5"; #bank 3
NET "cntrl0_ddr2_dq[3]" LOC = "L3"; #bank 3
NET "cntrl0_ddr2_dq[2]" LOC = "K1"; #bank 3
NET "cntrl0_ddr2_dq[1]" LOC = "K5"; #bank 3
NET "cntrl0_ddr2_dq[0]" LOC = "H1"; #bank 3
NET "cntrl0_ddr2_dqs[1]" LOC = "K6"; #bank 3
NET "cntrl0_ddr2_dqs_n[1]" LOC = "J5"; #bank 3
NET "cntrl0_ddr2_dqs[0]" LOC = "K3"; #bank 3
NET "cntrl0_ddr2_dqs_n[0]" LOC = "K2"; #bank 3
NET "cntrl0_rst_dqs_div_in" LOC = "H4"; #bank 3
NET "cntrl0_rst_dqs_div_out" LOC = "H3"; #bank 3
NET "reset_in_n" LOC = "T15" ; #bank 3


Project ManagerのIPのmig_3_61_4をダブルクリックして、MIGのダイアログを出す。
MIG Output OptionダイアログでVerify UCF and Update Design and UCFのラジオボタンを選択する。
MIG_33_110512.png

Load mig prj and UCF FileでLoad UCF Fileに書き換えたUCFファイを指定する。
MIG_34_110512.png

Summaryが出た。
MIG_35_110512.png

次に進んだら、大量にワーニングやエラーが出てしまった。
MIG_36_110512.png

エラーが出ているのでFinishボタンをクリックすると終了してしまった。

ワーニングやエラーの内容を示す。

Verification Report

Generated by MIG Version 3.6.1 on 金 5 13 05:35:49 2011
Reading design libraries of xc3s700a-fg484... successful !

/*******************************************************/
/* Controller 0
/*******************************************************/
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/five-slice_x3y27" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/four-slice_x2y26" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/one-slice_x2y27" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/six-slice_x3y26" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/three-slice_x2y26" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/two-slice_x2y27" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/five-slice_x1y27" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/four-slice_x0y26" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/one-slice_x0y27" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/six-slice_x1y26" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/three-slice_x0y26" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/two-slice_x0y27" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/five-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/four-f" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/one-f" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/six-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/three-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col0/two-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/five-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/four-f" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/one-f" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/six-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/three-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[1].dqs_delay_col1/two-g" for dqs_delayed column of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit0-slice_x1y22" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit1-slice_x1y22" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit2-slice_x1y23" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_0_wr_addr_inst/bit3-slice_x1y23" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit0-slice_x3y22" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit1-slice_x3y22" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit2-slice_x3y23" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[1].fifo_1_wr_addr_inst/bit3-slice_x3y23" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_en[1].fifo_0_wr_en_inst-slice_x1y25" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_en[1].fifo_1_wr_en_inst-slice_x3y25" for Fifo write address or write enable of dqs[1] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit7-slice_x2y30" allocated for dq[15] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit7-slice_x2y31" allocated for dq[15] is invalid.
ERROR: Trying to allocate dq[15] to a wrong PAD in an IO tile in the bank 3. All the even dq
signals (e.g. dq[0],dq[2]) should be allocated to the top pad and odd dq signals to
the bottom pad in an IO tile in the bank 3 for the selected Spartan device. Use FPGA
editor to know the PAD info of any pin.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit6-slice_x0y30" allocated for dq[14] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit6-slice_x0y31" allocated for dq[14] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit5-slice_x2y28" allocated for dq[13] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit5-slice_x2y29" allocated for dq[13] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit4-slice_x0y28" allocated for dq[12] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit4-slice_x0y29" allocated for dq[12] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit3-slice_x2y22" allocated for dq[11] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit3-slice_x2y23" allocated for dq[11] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit2-slice_x0y20" allocated for dq[10] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit2-slice_x0y21" allocated for dq[10] is invalid.
ERROR: Trying to allocate dq[10] to a wrong PAD in an IO tile in the bank 3. All the even dq
signals (e.g. dq[0],dq[2]) should be allocated to the top pad and odd dq signals to
the bottom pad in an IO tile in the bank 3 for the selected Spartan device. Use FPGA
editor to know the PAD info of any pin.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit1-slice_x2y20" allocated for dq[9] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit1-slice_x2y21" allocated for dq[9] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe/fifo_bit0-slice_x0y18" allocated for dq[8] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[1].strobe_n/fifo_bit0-slice_x0y19" allocated for dq[8] is invalid.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/five-slice_x3y7" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/four-slice_x2y6" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/one-slice_x2y7" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/six-slice_x3y6" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/three-slice_x2y6" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/two-slice_x2y7" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/five-slice_x1y7" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/four-slice_x0y6" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/one-slice_x0y7" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/six-slice_x1y6" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/three-slice_x0y6" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay location constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/two-slice_x0y7" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/five-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/four-f" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/one-f" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/six-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/three-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/two-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/five-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/four-f" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/one-f" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/six-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/three-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
LUT delay BEL constraint "top_00/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col1/two-g" for dqs_delayed column of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit0-slice_x1y2" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit1-slice_x1y2" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit2-slice_x1y3" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_0_wr_addr_inst/bit3-slice_x1y3" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit0-slice_x3y2" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit1-slice_x3y2" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit2-slice_x3y3" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_addr[0].fifo_1_wr_addr_inst/bit3-slice_x3y3" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_en[0].fifo_0_wr_en_inst-slice_x1y5" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/gen_wr_en[0].fifo_1_wr_en_inst-slice_x3y5" for Fifo write address or write enable of dqs[0] is invalid or missing.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit7-slice_x2y12" allocated for dq[7] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit7-slice_x2y13" allocated for dq[7] is invalid.
ERROR: Trying to allocate dq[7] to a wrong PAD in an IO tile in the bank 3. All the even dq
signals (e.g. dq[0],dq[2]) should be allocated to the top pad and odd dq signals to
the bottom pad in an IO tile in the bank 3 for the selected Spartan device. Use FPGA
editor to know the PAD info of any pin.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit6-slice_x0y12" allocated for dq[6] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit6-slice_x0y13" allocated for dq[6] is invalid.
ERROR: Trying to allocate dq[6] to a wrong PAD in an IO tile in the bank 3. All the even dq
signals (e.g. dq[0],dq[2]) should be allocated to the top pad and odd dq signals to
the bottom pad in an IO tile in the bank 3 for the selected Spartan device. Use FPGA
editor to know the PAD info of any pin.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit5-slice_x2y10" allocated for dq[5] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit5-slice_x2y11" allocated for dq[5] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit4-slice_x0y10" allocated for dq[4] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit4-slice_x0y11" allocated for dq[4] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit3-slice_x2y4" allocated for dq[3] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit3-slice_x2y5" allocated for dq[3] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit2-slice_x0y4" allocated for dq[2] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit2-slice_x0y5" allocated for dq[2] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit1-slice_x2y2" allocated for dq[1] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit1-slice_x2y3" allocated for dq[1] is invalid.
ERROR: Trying to allocate dq[1] to a wrong PAD in an IO tile in the bank 3. All the even dq
signals (e.g. dq[0],dq[2]) should be allocated to the top pad and odd dq signals to
the bottom pad in an IO tile in the bank 3 for the selected Spartan device. Use FPGA
editor to know the PAD info of any pin.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe/fifo_bit0-slice_x0y2" allocated for dq[0] is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit0-slice_x0y3" allocated for dq[0] is invalid.
ERROR: Trying to allocate dq[0] to a wrong PAD in an IO tile in the bank 3. All the even dq
signals (e.g. dq[0],dq[2]) should be allocated to the top pad and odd dq signals to
the bottom pad in an IO tile in the bank 3 for the selected Spartan device. Use FPGA
editor to know the PAD info of any pin.
WARNING: The signal reset_in_n is missing or allocated to invalid I/O.
WARNING:
Slice location constraint for delayed rst_dqs_div_out signal is not correct.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/five-slice_x1y14" for delayed rst_dqs_div_in signal is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/four-slice_x1y14" for delayed rst_dqs_div_in signal is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/one-slice_x0y15" for delayed rst_dqs_div_in signal is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/six-slice_x1y15" for delayed rst_dqs_div_in signal is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/three-slice_x0y15" for delayed rst_dqs_div_in signal is invalid.
WARNING:
Slice location constraint "top_00/data_path0/data_read_controller0/rst_dqs_div_delayed/two-slice_x0y14" for delayed rst_dqs_div_in signal is invalid.

Verification completed. Found the following warnings.
Number of warnings in the input UCF = 108.

Verification completed. Found the following errors.
Number of errors in the input UCF = 6.


dqのパッド位置が悪いと言われている気がするが、もう少し、LOCだけのUCFとかでやってみようと思う。
  1. 2011年05月13日 05:48 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0
»