Skip to content

Commit 1ddf104

Browse files
committed
Merge branch 'control-pulp' into master
2 parents dd39b06 + 07c26b5 commit 1ddf104

File tree

28 files changed

+2082
-79
lines changed

28 files changed

+2082
-79
lines changed

bin/openocd-genesys2.cfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ ftdi_layout_signal nTRST -ndata 0x0010
2222

2323
set _CHIPNAME riscv
2424

25-
jtag newtap $_CHIPNAME unknown0 -irlen 5 -expected-id 0x10102001
26-
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x249511C3
25+
jtag newtap $_CHIPNAME unknown0 -irlen 5 -expected-id 0x53501db3
26+
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x5cafedb3
2727

2828
set _TARGETNAME $_CHIPNAME.cpu
2929
target create $_TARGETNAME riscv -chain-position $_TARGETNAME -coreid 0x3e0

configs/control-pulp.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ else
1313
fi
1414

1515
source $scriptDir/common.sh
16+
17+
export PULPRT_CONFIG_CFLAGS='-DARCHI_ASIC_PER_FREQUENCY=100000000 \
18+
-DARCHI_ASIC_FC_FREQUENCY=100000000 \
19+
-DARCHI_ASIC_CL_FREQUENCY=100000000'
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash -e
2+
3+
export PULPRT_TARGET=control-pulp
4+
export PULPRUN_TARGET=control-pulp
5+
6+
if [ -n "${ZSH_VERSION:-}" ]; then
7+
DIR="$(readlink -f -- "${(%):-%x}")"
8+
scriptDir="$(dirname $DIR)"
9+
else
10+
scriptDir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
11+
fi
12+
13+
source $scriptDir/../../common.sh
14+
15+
export PULPRUN_PLATFORM=fpga
16+
17+
export PULPRT_CONFIG_CFLAGS='-DARCHI_FPGA_PER_FREQUENCY=10000000 \
18+
-DARCHI_FPGA_FC_FREQUENCY=20000000 \
19+
-DARCHI_FPGA_CL_FREQUENCY=20000000'
20+
21+
export io=uart

configs/kairos.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash -e
2+
3+
export PULPRT_TARGET=kairos
4+
export PULPRUN_TARGET=kairos
5+
6+
if [ -n "${ZSH_VERSION:-}" ]; then
7+
DIR="$(readlink -f -- "${(%):-%x}")"
8+
scriptDir="$(dirname $DIR)"
9+
else
10+
11+
scriptDir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
12+
13+
fi
14+
15+
source $scriptDir/common.sh
16+
17+
export PULPRT_CONFIG_CFLAGS='-DARCHI_ASIC_PER_FREQUENCY=100000000 \
18+
-DARCHI_ASIC_FC_FREQUENCY=100000000 \
19+
-DARCHI_ASIC_CL_FREQUENCY=100000000'

include/archi/chips/control-pulp/memory_map.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
#define ARCHI_HWCE_OFFSET 0x00001000
9999
#define ARCHI_ICACHE_CTRL_OFFSET 0x00001400
100100
#define ARCHI_MCHAN_EXT_OFFSET 0x00001800
101+
#define ARCHI_IDMA_EXT_OFFSET 0x00001800
101102

102103
#define ARCHI_CLUSTER_PERIPHERALS_ADDR ( ARCHI_CLUSTER_ADDR + ARCHI_CLUSTER_PERIPHERALS_OFFSET )
103104
#define ARCHI_CLUSTER_PERIPHERALS_GLOBAL_ADDR(cid) ( ARCHI_CLUSTER_GLOBAL_ADDR(cid) + ARCHI_CLUSTER_PERIPHERALS_OFFSET )
@@ -107,6 +108,7 @@
107108
#define ARCHI_EU_ADDR ( ARCHI_CLUSTER_PERIPHERALS_ADDR + ARCHI_EU_OFFSET )
108109
#define ARCHI_HWCE_ADDR ( ARCHI_CLUSTER_PERIPHERALS_ADDR + ARCHI_HWCE_OFFSET )
109110
#define ARCHI_MCHAN_EXT_ADDR ( ARCHI_CLUSTER_PERIPHERALS_ADDR + ARCHI_MCHAN_EXT_OFFSET )
111+
#define ARCHI_IDMA_EXT_ADDR ( ARCHI_CLUSTER_PERIPHERALS_ADDR + ARCHI_IDMA_EXT_OFFSET )
110112

