12
12
`include " common_cells/registers.svh"
13
13
14
14
`include " mem_interface/typedef.svh"
15
- `include " register_interface /typedef.svh"
15
+ `include " apb /typedef.svh"
16
16
`include " reqrsp_interface/typedef.svh"
17
17
`include " tcdm_interface/typedef.svh"
18
18
@@ -371,6 +371,10 @@ module snitch_cluster
371
371
`AXI_TYPEDEF_ALL (axi_mst_dma, addr_t, id_dma_mst_t, data_dma_t, strb_dma_t, user_dma_t)
372
372
`AXI_TYPEDEF_ALL (axi_slv_dma, addr_t, id_dma_slv_t, data_dma_t, strb_dma_t, user_dma_t)
373
373
374
+ `AXI_LITE_TYPEDEF_ALL (axi_lite, addr_t, data_t, strb_t)
375
+
376
+ `APB_TYPEDEF_ALL (apb, addr_t, data_t, strb_t)
377
+
374
378
`REQRSP_TYPEDEF_ALL (reqrsp, addr_t, data_t, strb_t)
375
379
376
380
`MEM_TYPEDEF_ALL (mem, tcdm_mem_addr_t, data_t, strb_t, tcdm_user_t)
@@ -379,9 +383,6 @@ module snitch_cluster
379
383
`TCDM_TYPEDEF_ALL (tcdm, tcdm_addr_t, data_t, strb_t, tcdm_user_t)
380
384
`TCDM_TYPEDEF_ALL (tcdm_dma, tcdm_addr_t, data_dma_t, strb_dma_t, logic )
381
385
382
- `REG_BUS_TYPEDEF_REQ (reg_req_t, addr_t, data_t, strb_t)
383
- `REG_BUS_TYPEDEF_RSP (reg_rsp_t, data_t)
384
-
385
386
// Event counter increments for the TCDM.
386
387
typedef struct packed {
387
388
// / Number requests going in
@@ -538,8 +539,10 @@ module snitch_cluster
538
539
reqrsp_rsp_t [NrHives- 1 : 0 ] ptw_rsp;
539
540
540
541
// 5. Peripheral Subsystem
541
- reg_req_t reg_req;
542
- reg_rsp_t reg_rsp;
542
+ axi_lite_req_t axi_lite_req;
543
+ axi_lite_resp_t axi_lite_resp;
544
+ apb_req_t apb_req;
545
+ apb_resp_t apb_resp;
543
546
544
547
// 5. Misc. Wires.
545
548
logic icache_prefetch_enable;
@@ -1230,26 +1233,58 @@ module snitch_cluster
1230
1233
);
1231
1234
1232
1235
// 2. Peripherals
1233
- axi_to_reg # (
1234
- .ADDR_WIDTH (PhysicalAddrWidth),
1235
- .DATA_WIDTH (NarrowDataWidth),
1236
- .AXI_MAX_WRITE_TXNS (1 ),
1237
- .AXI_MAX_READ_TXNS (1 ),
1238
- .DECOUPLE_W (0 ),
1239
- .ID_WIDTH (NarrowIdWidthOut),
1240
- .USER_WIDTH (NarrowUserWidth),
1241
- .axi_req_t (axi_slv_req_t),
1242
- .axi_rsp_t (axi_slv_resp_t),
1243
- .reg_req_t (reg_req_t),
1244
- .reg_rsp_t (reg_rsp_t)
1245
- ) i_axi_to_reg (
1246
- .clk_i,
1247
- .rst_ni,
1248
- .testmode_i (1'b0 ),
1249
- .axi_req_i (narrow_axi_slv_req[ClusterPeripherals]),
1250
- .axi_rsp_o (narrow_axi_slv_rsp[ClusterPeripherals]),
1251
- .reg_req_o (reg_req),
1252
- .reg_rsp_i (reg_rsp)
1236
+ axi_to_axi_lite # (
1237
+ .AxiAddrWidth (PhysicalAddrWidth),
1238
+ .AxiDataWidth (NarrowDataWidth),
1239
+ .AxiIdWidth (NarrowIdWidthOut),
1240
+ .AxiUserWidth (NarrowUserWidth),
1241
+ .AxiMaxWriteTxns (1 ),
1242
+ .AxiMaxReadTxns (1 ),
1243
+ .full_req_t (axi_slv_req_t),
1244
+ .full_resp_t (axi_slv_resp_t),
1245
+ .lite_req_t (axi_lite_req_t),
1246
+ .lite_resp_t (axi_lite_resp_t)
1247
+ ) i_axi_to_axi_lite (
1248
+ .clk_i (clk_i),
1249
+ .rst_ni (rst_ni),
1250
+ .test_i (1'b0 ),
1251
+ .slv_req_i (narrow_axi_slv_req[ClusterPeripherals]),
1252
+ .slv_resp_o (narrow_axi_slv_rsp[ClusterPeripherals]),
1253
+ .mst_req_o (axi_lite_req),
1254
+ .mst_resp_i (axi_lite_resp)
1255
+ );
1256
+
1257
+ // There is only one APB slave in the cluster, at index 0.
1258
+ localparam int unsigned NumApbConvRules = 1 + AliasRegionEnable;
1259
+ xbar_rule_t [NumApbConvRules- 1 : 0 ] apb_conv_rules;
1260
+
1261
+ assign apb_conv_rules[0 ] = '{
1262
+ idx: 0 , start_addr: cluster_periph_start_address, end_addr: cluster_periph_end_address
1263
+ } ;
1264
+ if (AliasRegionEnable) begin : gen_apb_alias
1265
+ assign apb_conv_rules[1 ] = '{
1266
+ idx: 0 , start_addr: PeriphAliasStart, end_addr: PeriphAliasEnd
1267
+ } ;
1268
+ end
1269
+
1270
+ axi_lite_to_apb # (
1271
+ .NoApbSlaves (1 ),
1272
+ .NoRules (NumApbConvRules),
1273
+ .AddrWidth (PhysicalAddrWidth),
1274
+ .DataWidth (NarrowDataWidth),
1275
+ .axi_lite_req_t (axi_lite_req_t),
1276
+ .axi_lite_resp_t (axi_lite_resp_t),
1277
+ .apb_req_t (apb_req_t),
1278
+ .apb_resp_t (apb_resp_t),
1279
+ .rule_t (xbar_rule_t)
1280
+ ) i_axi_lite_to_apb (
1281
+ .clk_i (clk_i),
1282
+ .rst_ni (rst_ni),
1283
+ .axi_lite_req_i (axi_lite_req),
1284
+ .axi_lite_resp_o (axi_lite_resp),
1285
+ .apb_req_o (apb_req),
1286
+ .apb_resp_i (apb_resp),
1287
+ .addr_map_i (apb_conv_rules)
1253
1288
);
1254
1289
1255
1290
if (IntBootromEnable) begin : gen_bootrom
@@ -1301,17 +1336,17 @@ module snitch_cluster
1301
1336
.addr_t (addr_t),
1302
1337
.data_t (data_t),
1303
1338
.strb_t (strb_t),
1304
- .reg_req_t (reg_req_t ),
1305
- .reg_rsp_t (reg_rsp_t ),
1339
+ .apb_req_t (apb_req_t ),
1340
+ .apb_resp_t (apb_resp_t ),
1306
1341
.tcdm_events_t (tcdm_events_t),
1307
1342
.dma_events_t (dma_events_t),
1308
1343
.NrCores (NrCores),
1309
1344
.DMANumChannels (DMANumChannels)
1310
1345
) i_snitch_cluster_peripheral (
1311
1346
.clk_i,
1312
1347
.rst_ni,
1313
- .reg_req_i (reg_req ),
1314
- .reg_rsp_o (reg_rsp ),
1348
+ .apb_req_i (apb_req ),
1349
+ .apb_resp_o (apb_resp ),
1315
1350
.icache_prefetch_enable_o (icache_prefetch_enable),
1316
1351
.cl_clint_o (cl_interrupt),
1317
1352
.core_events_i (core_events),
0 commit comments