続・OpenCoresのSATAコントローラで遊んでみる

OpenCoresのSATAコントローラで遊んでみた」から早2ヶ月…
他のことに時間を割いていて特に進捗はなかったのですが,
最近Spartan-6上にSATAコントローラを実装しようとしています.

OpenCoresのSATAコントローラのPHY部分はVirtex-6のGTXを使うように実装されています.GTXを制御するコードは,元々,Virtex-5のGTPを使ったSATA PHYのサンプルxapp870をベースにしたとコメントに書いてあります.

今回は,Spartan-6上にSATAコントローラを実装したいので,OpenCoresのPHYコードかxapp870のどちらかを,ちょちょいと移植すればいいと思った…のが先週の半ば.

Virtex-6のGTX,Virtex-5のGTP,Spartan-6のGTPのマニュアルを並べてみながら移植しようとしたのですが,細かい箇所がいろいろと違っていたり,サンプルのVerilogコードがいまいち読み辛かったり,で,最初から作った方がいいんじゃないかという決断をくだしたのが,日曜日.

Spartan-6のGTPは,なひたふJTAG日記: 2011年4月12日 でも言及されているように,SATAのOOB用のカウンタ/検知回路を内蔵しているので,OOBコントローラでは,txcomstart/txcomtypeをぱたぱたすればOOBやりとりは,割と楽に実装できます.

タイミング制約にちょっと苦労したり,電圧の規定や設定値を調べたりしながら,OOBコントローラが完成.ついでにOpenCoresコアには実装されていないネゴシエーションロジックも実装.

前回,認識できなかったディスクのうち

  • Fujitsu MHV2040BS
  • SAMSUNG SP0411C/R

を接続してみたら,無事,SATA Gen1で認識されました.同じく前回認識しなかった,

  • Western Digital WD600BD

は,一瞬リンクがあがるのだけど,rxelecidleが’1’になってしまう.

リンク確立した後の処理は未実装だから,かな,ってことで,上位層とつなぐ作業にすすもう.

 

シェアする

  • このエントリーをはてなブックマークに追加

フォローする