[Suzaku:02026] Re: XPS-SIV00 の Base&High Address の変更について
email@hidden
2010年 12月 1日 (水) 16:53:07 JST
吉武です.
溝渕さんのご指摘通り,arch/ppc/platforms/4xx/xparameters/xparameters_sz410-siv.h
に修正を加えて
いませんでした.修正後,表示されるようになりました.
ありがとうございます.
--- mizo <email@hidden> wrote:
> 溝渕です。
>
> email@hidden wrote:
> > 九州工業大学の吉武と申します.
> >
> > 今回,IPコアのBase,High
> Addressの変更について質問させていただきました.
> >
> > 現在,研究でSUZAKU(SZ410)+AV
> BoardとそのサンプルプログラムXPS-SIV00を
> >
> 使い,カメラからの画像取得→二値化→ラベリング→重心計算を行うプログラ
ム
> > を作成しています.
> >
> > これら一連の流れはすべてHDL側で行って,その各データをレジスタ
> >
> (v_register.vhd)に書き込み,それらの値をLinux側のdemo-av中で読み取り,
> > PCのブラウザに表示させています.
> >
> > 多くのデータをやり取りするので,EDKにおいてXPS-SIV00のBase,High
> Address
> > を現状の0xF0FF4200~0xF0FF43FF(size=512)から
> > 0xF0FF4000~0xF0FF43FF(size=1K)に変更して
> >
> > Clean Hardware → Clean Software → Generate Netlist → Generate
> > Bitstream →Build All User Applications → Update Bitstream →
> binに
> > 変更 → hermitで書き込み
> >
> >
> という順でやってみたのですが,新しく追加したアドレスに書き込んだ部分は
> >
> 表示されず,元々表示できていた値まで表示されないという状態になってしま
い
> > ました.
> >
> > HDL側のuser_logic.vhdとxps_siv00.vhdのBase,High
> Address部分に変更を加え
> > たのですが,linux側には変更を加えていません.
> >
> Linux側にも変更が必要なのでしょうか?ならば変更するファイルの場所などを
教
> > えていただきたいのですが・・・
>
> xparameters.hの置き換えが必要ですが行なっていますか?置き換えるべきファ
> イルは、
> arch/ppc/platforms/4xx/xparameters/xparameters_sz410-siv.h
> です。
>
> これを行なわなければ、sivのHigh Addressの変更が有効になりません。
>
> ここで定義している値は、
> arch/ppc/platforms/4xx/suzaku-v.c
> のsiv_resources[]に代入されます。
>
> siv_resources[]は、platform_deviceのresourceで、
> drivers/video/siv.c内の
> platform_get_resource()
> で取得しています。
>
> > 以下に値を習得できていたときのサンプルへの追加ソースを示します.
> >
> > HDL側xps_siv00
> >
> > ・v_register.vhd
> >
> > CNT_H_IN : in std_logic_vector(0 to 31);
> > CNT_V_IN : in std_logic_vector(0 to 31);
> > CNT_W_IN : in std_logic_vector(0 to 31)
> >
> > if Bus2IP_Addr(0 to 31) = C_BASEADDR + x"130" then --Add Reg
> 1
> > IP2Bus_Data <= CNT_H_IN; ←送りたい値
> > end if;
> > if Bus2IP_Addr(0 to 31) = C_BASEADDR + x"160" then --Add Reg
> 2
> > IP2Bus_Data <= CNT_V_IN;
> > end if;
> > if Bus2IP_Addr(0 to 31) = C_BASEADDR + x"190" then --Add Reg
> 3
> > IP2Bus_Data <= CNT_W_IN;
> > end if;
> >
> > Linux側atmark-dist
>
> 以下atmark-distではなく、linux-kernelへの修正ですよね?
↑その通りです!!
> > ・suzaku_siv.h
> >
> > struct cog_param{ // use IOCTL
> > unsigned long cog_h; // Center of gravity -> horizontal
> > unsigned long cog_v; // Center of gravity -> vertical
> > unsigned long cog_w; // white
> > };
> >
> > #define FBIO_COG_H _IOWR('V', 0x14, struct cog_param *)
> > #define FBIO_COG_V _IOWR('V', 0x15, struct cog_param *)
> > #define FBIO_COG_W _IOWR('V', 0x16, struct cog_param *)
> >
> > ・siv.c
> >
> > #define REG_SIV_COG_H (siv_addr + 0x130)
> > #define REG_SIV_COG_V (siv_addr + 0x160)
> > #define REG_SIV_COG_W (siv_addr + 0x190)
> ←ここら辺が設定して値が返
> > ってくるMAXの値です.
> > + 0x200 などにすると値が返ってきません.
>
> siv_addr +
> 0x200はFPGAで定義していますか?定義していないのであれば値が
> 返ってこないのは正しい挙動のように感じます。
↑0x200の時はFPGAのほうも変更していました.わかりにくい例ですいませんでし
た.
> > siv_ctlrのbase~high Addressまでの値が0x1FFだったの
> > で増やせば使えるのかなと思い現在変更を試みて
> > いるところです.関係ないのでしょうか?
>
> これを増やすのが、xparameters.hですね。
>
> 以下は問題無さそうです。
>
> 以上です。
>
> > 関数siv_ioctl内
> >
> > struct cog_param cog_param;
> >
> > case FBIO_COG_H:
> > copy_from_user(&cog_param, (void *)arg, sizeof(cog_param));
> > cog_param.cog_h =in_be32(REG_SIV_COG_H);
> > copy_to_user((void *)arg, &cog_param, sizeof(cog_param));
> > return 0;
> > case FBIO_COG_V:
> > copy_from_user(&cog_param, (void *)arg, sizeof(cog_param));
> > cog_param.cog_v = in_be32(REG_SIV_COG_V);
> > copy_to_user((void *)arg, &cog_param, sizeof(cog_param));
> > return 0;
> > case FBIO_COG_W:
> > copy_from_user(&cog_param, (void *)arg, sizeof(cog_param));
> > cog_param.cog_w = in_be32(REG_SIV_COG_W);
> > copy_to_user((void *)arg, &cog_param, sizeof(cog_param));
> > return 0;
> >
> > ・demo-av.c
> >
> > if (fd >= 0) {
> > ioctl(fd, FBIO_COG_H, &cog_param);
> > ioctl(fd, FBIO_COG_V, &cog_param);
> > ioctl(fd, FBIO_COG_W, &cog_param);
> > }
> >
> > sprintf(buf, "H:%ld V:%ld W:%ld", cog_param.cog_h,
> cog_param.cog_v,
> > cog_param.cog_w);
> > printf("<center>%s</center>\n", buf);
> >
> > COGとはCenter Of Gravity(重心)のことで,H,V,Wが表示したい値です.
> > 大雑把に書いてしまってすいません.
> >
> >
> FPGAについてはスターターキットなどをかじりましたが,完全に理解したとは
い
> > いがたく,
> >
> 初心者並の知識です.長々と書いてしまいましたが,解決案があればご教授お
願
> > いします.
>
> _______________________________________________
> suzaku mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/suzaku
>
--------------------------------------
Learn more about HIV/AIDS - Red Ribbon Campaign 2010
http://pr.mail.yahoo.co.jp/redribbon/
suzaku メーリングリストの案内