Vengineerの妄想

人生を妄想しています。

Zynqのqemu (その4)


Zynqのqemu (その3)の続きです。

まずはメモリ関連(DRAM, On-chip memoryとか)は、次のような関数で各種設定を行います。
 104     /* DDR remapped to address zero.  */
 105     memory_region_init_ram(ext_ram, "zynq.ext_ram", ram_size);
 106     vmstate_register_ram_global(ext_ram);
 107     memory_region_add_subregion(address_space_mem, 0, ext_ram);
 108
 109     /* 256K of on-chip memory */
 110     memory_region_init_ram(ocm_ram, "zynq.ocm_ram", 256 << 10);
 111     vmstate_register_ram_global(ocm_ram);
 112     memory_region_add_subregion(address_space_mem, 0xFFFC0000, ocm_ram);

各メモリに対して、次の3つのことを行っています。
   1). memory_region_init_ram関数でメモリのサイズを設定する。
   2). vmstat_register_ram_global関数で登録する。
   3). memory_region_add_subregion関数で開始アドレスを設定する。

DDRメモリに対しては、アドレス(0x0)からram_size。
On-chip memoryに対しては、アドレス(0xFFFC0000)から256KB。

'ext_ram, ocm_ram,address_space_mem変数'mmは、MemoryRegionへのポインタになっています。
 58     MemoryRegion *address_space_mem = get_system_memory();
 59     MemoryRegion *ext_ram = g_new(MemoryRegion, 1);
 60     MemoryRegion *ocm_ram = g_new(MemoryRegion, 1);

次回は、I/O(レジスタ)の設定について見ていきます。。

検証、Verification、FPGA