FC2カウンター FPGAの部屋 2013年03月17日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

XPSプロジェクトにカスタムAX Slave Lite IPを追加してSysfsを見る

前回、ZedBoard用Digilent LinuxのSysfsを見たが、XPSプロジェクトにカスタムAX Slave Lite IP(char_wirte_axi_master)を追加して、同様にSysfsを見るとどうなるか確かめてみた。char_wirte_axi_masterは、キャラクタ・ジェネレータROMデータをARMプロセッサからReadするAXI4 Slave Liteデバイスだ。

・XPSプロジェクトに、char_wirte_axi_masterをAdd IPして、processing_system7_0 のAXI4 Liteバスに接続した。
ISE_for_Linux_115_130316.png

・Addressタブで、0x46000000番地から64Kバイトの領域を割り当てた。
ISE_for_Linux_114_130316.png

・XPSプロジェクトで、Projectメニュー -> Clean All Generated Files を選択して、XPSが生成したファイルをすべて消去した。

・ISEに戻って、Projectメニュー -> Cleanup Project Files... を行なって、まっさらな状態で論理合成、インプリメントを行った。

・インプリメントが終了した。ビットストリームと一緒にハードウェア・デザインをSDKにエクスポートして、SDKを立ち上げた。

・SDKの全プロジェクトをClean して再ビルドを行ったところ、char_rom_axi_lite_0: char-rom-axi-lite@46000000のエントリができていた。
ISE_for_Linux_116_130317.png

・char_rom_axi_lite_0: char-rom-axi-lite@46000000のエントリだけを、~/HDL/ZedBoard/ZedBoard_OOB_Design/linux/Work/devicetree_ramdisk_mt9d111.dts に追加した。
ISE_for_Linux_117_130317.png

・”~/HDL/ZedBoard/ZedBoard_OOB_Design/linux/Work$ ~/HDL/ZedBoard/linux-digilent-master/scripts/dtc/dtc -O dtb -I dts -o devicetree_ramdisk.dtb devicetree_ramdisk_mt9d111.dts”を実行して、DTCでコンパイル下がエラーになってしまった。エラーを下に示す。

DTC: dts->dtb on file "devicetree_ramdisk_mt9d111.dts"
ERROR (duplicate_property_names): Duplicate property name ranges in /axi@0/char-rom-axi-lite@46000000
ERROR: Input tree has errors, aborting (use -f to force output)

ISE_for_Linux_118_130317.png

・最初の”ranges ;”を消去した。

        char_rom_axi_lite_0: char-rom-axi-lite@46000000 {
            #address-cells = <1>;
            #size-cells = <1>;
            compatible = "xlnx,compound";
            ranges = < 0x46000000 0x46000000 0x10000 >;
        } ;



・もう一度、DTCでコンパイルしたところコンパイルできた。
ISE_for_Linux_119_130317.png

・出来上がったdevicetree_ramdisk.dtb をSDカードにコピーして、ZedBoardに入れて立ち上げた。

・/sys/devices/axi.0 を見てみたが、0x46000000 のアドレスのデバイスはなかった。

cd sys
zynq> ls
block class devices fs module
bus dev firmware kernel power

zynq> cd devices/
zynq> ls
ARMv7 Cortex-A9 breakpoint software virtual
axi.0 platform system

zynq> cd axi.0/
zynq> ls
40400000.axidma e0002000.usb f8f02000.pl310
41600000.i2c e000a000.gpio leds.4
43000000.axivdma e000b000.eth
modalias
45000000.i2c e000d000.qspi power
70e00000.cf-adv7x11-core e0100000.sdhci
subsystem
75c00000.axi-spdif-tx f8001000.timer uevent
adv7511_hdmi_snd.3 f8005000.swdt xilinx_pcm_audio.2
char-rom-axi-lite.1 f8007000.devcfg zed_oled.5
e0001000.uart f8f01000.intc

zynq>


・他のIPには、”reg = "が書いてあるので、char_rom_axi_lite_0 に”reg = < 0x46000000 0x10000 >;”を追加した

        char_rom_axi_lite_0: char-rom-axi-lite@46000000 {
            #address-cells = <1>;
            #size-cells = <1>;
            compatible = "xlnx,compound";
            reg = < 0x46000000 0x10000 >;
            ranges = < 0x46000000 0x46000000 0x10000 >;
        } ;


・これで、DTCでコンパイルして、出来上がったdevicetree_ramdisk.dtb をSDカードにコピーして、ZedBoardに入れて立ち上げた。

・/sys/devices/axi.0 を見たところ、46000000.char-rom-axi-lite ディレクトリができた。

zynq> ls
40400000.axidma             e0100000.sdhci
41600000.i2c                f8001000.timer
43000000.axivdma            f8005000.swdt
45000000.i2c                f8007000.devcfg
46000000.char-rom-axi-lite  f8f01000.intc
70e00000.cf-adv7x11-core    f8f02000.pl310
75c00000.axi-spdif-tx       leds.3
adv7511_hdmi_snd.2
          modalias
e0001000.uart               power
e0002000.usb 
               subsystem
e000a000.gpio               uevent
e000b000.eth                xilinx_pcm_audio.1
e000d000.qspi               zed_oled.4

zynq>

  1. 2013年03月17日 07:13 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0