[Suzaku:01165] Re: SUZAKU-VでPLBペリフェラルの作り方(レジスタの使い方)

Hiroki Takahashi email@hidden
2008年 5月 13日 (火) 01:45:13 JST


高橋です。

川岡様、勝村様ご指摘ありがとうございます。
遅くなりましたが一応解決(?)いたいしましたのでご報告いたします。

もう一度何がやりたかったかを申しますと、自作のコアをSUZAKUのデフォルトに追加し、PLBバスを通じてコア
に4ビットの信号を送ることでLEDを光らせるということでした。

LEDが光らなかった原因はやはりレジスタの読み込み部分にあり、user_logic.vhdで4ビットとしてslv_reg0(4
to7)を読み込んでいたのをslv_reg0(28 to 31)と変更することでLEDにアクセスできるようになりました。
ただし、この場合もEDKで作ったアプリケーションから直接書き込もうとすると反応せず、一旦BBootからLinux
を起動して、デバイスノードを通じて書き込むと光るという状況です。

どちらにしても、ベースアドレスに書き込んだ時にPLBバスのどのビットから埋まっていくのかを正しく理解し
ていないのが問題なのだと思います。

そもそも、最初にslv_reg0(4 to 7)から読み込もうとしていたのは、スターターキットにもあるスロットマシン
(sz410-92-add_slot-20080327)のソースを参考にしたためなのですが、再度見返してみてもやはりベースアドレ
スへの書き込みはslv_reg0(4 to 7)から取ってきているようように見えます。
というのも、slv_reg0(4 to 7)は7セグメントLED1用の信号seg_in1につながっており、
7セグメントLEDへの書き込みはslot.cで、

#define WRITE_SEG7(no,v) (*(volatile u8 *)(SLOT_BASE_ADDR + (no)) = (v))

とマクロ定義されているように読めるからなのですが。。

もともと、LinuxからFPGAを制御することを考えていたので、とりあえず書き込みはできるようになって、いま
の状況でも結果オーライなのですが、仕組みの理解という面では腑に落ちない部分が残ります。。




suzaku メーリングリストの案内