⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ram_test.c

📁 此文档为采用FPGA实现的以太网MAC层
💻 C
字号:
#include "excalibur.h"#include "sys.h"void ram_loop(){	Uint8 *charptr;	Uint32 y;	while (1)	{		for (y=0,charptr = na_sram;y<na_sram_size;y++)		{			*charptr = 0;			*charptr = 0xFF;			*charptr = 0x0;			*charptr = 0x55;			*charptr = 0x0;			*charptr++ = 0xAA;		}						//printf("Checking bytes\n");						for (charptr=na_sram,y=0;y<na_sram_size;y++)		{			na_led_port->np_piodata = y >> 12;			if (*charptr != 0xAA)			{				printf("Error found (stress): Read back %X, should be 0xAA at offset %X\n",*charptr,y);				return;			}			*charptr++;			//*charptr++ = 0;					}			}}void ram_test(){	volatile Uint8 *charptr;	volatile Uint16 *intptr;	volatile Uint32 *longptr;	volatile Uint32 x;	volatile Uint32 y;		volatile Uint8 data[257];	printf("Code is executing from %X\n",nasys_program_mem);	/* Execute ram test only if executing from onchip ram */	if ((Uint32) nasys_program_mem == na_onchip_ram_base)		{		printf("Executing from onchip ram, starting ram test\n");	}	else	{		printf("Executing from SRAM, no ram test required\n");		return;	}	/***************** START RAM TESTING **********************/		//Fill up data array		printf("Filling up 257 byte data array with 0x55 0xAA 0xFF\n");	for (x=0;x<257;x++)	{		if (x == 0) data[x]=0x55;				else if (data[x-1] == 0x55) data[x]=0xAA;				else if (data[x-1] == 0xAA) data[x]=0xFF;	}					printf("Byte-wide, single-write RAM test\n");		//Writing bytes		printf("Writing bytes to RAM\n");		charptr = na_sram;		for (x=0,y=0;y<na_sram_size;y++)	{		*charptr++ = data[x++];		if (x==257) x=0;	}		printf("Checking bytes\n");		charptr = na_sram;	for (x=0,y=0;y<na_sram_size;y++,x++)	{		if (x==257) x=0;				if (data[x] != *charptr)		{			printf("Error found (byte): Read back %X, should be %X at offset %X\n",*charptr,data[x],y);			//return 0;		}				*charptr++;			}			//////////////////////////////////////////////		printf("Filling up 257 byte data array with 0xFF 0x55 0xAA\n");		for (x=0;x<257;x++)	{		if (x == 0) data[x]=0xFF;				else if (data[x-1] == 0xFF) data[x]=0x55;				else if (data[x-1] == 0xAA) data[x]=0xAA;	}				printf("Int-wide, single-write RAM test\n");		printf("Writing bytes to RAM\n");		intptr = na_sram;		for (x=0,y=0;y<na_sram_size;y+=2)	{		*intptr++ = (Uint16) data[x++];		if (x>=257) x=0;	}		printf("Checking bytes\n");		intptr = na_sram;	for (x=0,y=0;y<na_sram_size;y+=2,x++)	{		if (x>=257) x=0;				if ((Uint16) data[x] != *intptr)		{			printf("Error found (int): Read back %X, should be %X at offset %X\n",*intptr,(short int) data[x],y);			exit(0);			return;		}				*intptr++;			}			///////////////////////////////////////////////		printf("Filling up 257 byte data array with 0xAA 0xFF 0x55\n");		for (x=0;x<257;x++)	{		if (x == 0) data[x]=0xAA;				else if (data[x-1] == 0xAA) data[x]=0xFF;				else if (data[x-1] == 0xFF) data[x]=0x55;	}				printf("Long-wide, single-write RAM test\n");		printf("Writing bytes to RAM\n");		longptr = na_sram;		for (x=0,y=0;y<na_sram_size;y+=4)	{		*longptr++ = (Uint32) data[x++];		if (x>=257) x=0;	}		printf("Checking bytes\n");		longptr = na_sram;	for (x=0,y=0;y<na_sram_size;y+=4,x++)	{		if (x>=257) x=0;				if ((Uint32) data[x] != *longptr)		{			printf("Error found (long): Read back %X, should be %X at offset %X\n",*longptr,(unsigned long) data[x],y);			exit(1);		}				*longptr++;			}		/////////////////////////////////////////////////////			printf("Performing shorted address-line check\n");				printf("Clearing ram\n");	for (y=0,charptr = na_sram;y<na_sram_size;y++)	{		*charptr++ = 0;	}		printf("Writing values and checking if cleared first\n");	for (y=0,charptr = na_sram;y<na_sram_size;y++)	{		if (*charptr != 0)		{			printf("Error found (shorted): Read back %X, should be 0 at offset %X\n",*charptr,y);		}		*charptr++ = 0xFF;	}	}int main(){			ram_test();	/* Go to continuous loop */	printf("Running continuous ram test\n");	ram_loop();		return 0;		} /* end main */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -