URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 72 to Rev 73
- ↔ Reverse comparison
Rev 72 → Rev 73
/trunk/or1ksim/mmu/Makefile.in
105,7 → 105,7
host_os = @host_os@ |
|
noinst_LIBRARIES = libmmu.a |
libmmu_a_SOURCES = dmmu.c |
libmmu_a_SOURCES = dmmu.c immu.c |
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs |
CONFIG_HEADER = ../config.h |
CONFIG_CLEAN_FILES = |
117,7 → 117,7
LDFLAGS = @LDFLAGS@ |
LIBS = @LIBS@ |
libmmu_a_LIBADD = |
libmmu_a_OBJECTS = dmmu.o |
libmmu_a_OBJECTS = dmmu.o immu.o |
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) |
CCLD = $(CC) |
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ |
126,9 → 126,9
|
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) |
|
TAR = tar |
TAR = gtar |
GZIP_ENV = --best |
DEP_FILES = .deps/dmmu.P |
DEP_FILES = .deps/dmmu.P .deps/immu.P |
SOURCES = $(libmmu_a_SOURCES) |
OBJECTS = $(libmmu_a_OBJECTS) |
|
215,7 → 215,7
@for file in $(DISTFILES); do \ |
d=$(srcdir); \ |
if test -d $$d/$$file; then \ |
cp -pr $$/$$file $(distdir)/$$file; \ |
cp -pr $$d/$$file $(distdir)/$$file; \ |
else \ |
test -f $(distdir)/$$file \ |
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \ |
/trunk/or1ksim/mmu/dmmu.c
33,7 → 33,7
{ |
unsigned long phyaddr = dmmu_simulate_tlb(virtaddr); |
|
printf("DMMU translate(%x) = %x\n", virtaddr, phyaddr); |
/* printf("DMMU translate(%x) = %x\n", virtaddr, phyaddr);*/ |
return phyaddr; |
} |
|
49,9 → 49,6
/* Number of usage states (2, 3, 4 etc., max is 4). */ |
#define DTLB_USTATES 2 |
|
/* Don't change. Defined by mask of PPN/VPN bits in TLB. */ |
#define MIN_PG_SIZE 1024 |
|
void dtlb_info() |
{ |
printf("Data MMU %dKB: ", DTLB_SETS * DTLB_ENTRY_SIZE * DTLB_WAYS / 1024); |
82,24 → 79,24
else |
start_set = 0; |
|
printf("\nDMMU: "); |
/* Scan set(s) and way(s). */ |
for (set = start_set; set < end_set; set++) { |
printf("\nSet %x: ", set); |
for (way = 0; way < DTLB_WAYS; way++) { |
printf(" way %d: ", way); |
printf("vpn %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_VPN)); |
printf("lru %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_LRU)); |
printf("pl1 %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_PL1)); |
printf("v %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_V)); |
printf("a %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBTR_A)); |
printf("d %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBTR_D)); |
printf("ure %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBTR_URE)); |
printf("uwe %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBTR_UWE)); |
printf("sre %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBTR_SRE)); |
printf("swe %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBTR_SWE)); |
printf("ppn %x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBTR_PPN)); |
if (way > 0) |
printf("\n"); |
printf("vpn=%x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_VPN)); |
printf("lru=%x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_LRU)); |
printf("pl1=%x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_PL1)); |
printf("v=%x ", getsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_V)); |
|
printf("a=%x ", getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_A)); |
printf("d=%x ", getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_D)); |
printf("ure=%x ", getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_URE)); |
printf("uwe=%x ", getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_UWE)); |
printf("sre=%x ", getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_SRE)); |
printf("swe=%x ", getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_SWE)); |
printf("ppn=%x ", getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_PPN)); |
} |
} |
printf("\n"); |
118,7 → 115,7
/* Which set to check out? */ |
set = (virtaddr / PAGE_SIZE) % DTLB_SETS; |
tagaddr = (virtaddr / PAGE_SIZE) / DTLB_SETS; |
vpn = virtaddr / MIN_PG_SIZE; |
vpn = virtaddr / PAGE_SIZE; |
|
/* Scan all ways and try to find a matching way. */ |
for (i = 0; i < DTLB_WAYS; i++) |
137,7 → 134,7
setsprbits(SPR_DTLBMR_BASE(i) + set, SPR_DTLBMR_LRU, getsprbits(SPR_DTLBMR_BASE(i) + set, SPR_DTLBMR_LRU) - 1); |
setsprbits(SPR_DTLBMR_BASE(way) + set, SPR_DTLBMR_LRU, DTLB_USTATES - 1); |
|
return getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_PPN) * MIN_PG_SIZE + (virtaddr % PAGE_SIZE); |
return getsprbits(SPR_DTLBTR_BASE(way) + set, SPR_DTLBTR_PPN) * PAGE_SIZE + (virtaddr % PAGE_SIZE); |
} |
else { /* No, we didn't. */ |
int minlru = DTLB_USTATES - 1; |
159,7 → 156,7
#endif |
except_handle(EXCEPT_DTLBMISS, virtaddr); |
/* if tlb refill implemented in HW */ |
/* return getsprbits(SPR_DTLBTR_BASE(minway) + set, SPR_DTLBTR_PPN) * MIN_PG_SIZE + (virtaddr % PAGE_SIZE); */ |
/* return getsprbits(SPR_DTLBTR_BASE(minway) + set, SPR_DTLBTR_PPN) * PAGE_SIZE + (virtaddr % PAGE_SIZE); */ |
return 0; |
} |
} |
/trunk/or1ksim/mmu/Makefile.am
19,5 → 19,5
# |
|
noinst_LIBRARIES = libmmu.a |
libmmu_a_SOURCES = dmmu.c |
libmmu_a_SOURCES = dmmu.c immu.c |
|