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