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

Tech と Culture

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

LEONシステム トップ検証 GR-XC3S-1500(Xilinx)編

これまでの設定で、トップモジュールRTL leon3mp.vhd が完成しました。
今回はIPをつなぎ変えたりはしていませんが、IPを付けたり外したりした場合にはその接続の検証が必要になります。
それをコンフィグレーション終了後に行います。

ここではGHDLを用いてRTLシミュレーションを行います
(GHDLはgccのテクノロジを利用した、オープンソースVHDLシミュレーションです)。
同じディレクトリにある、testbench.vhd が、トップモジュールをインスタンスしているトップ検証のためのVHDLソースコードです。SDRAMのRTLや、テスト用のモジュールgrtestmod のRTLも接続されています。

同じディレクトリにsdram.srecというファイルがあります。これは、LEONシステムの基本チェックを行うプログラムをコンパイルして作ったSDRAMの内容としてインクルードされるバイナリです。
このバイナリの内容は、同じディレクトリの systest.c と、LEON/grlib-gpl-1.0.22-b4095/software/leon3 のディレクトリを見ると理解することができます。とりあえず、LinuxをブートしてLEONシステムを使用してみるためには内容を理解する必要はありません。

まず、以下の実行の前にGHDLにパスが通っていることを確認しておきます。

make ghdl

GHDLのメッセージが大量に出力されて終了します。
同じディレクトリに testbench という実行ファイルが生成されました。
このバイナリを実行することでGHDLシミュレーションが始まります。

./testbench

と実行するとRTLシミュレーションが開始され、以下のようなメッセージが出力されて終了します。


LEON3 GR-XC3S-1500 Demonstration design
GRLIB Version 1.0.22, build 4095
Target technology: spartan3 , memory library: spartan3
ahbctrl: AHB arbiter/multiplexer rev 1
ahbctrl: Common I/O area at 0xfff00000, 1 Mbyte
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: Gaisler Research ATA controller
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: slv3: Gaisler Research ATA controller
ahbctrl: I/O port at 0xfffa0000, size 256 byte
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: slv13: Gaisler Research GR Ethernet MAC
apbctrl: I/O ports at 0x80000d00, size 256 byte
clkgen_spartan3e: spartan3/e sdram/pci clock generator, version 1
clkgen_spartan3e: Frequency 50000 KHz, DCM divisor 4/5
leon3_0: LEON3 SPARC V8 processor rev 0
leon3_0: icache 2*4 kbyte, dcache 1*4 kbyte
dsu3_2: LEON3 Debug support unit + AHB Trace Buffer, 2 kbytes
ahbuart7: AHB Debug UART rev 0
ahbjtag AHB Debug JTAG rev 0
apbuart1: Generic UART rev 1, fifo 4, irq 2
irqmp: Multi-processor Interrupt Controller rev 3, #cpu 1, eirq 0
gptimer3: GR Timer Unit rev 0, 8-bit scaler, 2 32-bit timers, irq 8
apbps2_4: APB PS2 interface rev 2, irq 4
apbps2_5: APB PS2 interface rev 2, irq 5
svgactrl6: SVGA controller rev 0, FIFO length: 384, FIFO part length: 128, FIFO address bits: 9
grgpio8: 18-bit GPIO Unit rev 0
greth4: 10/100 Mbit Ethernet MAC rev 04, EDCL 1, buffer 2 kbyte 128 txfifo, irq 13
atactrl3: ATA controller rev 0, irq 10

*** GRLIB system test starting ****

Leon3 SPARC V8 Processor
CPU#0 register file
CPU#0 multiplier
CPU#0 radix-2 divider
CPU#0 cache system
CPU#0 memory management unit
Multi-processor Interrupt Ctrl.
Modular Timer Unit
timer 1
timer 2
chain mode
Generic UART
GR Ethernet MAC
Test passed, halting with IU error mode

testbench.vhd:375:6:@2357898ns:(assertion failure): *** IU in error mode, simulation halted ***
./testbench:error: assertion failed
./testbench:error: simulation failed

最後にエラーという出力が出ていますが、これで正常終了です。
最初にコンフィグレーションしたLEONシステムの構成が出力され、その後SDRAMに乗っているソフトウェアに従い、様々なモジュールのチェックされて行きます。
独立したプロセッサシステムをソフトウェアバイナリによって検証するという方法を取っているため、シミュレーションを終了させる方法がIUを無理やりエラーモードに入れるしかありません。
よって、 testbench.vhd:375:6:@2357898ns:(assertion failure): *** IU in error mode, simulation halted ***と表示された場合は無事シミュレーションが終了したということです。

これでトップ検証が終了しました。
次はFPGAのマッピングです。