|
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 |
|
@@ -426,16 +426,17 @@ module snitch_cluster
|
426 | 426 | `AXI_TYPEDEF_ALL(axi_mst_dma, addr_t, id_dma_mst_t, data_dma_t, strb_dma_t, user_dma_t)
|
427 | 427 | `AXI_TYPEDEF_ALL(axi_slv_dma, addr_t, id_dma_slv_t, data_dma_t, strb_dma_t, user_dma_t)
|
428 | 428 |
|
| 429 | + `AXI_LITE_TYPEDEF_ALL(axi_lite, addr_t, data_t, strb_t) |
| 430 | + |
| 431 | + `APB_TYPEDEF_ALL(apb, addr_t, data_t, strb_t) |
| 432 | + |
429 | 433 | `REQRSP_TYPEDEF_ALL(reqrsp, addr_t, data_t, strb_t)
|
430 | 434 |
|
431 | 435 | `MEM_TYPEDEF_ALL(mem, tcdm_mem_addr_t, data_t, strb_t, tcdm_user_t)
|
432 | 436 | `MEM_TYPEDEF_ALL(mem_dma, tcdm_mem_addr_t, data_dma_t, strb_dma_t, logic)
|
433 | 437 |
|
434 | 438 | `TCDM_TYPEDEF_ALL(tcdm, tcdm_addr_t, data_t, strb_t, tcdm_user_t)
|
435 | 439 |
|
436 |
| - `REG_BUS_TYPEDEF_REQ(reg_req_t, addr_t, data_t, strb_t) |
437 |
| - `REG_BUS_TYPEDEF_RSP(reg_rsp_t, data_t) |
438 |
| - |
439 | 440 | // Event counter increments for the TCDM.
|
440 | 441 | typedef struct packed {
|
441 | 442 | /// Number requests going in
|
@@ -602,8 +603,10 @@ module snitch_cluster
|
602 | 603 | reqrsp_rsp_t [NrHives-1:0] ptw_rsp;
|
603 | 604 |
|
604 | 605 | // 5. Peripheral Subsystem
|
605 |
| - reg_req_t reg_req; |
606 |
| - reg_rsp_t reg_rsp; |
| 606 | + axi_lite_req_t axi_lite_req; |
| 607 | + axi_lite_resp_t axi_lite_resp; |
| 608 | + apb_req_t apb_req; |
| 609 | + apb_resp_t apb_resp; |
607 | 610 |
|
608 | 611 | // 5. Misc. Wires.
|
609 | 612 | logic icache_prefetch_enable;
|
@@ -1372,26 +1375,59 @@ module snitch_cluster
|
1372 | 1375 | );
|
1373 | 1376 |
|
1374 | 1377 | // 2. Peripherals
|
1375 |
| - axi_to_reg #( |
1376 |
| - .ADDR_WIDTH (PhysicalAddrWidth), |
1377 |
| - .DATA_WIDTH (NarrowDataWidth), |
1378 |
| - .AXI_MAX_WRITE_TXNS (1), |
1379 |
| - .AXI_MAX_READ_TXNS (1), |
1380 |
| - .DECOUPLE_W (0), |
1381 |
| - .ID_WIDTH (NarrowIdWidthOut), |
1382 |
| - .USER_WIDTH (NarrowUserWidth), |
1383 |
| - .axi_req_t (axi_slv_req_t), |
1384 |
| - .axi_rsp_t (axi_slv_resp_t), |
1385 |
| - .reg_req_t (reg_req_t), |
1386 |
| - .reg_rsp_t (reg_rsp_t) |
1387 |
| - ) i_axi_to_reg ( |
1388 |
| - .clk_i, |
1389 |
| - .rst_ni, |
1390 |
| - .testmode_i (1'b0), |
1391 |
| - .axi_req_i (narrow_axi_slv_req[ClusterPeripherals]), |
1392 |
| - .axi_rsp_o (narrow_axi_slv_rsp[ClusterPeripherals]), |
1393 |
| - .reg_req_o (reg_req), |
1394 |
| - .reg_rsp_i (reg_rsp) |
| 1378 | + axi_to_axi_lite #( |
| 1379 | + .AxiAddrWidth (PhysicalAddrWidth), |
| 1380 | + .AxiDataWidth (NarrowDataWidth), |
| 1381 | + .AxiIdWidth (NarrowIdWidthOut), |
| 1382 | + .AxiUserWidth (NarrowUserWidth), |
| 1383 | + .AxiMaxWriteTxns(1), |
| 1384 | + .AxiMaxReadTxns (1), |
| 1385 | + .full_req_t (axi_slv_req_t), |
| 1386 | + .full_resp_t (axi_slv_resp_t), |
| 1387 | + .lite_req_t (axi_lite_req_t), |
| 1388 | + .lite_resp_t (axi_lite_resp_t) |
| 1389 | + ) i_axi_to_axi_lite ( |
| 1390 | + .clk_i (clk_i), |
| 1391 | + .rst_ni (rst_ni), |
| 1392 | + .test_i (1'b0), |
| 1393 | + .slv_req_i (narrow_axi_slv_req[ClusterPeripherals]), |
| 1394 | + .slv_resp_o(narrow_axi_slv_rsp[ClusterPeripherals]), |
| 1395 | + .mst_req_o (axi_lite_req), |
| 1396 | + .mst_resp_i(axi_lite_resp) |
| 1397 | + ); |
| 1398 | + |
| 1399 | + // There is only one APB slave in the cluster, at index 0. |
| 1400 | + localparam int unsigned NumApbSlaves = 1; |
| 1401 | + localparam int unsigned NumApbConvRules = (1 + AliasRegionEnable) * NumApbSlaves; |
| 1402 | + xbar_rule_t [NumApbConvRules-1:0] apb_conv_rules; |
| 1403 | + |
| 1404 | + assign apb_conv_rules[0] = '{ |
| 1405 | + idx: 0, start_addr: cluster_periph_start_address, end_addr: cluster_periph_end_address |
| 1406 | + }; |
| 1407 | + if (AliasRegionEnable) begin : gen_apb_alias |
| 1408 | + assign apb_conv_rules[1] = '{ |
| 1409 | + idx: 0, start_addr: PeriphAliasStart, end_addr: PeriphAliasEnd |
| 1410 | + }; |
| 1411 | + end |
| 1412 | + |
| 1413 | + axi_lite_to_apb #( |
| 1414 | + .NoApbSlaves (NumApbSlaves), |
| 1415 | + .NoRules (NumApbConvRules), |
| 1416 | + .AddrWidth (PhysicalAddrWidth), |
| 1417 | + .DataWidth (NarrowDataWidth), |
| 1418 | + .axi_lite_req_t (axi_lite_req_t), |
| 1419 | + .axi_lite_resp_t (axi_lite_resp_t), |
| 1420 | + .apb_req_t (apb_req_t), |
| 1421 | + .apb_resp_t (apb_resp_t), |
| 1422 | + .rule_t (xbar_rule_t) |
| 1423 | + ) i_axi_lite_to_apb ( |
| 1424 | + .clk_i (clk_i), |
| 1425 | + .rst_ni (rst_ni), |
| 1426 | + .axi_lite_req_i (axi_lite_req), |
| 1427 | + .axi_lite_resp_o(axi_lite_resp), |
| 1428 | + .apb_req_o (apb_req), |
| 1429 | + .apb_resp_i (apb_resp), |
| 1430 | + .addr_map_i (apb_conv_rules) |
1395 | 1431 | );
|
1396 | 1432 |
|
1397 | 1433 | if (IntBootromEnable) begin : gen_bootrom
|
@@ -1440,17 +1476,20 @@ module snitch_cluster
|
1440 | 1476 | end
|
1441 | 1477 |
|
1442 | 1478 | snitch_cluster_peripheral #(
|
1443 |
| - .reg_req_t (reg_req_t), |
1444 |
| - .reg_rsp_t (reg_rsp_t), |
| 1479 | + .addr_t (addr_t), |
| 1480 | + .data_t (data_t), |
| 1481 | + .strb_t (strb_t), |
| 1482 | + .apb_req_t (apb_req_t), |
| 1483 | + .apb_resp_t (apb_resp_t), |
1445 | 1484 | .tcdm_events_t (tcdm_events_t),
|
1446 | 1485 | .dma_events_t (dma_events_t),
|
1447 | 1486 | .NrCores (NrCores),
|
1448 | 1487 | .DMANumChannels (DMANumChannels)
|
1449 | 1488 | ) i_snitch_cluster_peripheral (
|
1450 | 1489 | .clk_i,
|
1451 | 1490 | .rst_ni,
|
1452 |
| - .reg_req_i (reg_req), |
1453 |
| - .reg_rsp_o (reg_rsp), |
| 1491 | + .apb_req_i (apb_req), |
| 1492 | + .apb_resp_o (apb_resp), |
1454 | 1493 | .icache_prefetch_enable_o (icache_prefetch_enable),
|
1455 | 1494 | .cl_clint_o (cl_interrupt),
|
1456 | 1495 | .core_events_i (core_events),
|
|
0 commit comments