111113

112114

@@ -118,11 +120,13 @@
118120

119121
#define ARCHI_EU_DEMUX_OFFSET ( 0x00000 )
120122
#define ARCHI_MCHAN_DEMUX_OFFSET ( 0x00400 )
123+
#define ARCHI_IDMA_DEMUX_OFFSET ( 0x00400 )
121124

122125

123126
#define ARCHI_DEMUX_PERIPHERALS_ADDR ( ARCHI_CLUSTER_ADDR + ARCHI_DEMUX_PERIPHERALS_OFFSET )
124127

125128
#define ARCHI_EU_DEMUX_ADDR ( ARCHI_DEMUX_PERIPHERALS_ADDR + ARCHI_EU_DEMUX_OFFSET )
126129
#define ARCHI_MCHAN_DEMUX_ADDR ( ARCHI_DEMUX_PERIPHERALS_ADDR + ARCHI_MCHAN_DEMUX_OFFSET )
130+
#define ARCHI_IDMA_DEMUX_ADDR ( ARCHI_DEMUX_PERIPHERALS_ADDR + ARCHI_IDMA_DEMUX_OFFSET )
127131

128132
#endif

include/archi/chips/control-pulp/properties.h

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
* FPGA
2323
*/
2424

25-
#define ARCHI_FPGA_FREQUENCY 5000000
2625

