cemu
载入中...
搜索中...
未找到
dram.h 文件参考

DRAM头文件 更多...

#include "typedef.h"

浏览源代码.

struct  DRAM_t
 DRAM 动态随机存取存储器结构体 更多...
 

宏定义

#define DRAM_SIZE   1024*1024*1 /** 1MB 大小 DRAM */
 
#define DRAM_BASE   0x80000000 /** DRAM 基址 */
 

类型定义

typedef struct DRAM_t DRAM
 DRAM 动态随机存取存储器结构体
 

函数

void dram_init (DRAM *dram)
 初始化DRAM结构体
 
void dram_alloc_data (DRAM *dram, size_t size, void *data)
 DRAM追加数据
 
void dram_write_data (DRAM *dram, size_t offset, size_t size, u64 value)
 DRAM向指定地址写入数据
 
u64 dram_load_data (DRAM *dram, size_t offset, size_t size)
 DRAM在指定地址加载数据
 
void dram_release_data (DRAM *dram, size_t size)
 DRAM释放尾部数据
 
void dram_free (DRAM *dram)
 释放DRAM
 

详细描述

DRAM头文件

作者
lancer (lance.nosp@m.rsta.nosp@m.dium@.nosp@m.163..nosp@m.com)
版本
0.1
日期
2024-01-08

DRAM 介绍

DRAM 结构

  • DRAM(动态随机存取存储器)存放所有指令与数据。 模拟器中的内存只是一个 64 位变量的数组,用于存放 64 位值。 此处我们用变量DRAM_SIZE定义内存的大小, 用变量DRAM_BASE定义内存的起始地址。
  • 内存有一个大于0x0的起始地址, 因为 RISC-V 架构有一个内存映射 I/O。 在内存映射 I/O 中,内存与 I/O 设备共享相同的地址空间。 在QEMU中,低地址用于 I/O 端口 并且 DRAM 内存起始地址为0x800000000。 因此我们将DRAM_BASE的值定为0x800000000
  • 由于内存映射 I/O,我们可以使用任何能够访问 内存的指令来执行 I/O 操作。否则,我们将需要单独 的指令和 I/O 端口的读写总线。
    +---------------+
    | Address |
    | +---------+ |
    +-------+ addr | | ROM | |
    | |--------->| +---------+ |
    | CPU | | | RAM | |
    | |<---------| +---------+ |
    +-------+ data | | I/O | |
    | +---------+ |
    | |
    +---------------+
    中央处理器结构体
    Definition cpu.h:35

DRAM 功能

  • DRAM 是系统的内存。CPU 读取数据并从内存中取得指令, 也向内存中存/写数据。因此 DRAM 有两个基本操作: 从内存中读和写入内存。
  • 定义函数dram_load()用于读取内存, 以及dram_store()用于写入内存。

函数说明

◆ dram_alloc_data()

void dram_alloc_data ( DRAM * dram,
size_t size,
void * data )

DRAM追加数据

参数
dram动态随机存取存储器
size申请大小
data数据

◆ dram_free()

void dram_free ( DRAM * dram)

释放DRAM

参数
dram动态随机存取存储器

◆ dram_init()

void dram_init ( DRAM * dram)

初始化DRAM结构体

参数
dram动态随机存取存储器

◆ dram_load_data()

u64 dram_load_data ( DRAM * dram,
size_t offset,
size_t size )

DRAM在指定地址加载数据

参数
dram动态随机存取存储器
offset偏移量
size数据大小
返回
u64 数据地址

◆ dram_release_data()

void dram_release_data ( DRAM * dram,
size_t size )

DRAM释放尾部数据

参数
dram动态随机存取存储器
size数据大小

◆ dram_write_data()

void dram_write_data ( DRAM * dram,
size_t offset,
size_t size,
u64 value )

DRAM向指定地址写入数据

参数
dram动态随机存取存储器
offset偏移量
size数据大小
value数据值