Skip to content

Commit 89b1f68

Browse files
authored
hw(periph): Convert from AXI directly to APB (#235)
* hw(periph): Convert from AXI directly to APB * hw(periph): Make linter happy * hw(periph): Remove include of APB typedef header * bender: Remove `register_interface` as a dependency `register_interface` is still used as sub-dependency. That's why `Bender.lock` does not change * deps: Bump `axi` * deps: Bump `obi`
1 parent 588022b commit 89b1f68

File tree

4 files changed

+85
-70
lines changed

4 files changed

+85
-70
lines changed

Bender.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ packages:
77
dependencies:
88
- common_cells
99
axi:
10-
revision: 39f5f2d51c5e524f6fc5cf8b6e901f7dcc5622d7
11-
version: 0.39.6
10+
revision: f07498d53ecd5518b277c7d213ec3b71ca4df93c
11+
version: 0.39.7
1212
source:
1313
Git: https://github.com/pulp-platform/axi
1414
dependencies:
@@ -83,8 +83,8 @@ packages:
8383
- obi
8484
- register_interface
8585
obi:
86-
revision: 8097928cf1b43712f93d5356f336397879b4ad2c
87-
version: 0.1.6
86+
revision: 0155fc34e900c7c884e081c0a1114a247937ff69
87+
version: 0.1.7
8888
source:
8989
Git: https://github.com/pulp-platform/obi.git
9090
dependencies:
@@ -94,7 +94,7 @@ packages:
9494
revision: 5daa85d164cf6b54ad061ea1e4c6f3624556e467
9595
version: 0.4.5
9696
source:
97-
Git: https://github.com/pulp-platform/register_interface
97+
Git: https://github.com/pulp-platform/register_interface.git
9898
dependencies:
9999
- apb
100100
- axi

Bender.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ dependencies:
2424
apb: { git: https://github.com/pulp-platform/apb.git, version: 0.2.2 }
2525
common_cells: { git: https://github.com/pulp-platform/common_cells, version: 1.35.0 }
2626
FPnew: { git: https://github.com/pulp-platform/cvfpu.git, rev: pulp-v0.1.3 }
27-
register_interface: { git: https://github.com/pulp-platform/register_interface, version: 0.4.2 }
2827
tech_cells_generic: { git: https://github.com/pulp-platform/tech_cells_generic, version: 0.2.13 }
2928
riscv-dbg: { git: https://github.com/pulp-platform/riscv-dbg, version: 0.8.0 }
3029
cluster_icache: { git: https://github.com/pulp-platform/cluster_icache.git, rev: 64e21ae455bbdde850c4df13bef86ea55ac42537 }

hw/snitch_cluster/src/snitch_cluster.sv

Lines changed: 65 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
`include "common_cells/registers.svh"
1313

1414
`include "mem_interface/typedef.svh"
15-
`include "register_interface/typedef.svh"
15+
`include "apb/typedef.svh"
1616
`include "reqrsp_interface/typedef.svh"
1717
`include "tcdm_interface/typedef.svh"
1818

@@ -371,6 +371,10 @@ module snitch_cluster
371371
`AXI_TYPEDEF_ALL(axi_mst_dma, addr_t, id_dma_mst_t, data_dma_t, strb_dma_t, user_dma_t)
372372
`AXI_TYPEDEF_ALL(axi_slv_dma, addr_t, id_dma_slv_t, data_dma_t, strb_dma_t, user_dma_t)
373373

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+
374378
`REQRSP_TYPEDEF_ALL(reqrsp, addr_t, data_t, strb_t)
375379

376380
`MEM_TYPEDEF_ALL(mem, tcdm_mem_addr_t, data_t, strb_t, tcdm_user_t)
@@ -379,9 +383,6 @@ module snitch_cluster
379383
`TCDM_TYPEDEF_ALL(tcdm, tcdm_addr_t, data_t, strb_t, tcdm_user_t)
380384
`TCDM_TYPEDEF_ALL(tcdm_dma, tcdm_addr_t, data_dma_t, strb_dma_t, logic)
381385

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-
385386
// Event counter increments for the TCDM.
386387
typedef struct packed {
387388
/// Number requests going in
@@ -538,8 +539,10 @@ module snitch_cluster
538539
reqrsp_rsp_t [NrHives-1:0] ptw_rsp;
539540

540541
// 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;
543546

544547
// 5. Misc. Wires.
545548
logic icache_prefetch_enable;
@@ -1230,26 +1233,58 @@ module snitch_cluster
12301233
);
12311234

12321235
// 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)
12531288
);
12541289

12551290
if (IntBootromEnable) begin : gen_bootrom
@@ -1301,17 +1336,17 @@ module snitch_cluster
13011336
.addr_t (addr_t),
13021337
.data_t (data_t),
13031338
.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),
13061341
.tcdm_events_t (tcdm_events_t),
13071342
.dma_events_t (dma_events_t),
13081343
.NrCores (NrCores),
13091344
.DMANumChannels (DMANumChannels)
13101345
) i_snitch_cluster_peripheral (
13111346
.clk_i,
13121347
.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),
13151350
.icache_prefetch_enable_o (icache_prefetch_enable),
13161351
.cl_clint_o (cl_interrupt),
13171352
.core_events_i (core_events),

hw/snitch_cluster/src/snitch_cluster_peripheral/snitch_cluster_peripheral.sv

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
/// Exposes cluster confugration and information as memory mapped information
66

7-
`include "apb/typedef.svh"
87
`include "common_cells/registers.svh"
98

109
module snitch_cluster_peripheral
@@ -20,16 +19,16 @@ module snitch_cluster_peripheral
2019
parameter type addr_t = logic,
2120
parameter type data_t = logic,
2221
parameter type strb_t = logic,
23-
parameter type reg_req_t = logic,
24-
parameter type reg_rsp_t = logic,
22+
parameter type apb_req_t = logic,
23+
parameter type apb_resp_t = logic,
2524
parameter type tcdm_events_t = logic,
2625
parameter type dma_events_t = logic
2726
) (
2827
input logic clk_i,
2928
input logic rst_ni,
3029

31-
input reg_req_t reg_req_i,
32-
output reg_rsp_t reg_rsp_o,
30+
input apb_req_t apb_req_i,
31+
output apb_resp_t apb_resp_o,
3332

3433
output logic icache_prefetch_enable_o,
3534
output logic [NrCores-1:0] cl_clint_o,
@@ -50,37 +49,19 @@ module snitch_cluster_peripheral
5049
snitch_cluster_peripheral_reg__out_t reg2hw;
5150
snitch_cluster_peripheral_reg__in_t hw2reg;
5251

53-
`APB_TYPEDEF_ALL(sn_periph_regs_apb, addr_t, data_t, strb_t)
54-
sn_periph_regs_apb_req_t sn_periph_regs_apb_req;
55-
sn_periph_regs_apb_resp_t sn_periph_regs_apb_rsp;
56-
57-
reg_to_apb #(
58-
.reg_req_t ( reg_req_t ),
59-
.reg_rsp_t ( reg_rsp_t ),
60-
.apb_req_t ( sn_periph_regs_apb_req_t ),
61-
.apb_rsp_t ( sn_periph_regs_apb_resp_t )
62-
) chs_regs_reg_to_apb (
63-
.clk_i,
64-
.rst_ni,
65-
.reg_req_i ( reg_req_i ),
66-
.reg_rsp_o ( reg_rsp_o ),
67-
.apb_req_o ( sn_periph_regs_apb_req ),
68-
.apb_rsp_i ( sn_periph_regs_apb_rsp )
69-
);
70-
7152
snitch_cluster_peripheral_reg i_snitch_cluster_peripheral_reg (
72-
.clk (clk_i),
53+
.clk (clk_i),
7354
.arst_n (rst_ni),
74-
.s_apb_psel ( sn_periph_regs_apb_req.psel ),
75-
.s_apb_penable ( sn_periph_regs_apb_req.penable ),
76-
.s_apb_pwrite ( sn_periph_regs_apb_req.pwrite ),
77-
.s_apb_pprot ( sn_periph_regs_apb_req.pprot ),
78-
.s_apb_paddr(sn_periph_regs_apb_req.paddr[SNITCH_CLUSTER_PERIPHERAL_REG_MIN_ADDR_WIDTH-1:0]),
79-
.s_apb_pwdata ( sn_periph_regs_apb_req.pwdata ),
80-
.s_apb_pstrb ( sn_periph_regs_apb_req.pstrb ),
81-
.s_apb_pready ( sn_periph_regs_apb_rsp.pready ),
82-
.s_apb_prdata ( sn_periph_regs_apb_rsp.prdata ),
83-
.s_apb_pslverr ( sn_periph_regs_apb_rsp.pslverr ),
55+
.s_apb_psel ( apb_req_i.psel ),
56+
.s_apb_penable ( apb_req_i.penable ),
57+
.s_apb_pwrite ( apb_req_i.pwrite ),
58+
.s_apb_pprot ( apb_req_i.pprot ),
59+
.s_apb_paddr (apb_req_i.paddr[SNITCH_CLUSTER_PERIPHERAL_REG_MIN_ADDR_WIDTH-1:0]),
60+
.s_apb_pwdata ( apb_req_i.pwdata ),
61+
.s_apb_pstrb ( apb_req_i.pstrb ),
62+
.s_apb_pready ( apb_resp_o.pready ),
63+
.s_apb_prdata ( apb_resp_o.prdata ),
64+
.s_apb_pslverr ( apb_resp_o.pslverr ),
8465
.hwif_out (reg2hw),
8566
.hwif_in (hw2reg)
8667
);

0 commit comments

Comments
 (0)