Skip to content

Commit 4717e80

Browse files
authored
Merge branch 'openhwgroup:master' into svnapot-feature
2 parents 954a57f + a667f48 commit 4717e80

97 files changed

Lines changed: 7842 additions & 359 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/verible.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ jobs:
2020
- uses: chipsalliance/verible-formatter-action@main
2121
with:
2222
github_token: ${{ secrets.GITHUB_TOKEN }}
23-
files: '$(find core -regex ".*\.\(v\|sv\)$" | grep -v "^core/include/.*_config_pkg.sv$")'
23+
files: '$(find core -regex ".*\.\(v\|sv\)$" | grep -v "^core/include/.*_config_pkg\.sv$")'
2424
fail_on_formatting_suggestions: true

.gitlab-ci.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,19 +238,20 @@ hello-pk:
238238
- when: manual
239239
allow_failure: true
240240

241-
iti-test:
241+
it-test:
242242
extends:
243243
- .synthesis_test
244244
variables:
245-
DASHBOARD_JOB_TITLE: "ITI test"
246-
DASHBOARD_JOB_DESCRIPTION: "Short test to challenge the Instruction Trace Interface"
245+
DASHBOARD_JOB_TITLE: "Instruction Trace test"
246+
DASHBOARD_JOB_DESCRIPTION: "Test to Challenge the Hardware flow of the Instruction Tracer"
247247
DASHBOARD_SORT_INDEX: 0
248248
DASHBOARD_JOB_CATEGORY: "Basic"
249249
DV_SIMULATORS: "vcs-testharness"
250250
script:
251-
- bash verif/regress/iti_test.sh
252-
- diff .gitlab-ci/iti_reference.trace .gitlab-ci/iti.trace
251+
- python3 .gitlab-ci/scripts/report_fail.py
252+
- bash verif/regress/Instr_tracing_test.sh ../tests/custom/ITI/test_iti_asm.o
253253
- python3 .gitlab-ci/scripts/report_pass.py
254+
- cp -r verif/sim/Instr_tracing_artifact artifacts/
254255

255256
spyglass:
256257
extends:

.gitlab-ci/iti_reference.trace

Lines changed: 0 additions & 159 deletions
This file was deleted.

Makefile

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,17 +201,34 @@ src := $(if $(spike-tandem),verif/tb/core/uvma_core_cntrl_pkg.sv)
201201
vendor/pulp-platform/tech_cells_generic/src/deprecated/cluster_clk_cells.sv \
202202
vendor/pulp-platform/tech_cells_generic/src/deprecated/pulp_clk_cells.sv \
203203
vendor/pulp-platform/tech_cells_generic/src/rtl/tc_clk.sv \
204-
core/include/iti_pkg.sv \
204+
corev_apu/instr_tracing/ITI/include/iti_pkg.sv \
205+
corev_apu/instr_tracing/rv_tracer-main/include/te_pkg.sv \
206+
corev_apu/instr_tracing/rv_encapsulator-main/src/include/encap_pkg.sv \
205207
corev_apu/tb/ariane_testharness.sv \
206208
corev_apu/tb/ariane_peripherals.sv \
207209
corev_apu/tb/rvfi_tracer.sv \
208210
corev_apu/tb/common/uart.sv \
209211
corev_apu/tb/common/SimDTM.sv \
210212
corev_apu/tb/common/SimJTAG.sv \
211-
core/cva6_iti/instr_to_trace.sv \
212-
core/cva6_iti/iti.sv \
213-
core/cva6_iti/itype_detector.sv
214-
213+
corev_apu/instr_tracing/ITI/cva6_iti/iti.sv \
214+
corev_apu/instr_tracing/ITI/cva6_iti/block_retirement.sv \
215+
corev_apu/instr_tracing/ITI/cva6_iti/single_retirement.sv \
216+
corev_apu/instr_tracing/ITI/cva6_iti/itype_detector.sv \
217+
vendor/pulp-platform/common_cells/src/counter.sv \
218+
vendor/pulp-platform/common_cells/src/sync.sv \
219+
vendor/pulp-platform/common_cells/src/sync_wedge.sv \
220+
vendor/pulp-platform/common_cells/src/edge_detect.sv \
221+
corev_apu/instr_tracing/rv_tracer-main/rtl/lzc.sv \
222+
corev_apu/instr_tracing/rv_tracer-main/rtl/te_branch_map.sv \
223+
corev_apu/instr_tracing/rv_tracer-main/rtl/te_filter.sv \
224+
corev_apu/instr_tracing/rv_tracer-main/rtl/te_packet_emitter.sv \
225+
corev_apu/instr_tracing/rv_tracer-main/rtl/te_priority.sv \
226+
corev_apu/instr_tracing/rv_tracer-main/rtl/te_reg.sv \
227+
corev_apu/instr_tracing/rv_tracer-main/rtl/te_resync_counter.sv \
228+
corev_apu/instr_tracing/rv_tracer-main/rtl/rv_tracer.sv \
229+
vendor/pulp-platform/common_cells/src/fifo_v3.sv \
230+
corev_apu/instr_tracing/DPTI/slicer_DPTI.sv \
231+
corev_apu/instr_tracing/rv_encapsulator-main/src/rtl/encapsulator.sv
215232
src := $(addprefix $(root-dir), $(src))
216233

