Skip to content

Commit 8608ea6

Browse files
JeanRochCoulonASintzoff
authored andcommitted
Flist, ariane_wrapper.sv: add wrapper to expand rvfi and axi structures
needed for dc_shell Signed-off-by: Jean-Roch Coulon <jean-roch.coulon@thalesgroup.com>
1 parent 5388c80 commit 8608ea6

3 files changed

Lines changed: 241 additions & 0 deletions

File tree

core/Flist.cv32a6_imac_sv0

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ ${CVA6_REPO_DIR}/corev_apu/tb/ariane_soc_pkg.sv
4646
// TODO: ariane_axi_pkg is dependent on this.
4747
${CVA6_REPO_DIR}/corev_apu/axi/src/axi_pkg.sv
4848
${CVA6_REPO_DIR}/corev_apu/fpga-support/rtl/SyncSpRamBeNx64.sv
49+
${CVA6_REPO_DIR}/core/include/ariane_rvfi_pkg.sv
4950

5051
// Packages
5152
${CVA6_REPO_DIR}/core/include/ariane_axi_pkg.sv
@@ -86,6 +87,7 @@ ${CVA6_REPO_DIR}/core/fpu/src/fpu_div_sqrt_mvp/hdl/nrbd_nrsc_mvp.sv
8687
${CVA6_REPO_DIR}/core/fpu/src/fpu_div_sqrt_mvp/hdl/preprocess_mvp.sv
8788

8889
// Top-level source files (not necessarily instantiated at the top of the cva6).
90+
${CVA6_REPO_DIR}/core/ariane_wrapper.sv
8991
${CVA6_REPO_DIR}/core/ariane.sv
9092
${CVA6_REPO_DIR}/core/alu.sv
9193
// Note: depends on fpnew_pkg, above

core/Flist.cv64a6_imacfd_sv39

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ ${CVA6_REPO_DIR}/corev_apu/tb/ariane_soc_pkg.sv
4646
// TODO: ariane_axi_pkg is dependent on this.
4747
${CVA6_REPO_DIR}/corev_apu/axi/src/axi_pkg.sv
4848
${CVA6_REPO_DIR}/corev_apu/fpga-support/rtl/SyncSpRamBeNx64.sv
49+
${CVA6_REPO_DIR}/core/include/ariane_rvfi_pkg.sv
4950

5051
// Packages
5152
${CVA6_REPO_DIR}/core/include/ariane_axi_pkg.sv
@@ -86,6 +87,7 @@ ${CVA6_REPO_DIR}/core/fpu/src/fpu_div_sqrt_mvp/hdl/nrbd_nrsc_mvp.sv
8687
${CVA6_REPO_DIR}/core/fpu/src/fpu_div_sqrt_mvp/hdl/preprocess_mvp.sv
8788

8889
// Top-level source files (not necessarily instantiated at the top of the cva6).
90+
${CVA6_REPO_DIR}/core/ariane_wrapper.sv
8991
${CVA6_REPO_DIR}/core/ariane.sv
9092
${CVA6_REPO_DIR}/core/alu.sv
9193
// Note: depends on fpnew_pkg, above

core/ariane_wrapper.sv

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
// Copyright 2021 Thales DIS design services SAS
2+
//
3+
// Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
6+
// You may obtain a copy of the License at https://solderpad.org/licenses/
7+
//
8+
// Original Author: Jean-Roch COULON (jean-roch.coulon@thalesgroup.com)
9+
10+
module ariane_wrapper import ariane_pkg::*; #(
11+
parameter ariane_pkg::ariane_cfg_t ArianeCfg = ariane_pkg::ArianeDefaultConfig
12+
) (
13+
input logic clk_i,
14+
input logic rst_ni,
15+
// Core ID, Cluster ID and boot address are considered more or less static
16+
input logic [63:0] boot_addr_i, // reset boot address
17+
input logic [63:0] hart_id_i, // hart id in a multicore environment (reflected in a CSR)
18+
19+
// Interrupt inputs
20+
input logic [1:0] irq_i, // level sensitive IR lines, mip & sip (async)
21+
input logic ipi_i, // inter-processor interrupts (async)
22+
// Timer facilities
23+
input logic time_irq_i, // timer interrupt in (async)
24+
input logic debug_req_i, // debug request (async)
25+
`ifdef FIRESIM_TRACE
26+
// firesim trace port
27+
output traced_instr_pkg::trace_port_t trace_o,
28+
`endif
29+
// RISC-V formal interface port (`rvfi`):
30+
// Can be left open when formal tracing is not needed.
31+
output logic rvfi_valid_1,
32+
output logic[63:0] rvfi_order_1,
33+
output logic[31:0] rvfi_insn_1,
34+
output logic rvfi_trap_1,
35+
output logic rvfi_halt_1,
36+
output logic rvfi_intr_1,
37+
output logic[2:0] rvfi_mode_1,
38+
output logic[2:0] rvfi_ixl_1,
39+
output logic[4:0] rvfi_rs1_addr_1,
40+
output logic[4:0] rvfi_rs2_addr_1,
41+
output logic[riscv::XLEN-1:0] rvfi_rs1_rdata_1,
42+
output logic[riscv::XLEN-1:0] rvfi_rs2_rdata_1,
43+
output logic[4:0] rvfi_rd_addr_1,
44+
output logic[riscv::XLEN-1:0] rvfi_rd_wdata_1,
45+
output logic[riscv::XLEN-1:0] rvfi_pc_rdata_1,
46+
output logic[riscv::XLEN-1:0] rvfi_pc_wdata_1,
47+
output logic[riscv::XLEN-1:0] rvfi_mem_addr_1,
48+
output logic[(riscv::XLEN)/8-1:0] rvfi_mem_rmask_1,
49+
output logic[(riscv::XLEN)/8-1:0] rvfi_mem_wmask_1,
50+
output logic[riscv::XLEN-1:0] rvfi_mem_rdata_1,
51+
output logic[riscv::XLEN-1:0] rvfi_mem_wdata_1,
52+
output logic rvfi_valid_0,
53+
output logic[63:0] rvfi_order_0,
54+
output logic[31:0] rvfi_insn_0,
55+
output logic rvfi_trap_0,
56+
output logic rvfi_halt_0,
57+
output logic rvfi_intr_0,
58+
output logic[2:0] rvfi_mode_0,
59+
output logic[2:0] rvfi_ixl_0,
60+
output logic[4:0] rvfi_rs1_addr_0,
61+
output logic[4:0] rvfi_rs2_addr_0,
62+
output logic[riscv::XLEN-1:0] rvfi_rs1_rdata_0,
63+
output logic[riscv::XLEN-1:0] rvfi_rs2_rdata_0,
64+
output logic[4:0] rvfi_rd_addr_0,
65+
output logic[riscv::XLEN-1:0] rvfi_rd_wdata_0,
66+
output logic[riscv::XLEN-1:0] rvfi_pc_rdata_0,
67+
output logic[riscv::XLEN-1:0] rvfi_pc_wdata_0,
68+
output logic[riscv::XLEN-1:0] rvfi_mem_addr_0,
69+
output logic[(riscv::XLEN)/8-1:0] rvfi_mem_rmask_0,
70+
output logic[(riscv::XLEN)/8-1:0] rvfi_mem_wmask_0,
71+
output logic[riscv::XLEN-1:0] rvfi_mem_rdata_0,
72+
output logic[riscv::XLEN-1:0] rvfi_mem_wdata_0,
73+
`ifdef PITON_ARIANE
74+
// L15 (memory side)
75+
output wt_cache_pkg::l15_req_t l15_req_o,
76+
input wt_cache_pkg::l15_rtrn_t l15_rtrn_i
77+
`else
78+
// memory side, AXI Master
79+
output ariane_axi::id_t aw_id_o,
80+
output ariane_axi::addr_t aw_addr_o,
81+
output axi_pkg::len_t aw_len_o,
82+
output axi_pkg::size_t aw_size_o,
83+
output axi_pkg::burst_t aw_burst_o,
84+
output logic aw_lock_o,
85+
output axi_pkg::cache_t aw_cache_o,
86+
output axi_pkg::prot_t aw_prot_o,
87+
output axi_pkg::qos_t aw_qos_o,
88+
output axi_pkg::region_t aw_region_o,
89+
output axi_pkg::atop_t aw_atop_o,
90+
output ariane_axi::user_t aw_user_o,
91+
output logic aw_valid_o,
92+
output ariane_axi::data_t w_data_o,
93+
output ariane_axi::strb_t w_strb_o,
94+
output logic w_last_o,
95+
output ariane_axi::user_t w_user_o,
96+
output logic w_valid_o,
97+
output logic b_ready_o,
98+
output ariane_axi::id_t ar_id_o,
99+
output ariane_axi::addr_t ar_addr_o,
100+
output axi_pkg::len_t ar_len_o,
101+
output axi_pkg::size_t ar_size_o,
102+
output axi_pkg::burst_t ar_burst_o,
103+
output logic ar_lock_o,
104+
output axi_pkg::cache_t ar_cache_o,
105+
output axi_pkg::prot_t ar_prot_o,
106+
output axi_pkg::qos_t ar_qos_o,
107+
output axi_pkg::region_t ar_region_o,
108+
output ariane_axi::user_t ar_user_o,
109+
output logic ar_valid_o,
110+
output logic r_ready_o,
111+
input logic aw_ready_i,
112+
input logic ar_ready_i,
113+
input logic w_ready_i,
114+
input logic b_valid_i,
115+
input ariane_axi::id_t b_id_i,
116+
input axi_pkg::resp_t b_resp_i,
117+
input ariane_axi::user_t b_user_i,
118+
input logic r_valid_i,
119+
input ariane_axi::id_t r_id_i,
120+
input ariane_axi::data_t r_data_i,
121+
input axi_pkg::resp_t r_resp_i,
122+
input logic r_last_i,
123+
input ariane_axi::user_t r_user_i
124+
`endif
125+
);
126+
127+
ariane_axi::req_t axi_ariane_req;
128+
ariane_axi::resp_t axi_ariane_resp;
129+
ariane_rvfi_pkg::rvfi_port_t rvfi;
130+
131+
assign aw_id_o = axi_ariane_req.aw.id;
132+
assign aw_addr_o = axi_ariane_req.aw.addr;
133+
assign aw_len_o = axi_ariane_req.aw.len;
134+
assign aw_size_o = axi_ariane_req.aw.size;
135+
assign aw_burst_o = axi_ariane_req.aw.burst;
136+
assign aw_lock_o = axi_ariane_req.aw.lock;
137+
assign aw_cache_o = axi_ariane_req.aw.cache;
138+
assign aw_prot_o = axi_ariane_req.aw.prot;
139+
assign aw_qos_o = axi_ariane_req.aw.qos;
140+
assign aw_region_o = axi_ariane_req.aw.region;
141+
assign aw_atop_o = axi_ariane_req.aw.atop;
142+
assign aw_user_o = axi_ariane_req.aw.user;
143+
assign aw_valid_o = axi_ariane_req.aw_valid;
144+
assign w_data_o = axi_ariane_req.w.data;
145+
assign w_strb_o = axi_ariane_req.w.strb;
146+
assign w_last_o = axi_ariane_req.w.last;
147+
assign w_user_o = axi_ariane_req.w.user;
148+
assign w_valid_o = axi_ariane_req.w_valid;
149+
assign b_ready_o = axi_ariane_req.b_ready;
150+
assign ar_id_o = axi_ariane_req.ar.id;
151+
assign ar_addr_o = axi_ariane_req.ar.addr;
152+
assign ar_len_o = axi_ariane_req.ar.len;
153+
assign ar_size_o = axi_ariane_req.ar.size;
154+
assign ar_burst_o = axi_ariane_req.ar.burst;
155+
assign ar_lock_o = axi_ariane_req.ar.lock;
156+
assign ar_cache_o = axi_ariane_req.ar.cache;
157+
assign ar_prot_o = axi_ariane_req.ar.prot;
158+
assign ar_qos_o = axi_ariane_req.ar.qos;
159+
assign ar_region_o = axi_ariane_req.ar.region;
160+
assign ar_user_o = axi_ariane_req.ar.user;
161+
assign ar_valid_o = axi_ariane_req.ar_valid;
162+
assign r_ready_o = axi_ariane_req.r_ready;
163+
164+
assign axi_ariane_resp.aw_ready = aw_ready_i;
165+
assign axi_ariane_resp.ar_ready = ar_ready_i;
166+
assign axi_ariane_resp.w_ready = w_ready_i;
167+
assign axi_ariane_resp.b_valid = b_valid_i;
168+
assign axi_ariane_resp.b.id = b_id_i;
169+
assign axi_ariane_resp.b.resp = b_resp_i;
170+
assign axi_ariane_resp.b.user = b_user_i;
171+
assign axi_ariane_resp.r_valid = r_valid_i;
172+
assign axi_ariane_resp.r.id = r_id_i;
173+
assign axi_ariane_resp.r.data = r_data_i;
174+
assign axi_ariane_resp.r.resp = r_resp_i;
175+
assign axi_ariane_resp.r.last = r_last_i;
176+
assign axi_ariane_resp.r.user = r_user_i;
177+
178+
assign rvfi_valid_1 = rvfi[1].valid;
179+
assign rvfi_order_1 = rvfi[1].order;
180+
assign rvfi_insn_1 = rvfi[1].insn;
181+
assign rvfi_trap_1 = rvfi[1].trap;
182+
assign rvfi_halt_1 = rvfi[1].halt;
183+
assign rvfi_intr_1 = rvfi[1].intr;
184+
assign rvfi_mode_1 = rvfi[1].mode;
185+
assign rvfi_ixl_1 = rvfi[1].ixl;
186+
assign rvfi_rs1_addr_1 = rvfi[1].rs1_addr;
187+
assign rvfi_rs2_addr_1 = rvfi[1].rs2_addr;
188+
assign rvfi_rs1_rdata_1 = rvfi[1].rs1_rdata;
189+
assign rvfi_rs2_rdata_1 = rvfi[1].rs2_rdata;
190+
assign rvfi_rd_addr_1 = rvfi[1].rd_addr;
191+
assign rvfi_rd_wdata_1 = rvfi[1].rd_wdata;
192+
assign rvfi_pc_rdata_1 = rvfi[1].pc_rdata;
193+
assign rvfi_pc_wdata_1 = rvfi[1].pc_wdata;
194+
assign rvfi_mem_addr_1 = rvfi[1].mem_addr;
195+
assign rvfi_mem_rmask_1 = rvfi[1].mem_rmask;
196+
assign rvfi_mem_wmask_1 = rvfi[1].mem_wmask;
197+
assign rvfi_mem_rdata_1 = rvfi[1].mem_rdata;
198+
assign rvfi_mem_wdata_1 = rvfi[1].mem_wdata;
199+
assign rvfi_valid_0 = rvfi[0].valid;
200+
assign rvfi_order_0 = rvfi[0].order;
201+
assign rvfi_insn_0 = rvfi[0].insn;
202+
assign rvfi_trap_0 = rvfi[0].trap;
203+
assign rvfi_halt_0 = rvfi[0].halt;
204+
assign rvfi_intr_0 = rvfi[0].intr;
205+
assign rvfi_mode_0 = rvfi[0].mode;
206+
assign rvfi_ixl_0 = rvfi[0].ixl;
207+
assign rvfi_rs1_addr_0 = rvfi[0].rs1_addr;
208+
assign rvfi_rs2_addr_0 = rvfi[0].rs2_addr;
209+
assign rvfi_rs1_rdata_0 = rvfi[0].rs1_rdata;
210+
assign rvfi_rs2_rdata_0 = rvfi[0].rs2_rdata;
211+
assign rvfi_rd_addr_0 = rvfi[0].rd_addr;
212+
assign rvfi_rd_wdata_0 = rvfi[0].rd_wdata;
213+
assign rvfi_pc_rdata_0 = rvfi[0].pc_rdata;
214+
assign rvfi_pc_wdata_0 = rvfi[0].pc_wdata;
215+
assign rvfi_mem_addr_0 = rvfi[0].mem_addr;
216+
assign rvfi_mem_rmask_0 = rvfi[0].mem_rmask;
217+
assign rvfi_mem_wmask_0 = rvfi[0].mem_wmask;
218+
assign rvfi_mem_rdata_0 = rvfi[0].mem_rdata;
219+
assign rvfi_mem_wdata_0 = rvfi[0].mem_wdata;
220+
221+
ariane #(
222+
.ArianeCfg ( ariane_soc::ArianeSocCfg )
223+
) i_ariane (
224+
.clk_i ( clk_i ),
225+
.rst_ni ( rst_ni ),
226+
.boot_addr_i ( boot_addr_i ),
227+
.hart_id_i ( hart_id_i ),
228+
.irq_i ( irq_i ),
229+
.ipi_i ( ipi_i ),
230+
.time_irq_i ( time_irq_i ),
231+
.rvfi_o ( rvfi ),
232+
.debug_req_i ( debug_req_i ),
233+
.axi_req_o ( axi_ariane_req ),
234+
.axi_resp_i ( axi_ariane_resp )
235+
);
236+
237+
endmodule // ariane_wrapper

0 commit comments

Comments
 (0)