読者です 読者をやめる 読者になる 読者になる

Tech と Culture

テクノロジーとカルチャー

ライブラリ化 2

前々回のエントリに書いたように、きちんとAMBAに接続できた場合は、ahbctrlモジュールがコンフィグテーブルを自動でかき集めて全体のアドレス空間などを把握します。シミュレーション時にはそれぞれのベンダー名や機能名などが表示されるようにしてあります。
これまでは、VENDOR_GAISLER, UNKNOWN_DEVICE にしてましたが、きちんと表示させるように変更します(そのままでも実際のFPGAは問題なく動くのですが、勝手にVENDOR_GAISLER名乗るは良くないですねー)。

$GRLIB_HOME/lib/grlib/amba/ahbctrl.vhdの中を見れば分かりますが、iptableという変数を参照して表示させています。
その実体は、 $GRLIB_HOME/lib/grlib/amba/devices.vhd の中にあります。
こちらを変更すればOK!

まず、VENDOR_IDを空いている数字に勝手に割り当てます(いいのかな???)。
iptable1.png

次に ahbctrl.vhdで呼び出している、iptableにVENDOR_KURIを追加します。

iptable2.png

そして最後にkuri_libを作ります。

iptable3.png

これでOKです。

GHDLを実行すると無事認識してメッセージにVENDOR名やIPの機能が表示されます。

# ahbctrl: AHB arbiter/multiplexer rev 1
# ahbctrl: Common I/O area disabled
# ahbctrl: AHB masters: 6, AHB slaves: 8
# ahbctrl: Configuration area at 0xfffff000, 4 kbyte
# ahbctrl: mst0: Gaisler Research Leon3 SPARC V8 Processor
# ahbctrl: mst1: Gaisler Research AHB Debug UART
# ahbctrl: mst2: Gaisler Research JTAG Debug Link
# ahbctrl: mst3: Gaisler Research SVGA frame buffer
# ahbctrl: mst4: Gaisler Research GR Ethernet MAC
# ahbctrl: mst5: KURI YCrCb-RGB translation
# ahbctrl: slv0: European Space Agency Leon2 Memory Controller
# ahbctrl: memory at 0x00000000, size 512 Mbyte, cacheable, prefetch
# ahbctrl: memory at 0x20000000, size 512 Mbyte
# ahbctrl: memory at 0x40000000, size 1024 Mbyte, cacheable, prefetch
# ahbctrl: slv1: Gaisler Research AHB/APB Bridge
# ahbctrl: memory at 0x80000000, size 1 Mbyte
# ahbctrl: slv2: Gaisler Research Leon3 Debug Support Unit
# ahbctrl: memory at 0x90000000, size 256 Mbyte
# ahbctrl: slv4: KURI YCrCb-RGB translation
# ahbctrl: memory at 0xa0000000, size 1 Mbyte
# apbctrl: APB Bridge at 0x80000000 rev 1
# apbctrl: slv0: European Space Agency Leon2 Memory Controller
# apbctrl: I/O ports at 0x80000000, size 256 byte
# apbctrl: slv1: Gaisler Research Generic UART
# apbctrl: I/O ports at 0x80000100, size 256 byte
# apbctrl: slv2: Gaisler Research Multi-processor Interrupt Ctrl.
# apbctrl: I/O ports at 0x80000200, size 256 byte
# apbctrl: slv3: Gaisler Research Modular Timer Unit
# apbctrl: I/O ports at 0x80000300, size 256 byte
# apbctrl: slv4: Gaisler Research PS2 interface
# apbctrl: I/O ports at 0x80000400, size 256 byte
# apbctrl: slv5: Gaisler Research PS2 interface
# apbctrl: I/O ports at 0x80000500, size 256 byte
# apbctrl: slv6: Gaisler Research SVGA frame buffer
# apbctrl: I/O ports at 0x80000600, size 256 byte
# apbctrl: slv7: Gaisler Research AHB Debug UART
# apbctrl: I/O ports at 0x80000700, size 256 byte
# apbctrl: slv8: Gaisler Research General Purpose I/O port
# apbctrl: I/O ports at 0x80000800, size 256 byte
# apbctrl: slv12: KURI YCrCb-RGB translation
# apbctrl: I/O ports at 0x80000c00, size 256 byte
# apbctrl: slv13: Gaisler Research GR Ethernet MAC
# apbctrl: I/O ports at 0x80000d00, size 256 byte