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関数で開始アドレスを設定する。
'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