added memory test for VHDL config

This commit is contained in:
Markus Fröschle
2016-06-04 21:16:01 +00:00
parent 5edc91aa9f
commit eb7009ccfc
3 changed files with 37 additions and 17 deletions

View File

@@ -31,5 +31,5 @@ extern int sprintf(char *str, const char *format, ...);
extern void display_progress(void); extern void display_progress(void);
extern void hexdump(uint8_t buffer[], int size); extern void hexdump(volatile uint8_t buffer[], int size);
#endif /* _BAS_PRINTF_H_ */ #endif /* _BAS_PRINTF_H_ */

View File

@@ -417,27 +417,28 @@ void display_progress()
xputchar('\r'); xputchar('\r');
} }
void hexdump(uint8_t buffer[], int size) void hexdump(volatile uint8_t buffer[], int size)
{ {
int i; int i;
int line = 0; int line = 0;
uint8_t *bp = buffer; volatile uint8_t *bp = buffer;
while (bp < buffer + size) { while (bp < buffer + size) {
uint8_t *lbp = bp; volatile uint8_t *lbp = bp;
xprintf("%08x ", line); xprintf("%08x ", line);
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
uint8_t c = *lbp++;
if (bp + i > buffer + size) { if (bp + i > buffer + size) {
break; break;
} }
xprintf("%02x ", (uint8_t) *lbp++); xprintf("%02x ", c);
} }
lbp = bp; lbp = bp;
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
int8_t c = *lbp++; volatile int8_t c = *lbp++;
if (bp + i > buffer + size) { if (bp + i > buffer + size) {
break; break;

View File

@@ -122,6 +122,7 @@ static void init_video_ddr(void) {
void do_tests(void) void do_tests(void)
{ {
uint32_t version; uint32_t version;
uint32_t buffer[64];
xprintf("initialize Firebee video PLL\r\n"); xprintf("initialize Firebee video PLL\r\n");
init_pll(); init_pll();
@@ -138,20 +139,38 @@ void do_tests(void)
xprintf("try to access Firebee FPGA memory\r\n"); xprintf("try to access Firebee FPGA memory\r\n");
xprintf("read\r\n");
start = MCF_SLT0_SCNT;
hexdump((uint8_t *) _VRAM, 64);
end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000;
xprintf("finished (took %f seconds).\r\n", time / 1000.0);
xprintf("write\r\n"); xprintf("write\r\n");
start = MCF_SLT0_SCNT; start = MCF_SLT0_SCNT;
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
{ {
((uint8_t *) _VRAM)[i] = (uint32_t) i; ((volatile uint8_t *) _VRAM)[i] = (uint32_t) i;
} }
xprintf("read\r\n");
start = MCF_SLT0_SCNT;
xprintf("byte read\r\n");
for (i = 0; i < 64; i++)
((uint8_t *) buffer)[i] = * ((uint8_t *) _VRAM) + i;
hexdump((volatile uint8_t *) buffer, 64);
xprintf("word read\r\n");
for (i = 0; i < 64 / sizeof(uint16_t); i++)
((uint16_t *) buffer)[i] = * ((uint16_t *) _VRAM) + i;
hexdump((volatile uint8_t *) buffer, 64);
xprintf("longword read\r\n");
for (i = 0; i < 64 / sizeof(uint32_t); i++)
((uint32_t *) buffer)[i] = *((uint32_t *) _VRAM) + i;
hexdump((volatile uint8_t *) buffer, 64);
end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000;
xprintf("finished (took %f seconds).\r\n", time / 1000.0);
end = MCF_SLT0_SCNT; end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000; time = (start - end) / (SYSCLK / 1000) / 1000;
@@ -159,7 +178,7 @@ void do_tests(void)
xprintf("read\r\n"); xprintf("read\r\n");
start = MCF_SLT0_SCNT; start = MCF_SLT0_SCNT;
hexdump((uint8_t *) _VRAM, 64); hexdump((volatile uint8_t *) _VRAM, 64);
end = MCF_SLT0_SCNT; end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000; time = (start - end) / (SYSCLK / 1000) / 1000;
@@ -233,7 +252,7 @@ void wait_for_jtag(void)
/* begin of tests */ /* begin of tests */
while (1) do_tests(); do_tests();
xprintf("wait a little to let things settle...\r\n"); xprintf("wait a little to let things settle...\r\n");
for (i = 0; i < 100000L; i++); for (i = 0; i < 100000L; i++);