OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /eco32/trunk/sim
    from Rev 72 to Rev 78
    Reverse comparison

Rev 72 → Rev 78

/mmu.c
25,7 → 25,7
static Word tlbIndex;
static Word tlbEntryHi;
static Word tlbEntryLo;
static Word tlbBadAddr;
static Word mmuBadAddr;
 
 
static int assoc(Word page) {
65,7 → 65,7
}
if ((vAddr & 0x80000000) != 0 && userMode) {
/* trying to access a privileged address from user mode */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
throwException(EXC_PRV_ADDRESS);
}
if ((vAddr & 0xC0000000) == 0xC0000000) {
79,19 → 79,19
index = assoc(page);
if (index == -1) {
/* TLB miss exception */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
tlbEntryHi = page;
throwException(EXC_TLB_MISS);
}
if (!tlb[index].valid) {
/* TLB invalid exception */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
tlbEntryHi = page;
throwException(EXC_TLB_INVALID);
}
if (!tlb[index].write && writing) {
/* TLB write exception */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
tlbEntryHi = page;
throwException(EXC_TLB_WRITE);
}
107,7 → 107,7
Word mmuReadWord(Word vAddr, Bool userMode) {
if ((vAddr & 3) != 0) {
/* throw illegal address exception */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
throwException(EXC_ILL_ADDRESS);
}
return memoryReadWord(v2p(vAddr, userMode, false));
117,7 → 117,7
Half mmuReadHalf(Word vAddr, Bool userMode) {
if ((vAddr & 1) != 0) {
/* throw illegal address exception */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
throwException(EXC_ILL_ADDRESS);
}
return memoryReadHalf(v2p(vAddr, userMode, false));
132,7 → 132,7
void mmuWriteWord(Word vAddr, Word data, Bool userMode) {
if ((vAddr & 3) != 0) {
/* throw illegal address exception */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
throwException(EXC_ILL_ADDRESS);
}
memoryWriteWord(v2p(vAddr, userMode, true), data);
142,7 → 142,7
void mmuWriteHalf(Word vAddr, Half data, Bool userMode) {
if ((vAddr & 1) != 0) {
/* throw illegal address exception */
tlbBadAddr = vAddr;
mmuBadAddr = vAddr;
throwException(EXC_ILL_ADDRESS);
}
memoryWriteHalf(v2p(vAddr, userMode, true), data);
185,12 → 185,12
 
 
Word mmuGetBadAddr(void) {
return tlbBadAddr;
return mmuBadAddr;
}
 
 
void mmuSetBadAddr(Word value) {
tlbBadAddr = value;
mmuBadAddr = value;
}
 
 
294,7 → 294,7
tlbIndex = rand() & TLB_MASK;
tlbEntryHi = rand() & PAGE_MASK;
tlbEntryLo = rand() & (PAGE_MASK | TLB_WRITE | TLB_VALID);
tlbBadAddr = rand();
mmuBadAddr = rand();
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.