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

Subversion Repositories xulalx25soc

[/] [xulalx25soc/] [trunk/] [sw/] [regdefs.cpp] - Rev 38

Go to most recent revision | Compare with Previous | Blame | View Log

////////////////////////////////////////////////////////////////////////////////
//
// Filename:	regdefs.cpp
//
// Project:	XuLA2 board
//
// Purpose:	To give human readable names to the various registers available
//		internal to the processor on the wishbone bus.  This file is
//	primarily used for name to number translation within wbregs.cpp.
//	All names for a given register are equivalent, save only that the
//	register will always be identified by its first name in any output.
//
//
// Creator:	Dan Gisselquist, Ph.D.
//		Gisselquist Technology, LLC
//
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2015, Gisselquist Technology, LLC
//
// This program is free software (firmware): you can redistribute it and/or
// modify it under the terms of  the GNU General Public License as published
// by the Free Software Foundation, either version 3 of the License, or (at
// your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.
//
// License:	GPL, v3, as defined and found on www.gnu.org,
//		http://www.gnu.org/licenses/gpl.html
//
//
////////////////////////////////////////////////////////////////////////////////
//
//
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <ctype.h>
#include "regdefs.h"
 
const	REGNAME	raw_bregs[] = {
	// { R_RESET,	"RESET"			},
	// { R_STATUS,	"STATUS"		},
	// { R_CONTROL,	"CONTROL"		},
	{ R_VERSION,	"VERSION"		},
	{ R_ICONTROL,	"ICONTROL"		},
	{ R_ICONTROL,	"INT"			},
	{ R_ICONTROL,	"PIC"			},
	{ R_ICONTROL,	"INTC"			},
	{ R_BUSERR,	"BUSERR"		},
	{ R_BUSERR,	"BUS"			},
	{ R_DATE,	"DATE"			},
	{ R_GPIO,	"GPIO"			},
	{ R_UART_CTRL,	"UARTCTRL"		},
	{ R_UART_CTRL,	"UART"			},
	{ R_PWM_INTERVAL,"PWMCTRL"		},
	{ R_PWM_INTERVAL,"PWMI"			},
	{ R_PWM_DATA,	"PWMDATA"		},
	{ R_PWM_DATA,	"PWM"			},
	{ R_PWM_DATA,	"PWMAUDIO"		},
	{ R_PWM_DATA,	"AUDIO"			},
	{ R_UART_RX,	"UART-RX"		},
	{ R_UART_RX,	"UARTRX"		},
	{ R_UART_RX,	"RX"			},
	{ R_UART_TX,	"UART-TX"		},
	{ R_UART_TX,	"UARTTX"		},
	{ R_UART_TX,	"TX"			},
	//
	{ R_SPIF_EREG,	"SPIFEREG"		},
	{ R_SPIF_EREG,	"SPIFE"			},
	{ R_SPIF_CREG,	"SPIFCONF"		},
	{ R_SPIF_CREG,	"SPIFC"			},
	{ R_SPIF_SREG,	"SPIFSTAT"		},
	{ R_SPIF_SREG,	"SPIFS"			},
	{ R_SPIF_IDREG, "SPIFID"		},
	{ R_SPIF_IDREG, "SPIFI"			},
	//
	{ R_CLOCK,	"CLOCK"			},
	{ R_CLOCK,	"TIME"			},
	{ R_TIMER,	"TIMER"			},
	{ R_STOPWATCH,	"STOPWACH"		},
	{ R_STOPWATCH,	"STOPWATCH"		},
	{ R_CKALARM,	"CKALARM"		},
	{ R_CKALARM,	"ALARM"			},
	{ R_CKSPEED,	"CKSPEED"		},
	// Scopes are defined and come and go.  Be aware, therefore, not all
	// of these scopes may be defined at the same time.
	{ R_QSCOPE,	"SCOPE"			},
	{ R_QSCOPE,	"SCOP"			},
	{ R_QSCOPED,	"SCOPDATA"		},
	{ R_QSCOPED,	"SCDATA"		},
	{ R_CFGSCOPE,	"CFGSCOPE"		},
	{ R_CFGSCOPE,	"CFGSCOP"		},
	{ R_CFGSCOPED,	"CFGSCOPD"		},
	{ R_CPUSCOPED,	"CPUSCOPD"		},
	{ R_RAMSCOPE,	"MEMSCOPE"		},
	{ R_RAMSCOPE,	"MEMSCOP"		},
	{ R_RAMSCOPED,	"MEMSCOPD"		},
	{ R_RAMSCOPE,	"RAMSCOPE"		},
	{ R_RAMSCOPE,	"RAMSCOP"		},
	{ R_RAMSCOPED,	"RAMSCOPD"		},
	{ R_CPUSCOPE,	"CPUSCOPE"		},
	{ R_CPUSCOPE,	"CPUSCOP"		},
	//
	// For working with the ICAPE interface ... if I can ever get a
	// testing environment suitable to prove that it works.
	//
	{ R_CFG_CRC,	"FPGACRC"		},
	{ R_CFG_FAR_MAJ, "FPGAFARH"		},
	{ R_CFG_FAR_MIN, "FPGAFARL"		},
	{ R_CFG_FDRI,	"FPGAFDRI"		},
	{ R_CFG_FDRO,	"FPGAFDRO"		},
	{ R_CFG_CMD,	"FPGACMD"		},
	{ R_CFG_CTL,	"FPGACTL"		},
	{ R_CFG_MASK,	"FPGAMASK"		},
	{ R_CFG_STAT,	"FPGASTAT"		},
	{ R_CFG_LOUT,	"FPGALOUT"		},
	{ R_CFG_COR1,	"FPGACOR1"		},
	{ R_CFG_COR2,	"FPGACOR2"		},
	{ R_CFG_PWRDN,	"FPGAPWRDN"		},
	{ R_CFG_FLR,	"FPGAFLR"		},
	{ R_CFG_IDCODE,	"FPGAIDCODE"		},
	{ R_CFG_CWDT,	"FPGACWDT"		},
	{ R_CFG_HCOPT,	"FPGAHCOPT"		},
	{ R_CFG_CSBO,	"FPGACSBO"		},
	{ R_CFG_GEN1,	"FPGAGEN1"		},
	{ R_CFG_GEN2,	"FPGAGEN2"		},
	{ R_CFG_GEN3,	"FPGAGEN3"		},
	{ R_CFG_GEN4,	"FPGAGEN4"		},
	{ R_CFG_GEN5,	"FPGAGEN5"		},
	{ R_CFG_MODE,	"FPGAMODE"		},
	{ R_CFG_GWE,	"FPGAGWE"		},
	{ R_CFG_GTS,	"FPGAGTS"		},
	{ R_CFG_MFWR,	"FPGAMFWR"		},
	{ R_CFG_CCLK,	"FPGACCLK"		},
	{ R_CFG_SEU,	"FPGASEU"		},
	{ R_CFG_EXP,	"FPGAEXP"		},
	{ R_CFG_RDBK,	"FPGARDBK"		},
	{ R_CFG_BOOTSTS, "BOOTSTS"		},
	{ R_CFG_EYE,	"FPGAEYE"		},
	{ R_CFG_CBC,	"FPGACBC"		},
	//
	//
	{ R_ZIPCTRL,	"ZIPCTRL"		},
	{ R_ZIPCTRL,	"ZIPC"			},
	{ R_ZIPCTRL,	"CPU"			},
	{ R_ZIPCTRL,	"CPUC"			},
	{ R_ZIPDATA,	"ZIPDATA"		},
	{ R_ZIPDATA,	"ZIPD"			},
	{ R_ZIPDATA,	"CPUD"			},
	//
	{ RAMBASE,	"MEM"			},
	{ SPIFLASH,	"FLASH"			},
	{ SDRAMBASE,	"SDRAM"			},
	{ SDRAMBASE,	"RAM"			}
};
 
#define	RAW_NREGS	(sizeof(raw_bregs)/sizeof(bregs[0]))
 
const	REGNAME	*bregs = raw_bregs;
const	int	NREGS = RAW_NREGS;
 
unsigned	addrdecode(const char *v) {
	if (isalpha(v[0])) {
		for(int i=0; i<NREGS; i++)
			if (strcasecmp(v, bregs[i].m_name)==0)
				return bregs[i].m_addr;
		fprintf(stderr, "Unknown register: %s\n", v);
		exit(-2);
	} else
		return strtoul(v, NULL, 0); 
}
 
const	char *addrname(const unsigned v) {
	for(int i=0; i<NREGS; i++)
		if (bregs[i].m_addr == v)
			return bregs[i].m_name;
	return NULL;
}
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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