[Suzaku:01166] Re: SUZAKU-VでPLBペリフェラルの作り方(レジスタの使い方)
kawaoka
email@hidden
2008年 5月 13日 (火) 09:55:52 JST
川岡です。
もしかすると、BBootではcharでアクセスしていて、Linuxではlongでアクセスしているのではと思われます。
そしてsz410-92-add_slotは8bitレジスタで、新しく作られたコアは32bitのレジスタなのかと思われます。
とっても、ややこしい話なのですが。。。
・ビックエンディアン
・ipifのレジスタビット幅
のからこのようなことが起きると思っています。
まずは、ビックエンディアンについてです。
32bitレジスタの場合、アドレスとバイトレーンの関係は下記のようになります。
| reg(0 to 7) | reg(8 to 15)| reg(16 to 23)| reg(24 to 31)
------------+-------------+-------------+--------------+--------------
charの場合 | BASE_ADDR+0| BASE_ADDR+1 | BASE_ADDR+2 | BASE_ADDR+3
------------+---------------------------+-----------------------------
shortの場合 | BASE_ADDR+0 | BASE_ADDR+2
------------+---------------------------------------------------------
longの場合 | BASE_ADDR+0
よって、charとlongでアクセスした場合のレジスタの操作できるbit位置が変わります。
たとえば
(*(volatile char *)(BASE_ADDR) = (0x1))
とするとreg(7)のbitが「1」になり
(*(volatile long *)(BASE_ADDR) = (0x1))
とするとreg(31)のbitが「1」になります。
次にipifレジスタビット幅についてです。
8bitレジスタとしてコアを自動生成すると、
そもそも8bitしかないので、charでもshortでもlongでも常にBASE_ADDR+0でreg(0 to 7)がアクセスできるように
ipifがバスを切り替えてくれているではと思われます。
よって、
(*(volatile char *)(BASE_ADDR) = (0x1))
(*(volatile long *)(BASE_ADDR) = (0x1))
もreg(7)が操作されるではと思っています。
Hiroki Takahashi さんは書きました:
> 高橋です。
>
> 川岡様、勝村様ご指摘ありがとうございます。
> 遅くなりましたが一応解決(?)いたいしましたのでご報告いたします。
>
> もう一度何がやりたかったかを申しますと、自作のコアを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 mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/suzaku
>
suzaku メーリングリストの案内