Virtual Memory Support

This commit is contained in:
Jaewon Lee 2024-06-16 19:05:38 -04:00
parent 62673b4b72
commit 862997fc94
6 changed files with 275 additions and 192 deletions

View file

@ -270,6 +270,8 @@ bool Emulator::barrier(uint32_t bar_id, uint32_t count, uint32_t wid) {
#ifdef VM_ENABLE
void Emulator::icache_read(void *data, uint64_t addr, uint32_t size) {
DPH(3, "*** icache_read 0x" << std::hex << addr << ", size = 0x " << size);
try
{
mmu_.read(data, addr, size, ACCESS_TYPE::LOAD);
@ -288,6 +290,7 @@ void Emulator::icache_read(void *data, uint64_t addr, uint32_t size) {
#ifdef VM_ENABLE
void Emulator::set_satp(uint32_t satp) {
DPH(3, "set satp 0x" << std::hex << satp << " in emulator module\n");
set_csr(VX_CSR_SATP,satp,0,0);
}
#endif
@ -327,6 +330,7 @@ void Emulator::dcache_read(void *data, uint64_t addr, uint32_t size) {
#ifdef VM_ENABLE
void Emulator::dcache_write(const void* data, uint64_t addr, uint32_t size) {
DP(1, "*** dcache_write 0x" << std::hex << addr << ", size = 0x " << size);
auto type = get_addr_type(addr);
if (addr >= uint64_t(IO_COUT_ADDR)
&& addr < (uint64_t(IO_COUT_ADDR) + IO_COUT_SIZE)) {