2726
/*
2827
* MEMORIES
@@ -67,9 +66,14 @@
6766
#define ITC_VERSION 1
6867
#define FLL_VERSION 1
6968
#define RISCV_VERSION 4
70-
#define MCHAN_VERSION 7
69+
// TODO: if we have to switch between idma and mchan, make this configurable with #ifdef
70+
//#define MCHAN_VERSION 7
71+
#define IDMA_VERSION 1
7172
#define PADS_VERSION 2
7273

74+
#if defined(MCHAN_VERSION) && defined(IDMA_VERSION)
75+
#error "MCHAN and IDMA not compatible"
76+
#endif
7377

7478
/*
7579
* CLUSTER
@@ -80,6 +84,7 @@
8084
#define ARCHI_CLUSTER_NB_PE 8
8185
#define ARCHI_NB_CLUSTER 1
8286

87+
#define ARCHI_HAS_DMA_DEMUX 1
8388

8489
/*
8590
* HWS
@@ -96,7 +101,7 @@
96101
#define ARCHI_FC_CID 31
97102
#define ARCHI_HAS_FC_ITC 1
98103
#define ARCHI_HAS_FC 1
99-
104+
#define ARCHI_CORE_HAS_1_10 1
100105

101106
/*
102107
* CLOCKS
@@ -113,33 +118,31 @@
113118

114119
#define ARCHI_UDMA_HAS_SPIM 1
115120
#define ARCHI_UDMA_HAS_UART 1
116-
#define ARCHI_UDMA_HAS_SDIO 1
121+
#define ARCHI_UDMA_HAS_SDIO 0
117122
#define ARCHI_UDMA_HAS_I2C 1
118-
#define ARCHI_UDMA_HAS_I2S 1
119-
#define ARCHI_UDMA_HAS_CAM 1
120-
#define ARCHI_UDMA_HAS_TRACER 1
121-
#define ARCHI_UDMA_HAS_FILTER 1
123+
#define ARCHI_UDMA_HAS_I2S 0
124+
#define ARCHI_UDMA_HAS_CAM 0
125+
#define ARCHI_UDMA_HAS_TRACER 0
126+
#define ARCHI_UDMA_HAS_FILTER 0
122127

123-
#define ARCHI_UDMA_NB_SPIM 1
128+
#define ARCHI_UDMA_NB_SPIM 8
124129
#define ARCHI_UDMA_NB_UART 1
125-
#define ARCHI_UDMA_NB_SDIO 1
126-
#define ARCHI_UDMA_NB_I2C 1
127-
#define ARCHI_UDMA_NB_I2S 1
128-
#define ARCHI_UDMA_NB_CAM 1
129-
#define ARCHI_UDMA_NB_TRACER 1
130-
#define ARCHI_UDMA_NB_FILTER 1
130+
#define ARCHI_UDMA_NB_SDIO 0
131+
#define ARCHI_UDMA_NB_I2C 12
132+
#define ARCHI_UDMA_NB_I2S 0
133+
#define ARCHI_UDMA_NB_CAM 0
134+
#define ARCHI_UDMA_NB_TRACER 0
135+
#define ARCHI_UDMA_NB_FILTER 1
131136

132137
#define ARCHI_UDMA_UART_ID(id) 0
133138
#define ARCHI_UDMA_SPIM_ID(id) (1 + (id))
134139
#define ARCHI_UDMA_I2C_ID(id) (9 + (id))
135-
#define ARCHI_UDMA_SDIO_ID(id) (21 + (id))
136-
#define ARCHI_UDMA_FILTER_ID(id) (22 + (id))
137-
#define ARCHI_UDMA_TRACER_ID(id) 23
138-
#define ARCHI_UDMA_TGEN_ID(id) 24
139-
140-
#define ARCHI_NB_PERIPH 25
140+
#define ARCHI_UDMA_FILTER_ID(id) (21 + (id))
141141

142+
#define ARCHI_NB_PERIPH 22
142143

144+
#define ARCHI_UDMA_NB_I2C_MAX 12
145+
#define ARCHI_UDMA_NB_SPIM_MAX 8
143146

144147
/*
145148
* FLLS
@@ -162,9 +165,12 @@
162165
#define ARCHI_SOC_EVENT_UDMA_NB_CHANNEL_EVT_LOG2 2
163166
#define ARCHI_SOC_EVENT_UDMA_NB_CHANNEL_EVT (1<<ARCHI_SOC_EVENT_UDMA_NB_CHANNEL_EVT_LOG2)
164167
#define ARCHI_SOC_EVENT_UDMA_FIRST_EVT 0
165-
#define ARCHI_SOC_EVENT_UDMA_NB_EVT (ARCHI_SOC_EVENT_UDMA_NB_CHANNEL_EVT * ARCHI_NB_PERIPH)
168+
#define ARCHI_SOC_EVENT_UDMA_NB_EVT (ARCHI_SOC_EVENT_UDMA_NB_CHANNEL_EVT * ARCHI_NB_PERIPH_MAX)
166169
#define ARCHI_SOC_EVENT_UDMA_NB_TGEN_EVT 6
167170

171+
#define ARCHI_SOC_EVENT_UDMA_NB_EVT_MAX 32*4
172+
#define ARCHI_NB_PERIPH_MAX ((ARCHI_SOC_EVENT_UDMA_NB_EVT_MAX-ARCHI_UDMA_NB_SPIM_MAX-ARCHI_UDMA_NB_I2C_MAX)>>2)
173+
168174
#define ARCHI_SOC_EVENT_PERIPH_FIRST_EVT(x) ((x)*ARCHI_SOC_EVENT_UDMA_NB_CHANNEL_EVT)
169175

170176
#define ARCHI_SOC_EVENT_UART0_RX 0
@@ -176,6 +182,7 @@
176182
#define ARCHI_SOC_EVENT_SPIM_TX (id) (5 + (id) * 4)
177183
#define ARCHI_SOC_EVENT_SPIM_CMD(id) (6 + (id) * 4)
178184
#define ARCHI_SOC_EVENT_SPIM_EOT(id) (7 + (id) * 4)
185+
#define ARCHI_SOC_EVENT_SPIM_REQ(id) (ARCHI_SOC_EVENT_UDMA_NB_EVT + (id))
179186

180187
#define ARCHI_SOC_EVENT_I2C0_RX 8
181188
#define ARCHI_SOC_EVENT_I2C0_TX 9
@@ -252,11 +259,12 @@
252259

253260
#define ARCHI_FC_EVT_FIRST_SW 0
254261
#define ARCHI_FC_EVT_NB_SW 8
255-
#define ARCHI_FC_EVT_TIMER0_LO 10
256-
#define ARCHI_FC_EVT_TIMER0_HI 11
262+
#define ARCHI_FC_EVT_TIMER0_LO 10
263+
#define ARCHI_FC_EVT_TIMER0_HI 11
264+
#define ARCHI_FC_EVT_I2C_SLV_BMC 13
257265
#define ARCHI_FC_EVT_CLK_REF 14
258266
#define ARCHI_FC_EVT_GPIO 15
259-
#define ARCHI_FC_EVT_RTC 16
267+
#define ARCHI_FC_EVT_I2C_SLV 16
260268
#define ARCHI_FC_EVT_ADV_TIMER0 17
261269
#define ARCHI_FC_EVT_ADV_TIMER1 18
262270
#define ARCHI_FC_EVT_ADV_TIMER2 19

include/archi/chips/control-pulp/pulp.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,19 @@
2525

2626
// cv32e40p-specific
2727
#include "archi/cv32e40p/cv32e40p.h"
28-
#include "archi/riscv/priv_1_11.h"
28+
#include "archi/riscv/priv_1_12.h"
2929

3030
#include "archi/chips/control-pulp/memory_map.h"
3131
#include "archi/chips/control-pulp/apb_soc.h"
3232
#include "archi/stdout/stdout_v3.h"
33+
// TODO: do we need to have this switch bounded to exact versions?
34+
// Maybe better to bound them to dma type (mchan or idma)
35+
#if MCHAN_VERSION == 7
3336
#include "archi/dma/mchan_v7.h"
37+
#endif
38+
#if IDMA_VERSION == 1
39+
#include "archi/dma/idma_v1.h"
40+
#endif
3441

3542
#include "archi/udma/spim/udma_spim_v3.h"
3643
#include "archi/udma/i2c/udma_i2c_v2.h"
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
/*
2+
* Copyright (C) 2018 ETH Zurich and University of Bologna
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#ifndef __ARCHI_KAIROS_APB_SOC_H__
18+
#define __ARCHI_KAIROS_APB_SOC_H__
19+
20+
#define APB_SOC_BOOT_OTHER 0
21+
#define APB_SOC_BOOT_JTAG 1
22+
#define APB_SOC_BOOT_SPI 2
23+
#define APB_SOC_BOOT_ROM 3
24+
#define APB_SOC_BOOT_PRELOAD 4
25+
#define APB_SOC_BOOT_HYPER 5
26+
#define APB_SOC_BOOT_SPIM 6
27+
#define APB_SOC_BOOT_SPIM_QPI 7
28+
29+
#define APB_SOC_PLT_OTHER 0
30+
#define APB_SOC_PLT_FPGA 1
31+
#define APB_SOC_PLT_RTL 2
32+
#define APB_SOC_PLT_VP 3
33+
#define APB_SOC_PLT_CHIP 4
34+
35+
//PADs configuration is made of 8bits out of which only the first 6 are used
36+
//bit0 enable pull UP
37+
//bit1 enable pull DOWN
38+
//bit2 enable ST
39+
//bit3 enable SlewRate Limit
40+
//bit4..5 Driving Strength
41+
//bit6..7 not used
42+
43+
#define APB_SOC_BOOTADDR_OFFSET 0x04
44+
#define APB_SOC_INFO_OFFSET 0x00 //contains number of cores [31:16] and clusters [15:0]
45+
#define APB_SOC_INFOEXTD_OFFSET 0x04 //not used at the moment
46+
#define APB_SOC_NOTUSED0_OFFSET 0x08 //not used at the moment
47+
#define APB_SOC_CLUSTER_ISOLATE_OFFSET 0x0C //not used at the moment
48+
49+
#define APB_SOC_PADFUN0_OFFSET 0x10
50+
#define APB_SOC_PADCFG0_OFFSET 0x20
51+
52+
#define APB_SOC_PADFUN_OFFSET(g) (APB_SOC_PADFUN0_OFFSET+(g)*4) //sets the mux for pins g*16+0 (bits [1:0]) to g*16+15 (bits [31:30])
53+
#define APB_SOC_PADFUN_NO(pad) ((pad) >> 4)
54+
#define APB_SOC_PADFUN_PAD(padfun) ((padfun)*16)
55+
#define APB_SOC_PADFUN_SIZE 2
56+
#define ARCHI_APB_SOC_PADFUN_NB 4
57+
#define APB_SOC_PADFUN_BIT(pad) (((pad) & 0xF) << 1)
58+
59+
#define APB_SOC_PADCFG_OFFSET(g) (APB_SOC_PADCFG0_OFFSET+(g)*4) //sets config for pin g*4+0(bits [7:0]) to pin g*4+3(bits [31:24])
60+
#define APB_SOC_PADCFG_NO(pad) ((pad) >> 2)
61+
#define APB_SOC_PADCFG_PAD(padfun) ((padfun)*4)
62+
#define APB_SOC_PADCFG_SIZE 8
63+
#define APB_SOC_PADCFG_BIT(pad) (((pad) & 0x3) << 3)
64+
65+
#define APB_SOC_PWRCMD_OFFSET 0x60 //change power mode(not funtional yet)
66+
#define APB_SOC_PWRCFG_OFFSET 0x64 //configures power modes(not funtional yet)
67+
#define APB_SOC_PWRREG_OFFSET 0x68 //32 bit GP register used by power pngmt routines to see if is hard or cold reboot
68+
#define APB_SOC_BUSY_OFFSET 0x6C //not used at the moment
69+
#define APB_SOC_MMARGIN_OFFSET 0x70 //memory margin pins(not used at the moment)
70+
#define APB_SOC_JTAG_REG 0x74 // R/W register for interaction with the the chip environment
71+
#define APB_SOC_L2_SLEEP_OFFSET 0x78 //memory margin pins(not used at the moment)
72+
#define APB_SOC_NOTUSED3_OFFSET 0x7C //not used at the moment
73+
#define APB_SOC_CLKDIV0_OFFSET 0x80 //soc clock divider(to be removed)
74+
#define APB_SOC_CLKDIV1_OFFSET 0x84 //cluster clock divider(to be removed)
75+
#define APB_SOC_CLKDIV2_OFFSET 0x88 //not used at the moment
76+
#define APB_SOC_CLKDIV3_OFFSET 0x8C //not used at the moment
77+
#define APB_SOC_CLKDIV4_OFFSET 0x90 //not used at the moment
78+
#define APB_SOC_NOTUSED4_OFFSET 0x94 //not used at the moment
79+
#define APB_SOC_NOTUSED5_OFFSET 0x98 //not used at the moment
80+
#define APB_SOC_NOTUSED6_OFFSET 0x9C //not used at the moment
81+
#define APB_SOC_CORESTATUS_OFFSET 0xA0 //32bit GP register to be used during testing to return EOC(bit[31]) and status(bit[30:0])
82+
#define APB_SOC_CORESTATUS_RO_OFFSET 0xC0 //32bit GP register to be used during testing to return EOC(bit[31]) and status(bit[30:0])
83+
#define APB_SOC_PADS_CONFIG 0xC4
84+
85+
#define APB_SOC_PADS_CONFIG_BOOTSEL_BIT 0
86+
87+
#define APB_SOC_JTAG_REG_EXT_BIT 8
88+
#define APB_SOC_JTAG_REG_EXT_WIDTH 4
89+
90+
#define APB_SOC_JTAG_REG_LOC_BIT 0
91+
#define APB_SOC_JTAG_REG_LOC_WIDTH 4
92+
93+
#define APB_SOC_INFO_CORES_OFFSET (APB_SOC_INFO_OFFSET + 2)
94+
#define APB_SOC_INFO_CLUSTERS_OFFSET (APB_SOC_INFO_OFFSET)
95+
96+
#define APB_SOC_STATUS_EOC_BIT 31
97+
#define APB_SOC_NB_CORE_BIT 16
98+
99+
100+
#define APB_SOC_BYPASS_OFFSET 0x70
101+
102+
#define APB_SOC_BYPASS_CLOCK_GATE_BIT 10
103+
#define APB_SOC_BYPASS_CLUSTER_STATE_BIT 3
104+
#define APB_SOC_BYPASS_USER0_BIT 14
105+
#define APB_SOC_BYPASS_USER1_BIT 15
106+
107+
108+
#define APB_SOC_FLL_CTRL_OFFSET 0xD0
109+
#define APB_SOC_CLKDIV_SOC_OFFSET 0xD4
110+
#define APB_SOC_CLKDIV_CLUSTER_OFFSET 0xD8
111+
#define APB_SOC_CLKDIV_PERIPH_OFFSET 0xDC
112+
113+
114+
#define APB_SOC_FLL_CTRL_SOC_BIT 0
115+
#define APB_SOC_FLL_CTRL_CLUSTER_BIT 1
116+
#define APB_SOC_FLL_CTRL_PERIPH_BIT 2
117+
118+
119+
#define APB_SOC_RTC_OFFSET 0x1D0
120+
121+
#endif

0 commit comments

Comments
 (0)