「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’になってしまう.
リンク確立した後の処理は未実装だから,かな,ってことで,上位層とつなぐ作業にすすもう.
コメント