217234
copro_src := core/cvxif_example/include/cvxif_instr_pkg.sv \
@@ -221,6 +238,9 @@ copro_src := $(addprefix $(root-dir), $(copro_src))
221238
uart_src := $(wildcard corev_apu/fpga/src/apb_uart/src/vhdl_orig/*.vhd)
222239
uart_src := $(addprefix $(root-dir), $(uart_src))
223240

241+
dpti_src := $(wildcard corev_apu/instr_tracing/DPTI/*.vhd)
242+
dpti_src := $(addprefix $(root-dir), $(dpti_src))
243+
224244
uart_src_sv:= corev_apu/fpga/src/apb_uart/src/slib_clock_div.sv \
225245
corev_apu/fpga/src/apb_uart/src/slib_counter.sv \
226246
corev_apu/fpga/src/apb_uart/src/slib_edge_detect.sv \
@@ -316,6 +336,7 @@ incdir := $(CVA6_REPO_DIR)/vendor/pulp-platform/common_cells/include/ $(CVA6_REP
316336
$(CVA6_REPO_DIR)/verif/core-v-verif/lib/uvm_agents/uvma_core_cntrl/ \
317337
$(CVA6_REPO_DIR)/verif/tb/core/ \
318338
$(CVA6_REPO_DIR)/core/include/ \
339+
$(CVA6_REPO_DIR)/corev_apu/instr_tracing/ITI/include \
319340
$(SPIKE_INSTALL_DIR)/include/disasm/
320341

321342
# Compile and sim flags
@@ -788,9 +809,10 @@ fpga_filter += $(addprefix $(root-dir), core/cache_subsystem/hpdcache/rtl/src/co
788809
$(addprefix $(root-dir), corev_apu/fpga/src/bootrom/bootrom_$(XLEN).sv):
789810
$(MAKE) -C corev_apu/fpga/src/bootrom BOARD=$(BOARD) XLEN=$(XLEN) PLATFORM=$(PLATFORM) bootrom_$(XLEN).sv
790811

791-
fpga: $(ariane_pkg) $(src) $(fpga_src) $(uart_src) $(src_flist)
812+
fpga: $(ariane_pkg) $(src) $(fpga_src) $(uart_src) $(dpti_src) $(src_flist)
792813
@echo "[FPGA] Generate sources"
793814
@echo read_vhdl {$(uart_src)} > corev_apu/fpga/scripts/add_sources.tcl
815+
@echo read_vhdl {$(dpti_src)} >> corev_apu/fpga/scripts/add_sources.tcl
794816
@echo read_verilog -sv {$(ariane_pkg)} >> corev_apu/fpga/scripts/add_sources.tcl
795817
@echo read_verilog -sv {$(filter-out $(fpga_filter), $(src_flist))} >> corev_apu/fpga/scripts/add_sources.tcl
796818
@echo read_verilog -sv {$(filter-out $(fpga_filter), $(src))} >> corev_apu/fpga/scripts/add_sources.tcl

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ bash verif/regress/smoke-tests.sh
6767
* **[Running Simulations](tutorials/running_sim.md)**
6868
* **[ASIC Implementation](tutorials/asic.md)**
6969
* **[FPGA Implementation and running an OS](tutorials/fpga.md)**
70-
70+
* **[Instruction Tracing](corev_apu/instr_tracing/README.md)**
7171

7272
# Directory Structure
7373

common/local/util/instr_trace_item.svh

Lines changed: 85 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class instr_trace_item #(
4141
logic result_fpr [$];
4242
logic [63:0] imm;
4343
logic [63:0] result;
44+
logic dest_we_valid;
45+
logic dest_is_fp;
4446
logic [CVA6Cfg.PLEN-1:0] paddr;
4547
string priv_lvl;
4648
bp_resolve_t bp;
@@ -49,14 +51,16 @@ class instr_trace_item #(
4951

5052
// constructor creating a new instruction trace item, e.g.: a single instruction with all relevant information
5153
function new (time simtime, longint unsigned cycle, scoreboard_entry_t sbe, logic [31:0] instr, logic [63:0] gp_reg_file [32],
52-
logic [63:0] fp_reg_file [32], logic [63:0] result, logic [CVA6Cfg.PLEN-1:0] paddr, riscv::priv_lvl_t priv_lvl, logic debug_mode, bp_resolve_t bp);
54+
logic [63:0] fp_reg_file [32], logic [63:0] result, logic dest_we_valid, logic dest_is_fp, logic [CVA6Cfg.PLEN-1:0] paddr, riscv::priv_lvl_t priv_lvl, logic debug_mode, bp_resolve_t bp);
5355
this.simtime = simtime;
5456
this.cycle = cycle;
5557
this.pc = sbe.pc;
5658
this.sbe = sbe;
5759
this.gp_reg_file = gp_reg_file;
5860
this.fp_reg_file = fp_reg_file;
5961
this.result = result;
62+
this.dest_we_valid = dest_we_valid;
63+
this.dest_is_fp = dest_is_fp;
6064
this.paddr = paddr;
6165
this.bp = bp;
6266
this.priv_lvl = (debug_mode) ? "D" : getPrivLevel(priv_lvl);
@@ -195,6 +199,68 @@ class instr_trace_item #(
195199
endcase
196200
endfunction
197201

202+
function logic scoreboardDestIsFp();
203+
if (sbe.fu inside {ariane_pkg::FPU, ariane_pkg::FPU_VEC}) begin
204+
return ariane_pkg::fd_changes_rd_state(sbe.op);
205+
end
206+
return ariane_pkg::is_rd_fpr(sbe.op);
207+
endfunction
208+
209+
function logic rawDestIsFp();
210+
if (dest_we_valid) begin
211+
return dest_is_fp;
212+
end
213+
return scoreboardDestIsFp();
214+
endfunction
215+
216+
function logic fpInstrForcesGprDest();
217+
logic [6:0] opcode = instr[6:0];
218+
logic [4:0] funct5 = instr[31:27];
219+
logic [2:0] rm = instr[14:12];
220+
221+
if (opcode == riscv::OpcodeOpFp) begin
222+
if (funct5 == 5'b11000) begin
223+
// fcvt.*.* instructions that target an integer register
224+
return 1'b1;
225+
end
226+
227+
if (funct5 == 5'b10100) begin
228+
// fle.*, flt.*, feq.* comparisons produce integer results.
229+
return 1'b1;
230+
end
231+
232+
if (funct5 == 5'b11100) begin
233+
// fmv.x.* (rm == 000) and fclass (rm == 001) always write GPRs.
234+
if ((rm == 3'b000) || (rm == 3'b001)) begin
235+
return 1'b1;
236+
end
237+
// Alternate encodings when FP16ALT is enabled mirror rm encodings.
238+
if (CVA6Cfg.XF16ALT && ((rm == 3'b100) || (rm == 3'b101))) begin
239+
return 1'b1;
240+
end
241+
end
242+
end
243+
244+
return 1'b0;
245+
endfunction
246+
247+
function logic effectiveDestIsFp();
248+
logic dest_is_fp_raw = rawDestIsFp();
249+
250+
if (fpInstrForcesGprDest()) begin
251+
return 1'b0;
252+
end
253+
254+
return dest_is_fp_raw;
255+
endfunction
256+
257+
function void adjustResultRegKinds();
258+
logic final_dest_is_fp = effectiveDestIsFp();
259+
foreach (result_fpr[i]) begin
260+
result_fpr[i] = final_dest_is_fp;
261+
end
262+
endfunction
263+
198264
function string printInstr();
199265
string s;
200266

@@ -379,6 +445,8 @@ class instr_trace_item #(
379445
// instr,
380446
// s);
381447

448+
adjustResultRegKinds();
449+
382450
foreach (result_regs[i]) begin
383451
if (result_fpr[i])
384452
s = $sformatf("%s %-4s:%16x", s, fpRegAddrToStr(result_regs[i]), this.result);
@@ -466,45 +534,48 @@ class instr_trace_item #(
466534

467535
function string printRFBCInstr(input string mnemonic, input bit use_rnd);
468536

537+
logic dest_fp = effectiveDestIsFp();
469538
result_regs.push_back(rd);
470-
result_fpr.push_back(ariane_pkg::is_rd_fpr(sbe.op));
539+
result_fpr.push_back(dest_fp);
471540
read_regs.push_back(rs2);
472541
read_fpr.push_back(ariane_pkg::is_rs2_fpr(sbe.op));
473542
read_regs.push_back(sbe.result[4:0]);
474543
read_fpr.push_back(ariane_pkg::is_imm_fpr(sbe.op));
475544

476545
if (use_rnd && instr[14:12]!=3'b111)
477-
return $sformatf("%-12s %4s, %s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), ariane_pkg::is_rd_fpr(sbe.op)?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2), ariane_pkg::is_imm_fpr(sbe.op)?fpRegAddrToStr(sbe.result[4:0]):regAddrToStr(sbe.result[4:0]), fpRmToStr(instr[14:12]));
546+
return $sformatf("%-12s %4s, %s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), dest_fp?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2), ariane_pkg::is_imm_fpr(sbe.op)?fpRegAddrToStr(sbe.result[4:0]):regAddrToStr(sbe.result[4:0]), fpRmToStr(instr[14:12]));
478547
else
479-
return $sformatf("%-12s %4s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), ariane_pkg::is_rd_fpr(sbe.op)?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2), ariane_pkg::is_imm_fpr(sbe.op)?fpRegAddrToStr(sbe.result[4:0]):regAddrToStr(sbe.result[4:0]));
548+
return $sformatf("%-12s %4s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), dest_fp?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2), ariane_pkg::is_imm_fpr(sbe.op)?fpRegAddrToStr(sbe.result[4:0]):regAddrToStr(sbe.result[4:0]));
480549
endfunction // printRFInstr
481550

482551
function string printRFInstr(input string mnemonic, input bit use_rnd);
483552

553+
logic dest_fp = effectiveDestIsFp();
484554
result_regs.push_back(rd);
485-
result_fpr.push_back(ariane_pkg::is_rd_fpr(sbe.op));
555+
result_fpr.push_back(dest_fp);
486556
read_regs.push_back(rs1);
487557
read_fpr.push_back(ariane_pkg::is_rs1_fpr(sbe.op));
488558
read_regs.push_back(rs2);
489559
read_fpr.push_back(ariane_pkg::is_rs2_fpr(sbe.op));
490560

491561
if (use_rnd && instr[14:12]!=3'b111)
492-
return $sformatf("%-12s %4s, %s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), ariane_pkg::is_rd_fpr(sbe.op)?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2), fpRmToStr(instr[14:12]));
562+
return $sformatf("%-12s %4s, %s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), dest_fp?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2), fpRmToStr(instr[14:12]));
493563
else
494-
return $sformatf("%-12s %4s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), ariane_pkg::is_rd_fpr(sbe.op)?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2));
564+
return $sformatf("%-12s %4s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), dest_fp?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1), ariane_pkg::is_rs2_fpr(sbe.op)?fpRegAddrToStr(rs2):regAddrToStr(rs2));
495565
endfunction // printRFInstr
496566

497567
function string printRFInstr1Op(input string mnemonic, input bit use_rnd);
498568

569+
logic dest_fp = effectiveDestIsFp();
499570
result_regs.push_back(rd);
500-
result_fpr.push_back(ariane_pkg::is_rd_fpr(sbe.op));
571+
result_fpr.push_back(dest_fp);
501572
read_regs.push_back(rs1);
502573
read_fpr.push_back(ariane_pkg::is_rs1_fpr(sbe.op));
503574

504575
if (use_rnd && instr[14:12]!=3'b111)
505-
return $sformatf("%-12s %4s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), ariane_pkg::is_rd_fpr(sbe.op)?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1), fpRmToStr(instr[14:12]));
576+
return $sformatf("%-12s %4s, %s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), dest_fp?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1), fpRmToStr(instr[14:12]));
506577
else
507-
return $sformatf("%-12s %4s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), ariane_pkg::is_rd_fpr(sbe.op)?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1));
578+
return $sformatf("%-12s %4s, %s", $sformatf("%s.%s",mnemonic, fpFmtToStr(instr[26:25])), dest_fp?fpRegAddrToStr(rd):regAddrToStr(rd), ariane_pkg::is_rs1_fpr(sbe.op)?fpRegAddrToStr(rs1):regAddrToStr(rs1));
508579
endfunction // printRFInstr1Op
509580

510581
function string printR4Instr(input string mnemonic);
@@ -523,8 +594,9 @@ class instr_trace_item #(
523594

524595
function string printFpSpecialInstr();
525596

597+
logic dest_fp = effectiveDestIsFp();
526598
result_regs.push_back(rd);
527-
result_fpr.push_back(ariane_pkg::is_rd_fpr(sbe.op));
599+
result_fpr.push_back(dest_fp);
528600
read_regs.push_back(rs1);
529601
read_fpr.push_back(ariane_pkg::is_rs1_fpr(sbe.op));
530602

@@ -634,8 +706,9 @@ class instr_trace_item #(
634706
endfunction // printCSRInstr
635707

636708
function string printLoadInstr(input string mnemonic);
709+
logic dest_fp = effectiveDestIsFp();
637710
result_regs.push_back(rd);
638-
result_fpr.push_back(ariane_pkg::is_rd_fpr(sbe.op));
711+
result_fpr.push_back(dest_fp);
639712
read_regs.push_back(rs1);
640713
read_fpr.push_back(1'b0);
641714
// save the immediate for calculating the virtual address

common/local/util/instr_tracer.sv

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,41 @@ module instr_tracer #(
168168
// check if the write back is valid, if not we need to source the result from the register file
169169
// as the most recent version of this register will be there.
170170
if (we_gpr[i] || we_fpr[i]) begin
171-
printInstr(issue_sbe_item, issue_commit_instruction, wdata[i], address_mapping, priv_lvl, debug_mode, bp_instruction);
171+
printInstr(
172+
issue_sbe_item,
173+
issue_commit_instruction,
174+
wdata[i],
175+
we_gpr[i] || we_fpr[i],
176+
we_fpr[i],
177+
address_mapping,
178+
priv_lvl,
179+
debug_mode,
180+
bp_instruction
181+
);
172182
end else if (ariane_pkg::is_rd_fpr(commit_instruction.op)) begin
173-
printInstr(issue_sbe_item, issue_commit_instruction, fp_reg_file[commit_instruction.rd], address_mapping, priv_lvl, debug_mode, bp_instruction);
183+
printInstr(
184+
issue_sbe_item,
185+
issue_commit_instruction,
186+
fp_reg_file[commit_instruction.rd],
187+
1'b0,
188+
1'b1,
189+
address_mapping,
190+
priv_lvl,
191+
debug_mode,
192+
bp_instruction
193+
);
174194
end else begin
175-
printInstr(issue_sbe_item, issue_commit_instruction, gp_reg_file[commit_instruction.rd], address_mapping, priv_lvl, debug_mode, bp_instruction);
195+
printInstr(
196+
issue_sbe_item,
197+
issue_commit_instruction,
198+
gp_reg_file[commit_instruction.rd],
199+
1'b0,
200+
1'b0,
201+
address_mapping,
202+
priv_lvl,
203+
debug_mode,
204+
bp_instruction
205+
);
176206
end
177207
end
178208
// --------------
@@ -224,16 +254,31 @@ module instr_tracer #(
224254
bp = {};
225255
endfunction
226256

227-
function void printInstr(scoreboard_entry_t sbe, logic [31:0] instr, logic [63:0] result, logic [CVA6Cfg.PLEN-1:0] paddr, riscv::priv_lvl_t priv_lvl, logic debug_mode, bp_resolve_t bp);
257+
function void printInstr(scoreboard_entry_t sbe, logic [31:0] instr, logic [63:0] result, logic dest_we_valid, logic dest_is_fp, logic [CVA6Cfg.PLEN-1:0] paddr, riscv::priv_lvl_t priv_lvl, logic debug_mode, bp_resolve_t bp);
228258
automatic instr_trace_item #(
229259
.CVA6Cfg(CVA6Cfg),
230260
.bp_resolve_t(bp_resolve_t),
231261
.scoreboard_entry_t(scoreboard_entry_t)
232-
) iti = new ($time, clk_ticks, sbe, instr, gp_reg_file, fp_reg_file, result, paddr, priv_lvl, debug_mode, bp);
262+
) iti = new (
263+
$time,
264+
clk_ticks,
265+
sbe,
266+
instr,
267+
gp_reg_file,
268+
fp_reg_file,
269+
result,
270+
dest_we_valid,
271+
dest_is_fp,
272+
paddr,
273+
priv_lvl,
274+
debug_mode,
275+
bp
276+
);
233277
// print instruction to console
234278
automatic string print_instr = iti.printInstr();
279+
automatic logic commit_is_fp = dest_we_valid ? dest_is_fp : ariane_pkg::is_rd_fpr(sbe.op);
235280
if (ariane_pkg::ENABLE_SPIKE_COMMIT_LOG && !debug_mode) begin
236-
$fwrite(commit_log, riscv::spikeCommitLog(sbe.pc, priv_lvl, instr, sbe.rd, result, ariane_pkg::is_rd_fpr(sbe.op)));
281+
$fwrite(commit_log, riscv::spikeCommitLog(sbe.pc, priv_lvl, instr, sbe.rd, result, commit_is_fp));
237282
end
238283
$fwrite(f, {print_instr, "\n"});
239284
endfunction

0 commit comments

Comments
 (0)