2009年11月14日土曜日

Spartan-6 FPGA SP601 評価キットその後(奮闘中)



 Xilinx Spartan-6 FPGA SP601 評価キットを使い始めて、2ヶ月が経過しました。慣れぬISE等の開発ツールに もがきながらも、なんとか、容(かたち)が整ってきた状況です。

1.概要
  [[信号 100Hzから4MHz]] ==> FPGA(Spartan-6) ==> LPC2388(波形表示)

 1)FPGA(Spartan-6)処理
  ・ADCドライブ 
    エンコーダ波形1~50MHzをADCに出力、8ビットのデータをADCがら取り込む。
  ・データバッファリング
    ADCから取り込んだデータをRAMに書き込む。
  ・データの送出
    RAM上のデータをマイコンLPC2388に送信する。
 2)マイコン(LPC2388)処理
  ・ ユーザーIF
    FPGAにサンプリング開始/停止の指示、取得データの表示、FPGA動作パラメータの調整

2.動作確認
 1)検出波形 上限
    信号50KHzを50MSPS(1000Pont/Cycle)で取り込むことを確認。
 2)データ表示
    チャート表示および、数値表示 
 3)動作スピード切替。
    1,2,5,10,20,50 MSPSのサンプリング速度の切り替えを確認

3.不具合
 1)取り込んだデータにノイズが多い。
 2)トリガがかからない。
 3)連続取り込み時、中断できない。

4.課題
 1)エラーデータ
   取り込みデータをFPGAのRAMに書き込む前に、マイナス値を排除するモジュールを一時的に組み入れるが、マイコンに送られたデータにマイナス値が存在する。
   (ADCモジュールは単電源構成なので、負電圧は計測されないはず。)
 2)低速クロック(エンコーダ)信号を作成できない。
   IP(CORE Generator..)/Clocking Wizard で クロック入力 200MHzDifferential clock...の場合、4MHzが出力周波数の下限でした。 カウンタを利用してその周波数を1/2,1/4,1/8,,,で分周して低速のクロック信号は生成できるが、直接周波数指定でクロック信号を生成することが現状で出来ない。
 3)ISE等開発環境の不慣れ 
  ・always @(posedge IO_PinA)
    PlanAheadでピンを割当行う場合、T9:CLK1_M2C_P等のクロック属性を持つピンを割り当てないといけない。
  ・ucfファイルエラー
    ucfファイルに知らぬ間に、「INST "xxx_IBUF" LOC = x99;」のエントリが出来、エラーを起こす。
  ・Verilog HDL 除算
    除算では、除数が2の累乗に限定される。
  ・IP(CORE Generator..)で作成したモジュールの組み込み。
    修正が大変面倒
  ・プロジェクトのコピー
    コピーしたプロジェクトでピン割り当て(Planahead)が失敗
       EEROR: launching PlanAhead failed: can't execute "C\Windows\system32\cmd.exe":ディレクトリ名が無効です。 
 4)Memory Controller Block が難しい。
   Spartan-6で期待した最大の機能 Memory Controller Block ですがなかなか使えずにいます。
   IP(CORE Generator..)/MIG (Memory Interface Generator) で所定のパラメータを指定してサンプルプロジェクトを作成するまでは良いのですが、さてこれをどのように使うのかよくわからない。使えそうな部分(memc3_wrapper等)を切り出して、一時的にプロジェクトを作成して、試行錯誤を行おうとするが、プログラムファイル生成でこけます。1クロック毎に指定したビット幅で、指定したアドレスのメモリを読み書きしたいだけなのですが、ポートが6個もあったり。コマンドIFが有ったり、そのコマンド自体が不明だったりして前途多難です。門前払い状態です。現在泣く泣く128MB DDR2を棚上げして、RAMを上限近く(16KB)使い切ってなんとか誤魔化している状況です。

0 件のコメント:

コメントを投稿