-
Notifications
You must be signed in to change notification settings - Fork 2
/
global.txt
121 lines (111 loc) · 3.43 KB
/
global.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
################################################################################
##
## Filename: global.txt
## {{{
## Project: AutoFPGA basic peripheral demonstration project
##
## Purpose: Capture any global configuration parameters
##
## Creator: Dan Gisselquist, Ph.D.
## Gisselquist Technology, LLC
##
################################################################################
## }}}
## Copyright (C) 2017-2021, Gisselquist Technology, LLC
## {{{
## This file is part of the AutoFPGA peripheral demonstration project.
##
## The AutoFPGA peripheral demonstration project is free software (firmware):
## you can redistribute it and/or modify it under the terms of the GNU Lesser
## General Public License as published by the Free Software Foundation, either
## version 3 of the License, or (at your option) any later version.
##
## The AutoFPGA peripheral demonstration project 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 Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with this program. (It's in the $(ROOT)/doc directory. Run make with
## no target there if the PDF file isn't present.) If not, see
## <http://www.gnu.org/licenses/> for a copy.
## }}}
## License: LGPL, v3, as defined and found on www.gnu.org,
## {{{
## http://www.gnu.org/licenses/lgpl.html
##
################################################################################
##
## }}}
@LEGAL=../auto-data/legalgen.txt
@PROJECT=AutoFPGA basic peripheral demonstration project
#
# @KEYS.TRIMLIST is a list of all string keys that need to be trimmed (have
# spaces removed from either side) before being used
# @KEYS.INTLIST is a list of all things that need to be converted to integers
@KEYS.INTLIST= BUS_ADDRESS_WIDTH NADDR NPIC NSCOPES PIC.MAX REGS.N ID
@DEFAULT.BUS=wb
@REGISTER.BUS=wb
@VERILATOR_PREFIX=v
@SIM.DEFINES=
// Compatibility definitions for Verilator 3.8 to 3.9
#ifndef VVAR
#ifdef ROOT_VERILATOR
#include <Vmain___024root.h>
#define VVAR(A) rootp->main__DOT_ ## A
#elif defined(NEW_VERILATOR)
#define VVAR(A) main__DOT_ ## A
#else
#define VVAR(A) v__DOT_ ## A
#endif
#endif
@SUBD=../auto-generated
@XDC.FILE=../nexysv.xdc
@REGDEFS.H.INSERT=
typedef struct {
unsigned m_addr;
const char *m_name;
} REGNAME;
extern const REGNAME *bregs;
extern const int NREGS;
// #define NREGS (sizeof(bregs)/sizeof(bregs[0]))
extern unsigned addrdecode(const char *v);
extern const char *addrname(const unsigned v);
@REGDEFS.CPP.INCLUDE=
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <ctype.h>
@REGDEFS.CPP.INSERT=
#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;
}
@SIM.INCLUDE=
#include "verilated.h"
#include "Vmain.h"
#define BASECLASS Vmain
#include "design.h"
#include "regdefs.h"
#include "testb.h"
@PREFIX=wb
@BUS.NAME=wb
@BUS.TYPE=wb
@$BUS.WIDTH=32
@BUS.CLOCK=clk
@$BUS.NULLSZ=0x400