Paul Pan
7b33e4213a
1. add test soft 2. modify verilator (TODO: crossbar need to replace) 3. fix CP0: now CU0 is always 1 4. Controller: cacheop 5. Controller: fix TEN 6. mycpu_top fix CP0_i 7. fix AXI.sv 8. fix AXIReader.sv 9. fix AXIWriter.sv: getting the correct data and length 10. MU: fix cache writeback, fix mem data mux, fix writer address, fix read request
66 lines
1.2 KiB
C
66 lines
1.2 KiB
C
#include <time.h>
|
|
|
|
unsigned long _get_count()
|
|
{
|
|
unsigned long _contval;
|
|
asm volatile(
|
|
"lui $25, 0xbfb0\n\t"
|
|
"lw %0,-0x2000($25)\n\t"
|
|
:"=r"(_contval)
|
|
:
|
|
:"$25"
|
|
);
|
|
return _contval;
|
|
}
|
|
|
|
unsigned long get_count()
|
|
{
|
|
return _get_count();
|
|
}
|
|
|
|
unsigned long get_count_my()
|
|
{
|
|
unsigned long n;
|
|
asm volatile(
|
|
"mfc0 %0, $9\n\t"
|
|
:"=r"(n)
|
|
);
|
|
return n;
|
|
}
|
|
|
|
unsigned long clock_gettime(int sel,struct timespec *tmp)
|
|
{
|
|
unsigned long n = 0;
|
|
n = _get_count();
|
|
tmp->tv_nsec = n*(NSEC_PER_USEC/CPU_COUNT_PER_US)%NSEC_PER_USEC;
|
|
tmp->tv_usec = (n/CPU_COUNT_PER_US)%USEC_PER_MSEC;
|
|
tmp->tv_msec = (n/CPU_COUNT_PER_US/USEC_PER_MSEC)%MSEC_PER_SEC;
|
|
tmp->tv_sec = n/CPU_COUNT_PER_US/NSEC_PER_SEC;
|
|
printf("clock ns=%d,sec=%d\n",tmp->tv_nsec,tmp->tv_sec);
|
|
return 0;
|
|
}
|
|
|
|
unsigned long get_clock()
|
|
{
|
|
unsigned long n=0;
|
|
n=_get_count();
|
|
return n;
|
|
}
|
|
|
|
unsigned long get_ns(void)
|
|
{
|
|
unsigned long n=0;
|
|
n = _get_count();
|
|
n=n*(NSEC_PER_USEC/CPU_COUNT_PER_US);
|
|
return n;
|
|
}
|
|
|
|
|
|
unsigned long get_us(void)
|
|
{
|
|
unsigned long n=0;
|
|
n = _get_count();
|
|
n=n/CPU_COUNT_PER_US;
|
|
return n;
|
|
}
|