-
Notifications
You must be signed in to change notification settings - Fork 416
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #733 from openhwgroup/dev
Automatic PR dev->master
- Loading branch information
Showing
8 changed files
with
2,601 additions
and
131 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
|
||
module cv32e40p_rvfi_trace | ||
import cv32e40p_pkg::*; | ||
( | ||
input logic clk_i, | ||
input logic rst_ni, | ||
|
||
input logic [31:0] hart_id_i, | ||
|
||
input logic [31:0] imm_s3_type, | ||
|
||
input logic rvfi_valid, | ||
input logic [31:0] rvfi_insn, | ||
input logic [31:0] rvfi_pc_rdata, | ||
|
||
input logic [ 4:0] rvfi_rd_addr, | ||
input logic [31:0] rvfi_rd_wdata, | ||
input logic [ 4:0] rvfi_rs1_addr, | ||
input logic [ 4:0] rvfi_rs2_addr, | ||
input logic [31:0] rvfi_rs1_rdata, | ||
input logic [31:0] rvfi_rs2_rdata | ||
); | ||
|
||
import cv32e40p_tracer_pkg::*; | ||
|
||
logic rst_n; | ||
assign rst_n = rst_ni; | ||
|
||
integer f; //file pointer | ||
string fn; | ||
integer cycles; | ||
string info_tag; | ||
|
||
logic [5:0] rd, rs1, rs2, rs3, rs4; | ||
//TODO get from rvfi | ||
logic [31:0] rs1_value; | ||
logic [31:0] rs2_value; | ||
logic [31:0] rs3_value; | ||
|
||
logic [31:0] rs2_value_vec; | ||
|
||
logic [31:0] imm_u_type; | ||
logic [31:0] imm_uj_type; | ||
logic [31:0] imm_i_type; | ||
logic [11:0] imm_iz_type; | ||
logic [31:0] imm_z_type; | ||
logic [31:0] imm_s_type; | ||
logic [31:0] imm_sb_type; | ||
logic [31:0] imm_s2_type; | ||
logic [31:0] imm_vs_type; | ||
logic [31:0] imm_vu_type; | ||
logic [31:0] imm_shuffle_type; | ||
logic [ 4:0] imm_clip_type; | ||
|
||
assign rd = rvfi_rd_addr; | ||
assign rs1 = rvfi_rs1_addr; | ||
assign rs2 = rvfi_rs2_addr; | ||
assign rs3 = '0; | ||
assign rs4 = '0; | ||
|
||
assign rs1_value = rvfi_rs1_rdata; | ||
assign rs2_value = rvfi_rs2_rdata; | ||
assign rs3_value = rvfi_rd_wdata; | ||
|
||
assign imm_u_typ = '0; | ||
assign imm_uj_typ = '0; | ||
assign imm_i_typ = '0; | ||
assign imm_iz_typ = '0; | ||
assign imm_z_typ = '0; | ||
assign imm_s_typ = '0; | ||
assign imm_sb_typ = '0; | ||
assign imm_s2_typ = '0; | ||
assign imm_vs_typ = '0; | ||
assign imm_vu_typ = '0; | ||
assign imm_shuffle_typ = '0; | ||
assign imm_clip_typ = '0; | ||
|
||
localparam FPU = 0; | ||
localparam PULP_ZFINX = 0; | ||
`include "cv32e40p_instr_trace.svh" | ||
instr_trace_t trace_retire; | ||
|
||
function instr_trace_t trace_new_instr(); | ||
instr_trace_t trace; | ||
|
||
trace = new(); | ||
trace.init(.cycles(cycles), .pc(rvfi_pc_rdata), .compressed(0), .instr(rvfi_insn)); | ||
return trace; | ||
endfunction : trace_new_instr | ||
|
||
// cycle counter | ||
always_ff @(posedge clk_i, negedge rst_ni) begin | ||
if (rst_ni == 1'b0) cycles <= 0; | ||
else cycles <= cycles + 1; | ||
end | ||
|
||
always @(posedge clk_i) begin | ||
if (rvfi_valid) begin | ||
trace_retire = trace_new_instr(); | ||
|
||
trace_retire.printInstrTrace(); | ||
end | ||
end | ||
|
||
initial begin | ||
wait(rst_n == 1'b1); | ||
$sformat(fn, "trace_core.log"); | ||
$sformat(info_tag, "CORE_TRACER %2d", hart_id_i); | ||
$display("[%s] Output filename is: %s", info_tag, fn); | ||
f = $fopen(fn, "w"); | ||
$fwrite(f, "Time\tCycle\tPC\tInstr\tDecoded instruction\tRegister and memory contents\n"); | ||
end | ||
|
||
|
||
|
||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
// Copyright (c) 2020 OpenHW Group | ||
// | ||
// Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// https://solderpad.org/licenses/ | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0 | ||
|
||
// Includes to print info about the RVFI output | ||
// Contributors: Davide Schiavone <[email protected]> | ||
// Halfdan Bechmann <[email protected]> | ||
|
||
package cv32e40p_rvfi_pkg; | ||
import cv32e40p_pkg::*; | ||
|
||
// RVFI only supports MHPMCOUNTER_WIDTH == 64 | ||
parameter MHPMCOUNTER_WORDS = MHPMCOUNTER_WIDTH / 32; | ||
|
||
parameter STAGE_IF = 0; | ||
parameter STAGE_ID = 1; | ||
parameter STAGE_EX = 2; | ||
parameter STAGE_WB = 3; | ||
|
||
typedef enum logic [1:0] { // Memory error types | ||
MEM_ERR_PMP = 2'h2, | ||
MEM_ERR_ATOMIC = 2'h1, | ||
MEM_ERR_IO_ALIGN = 2'h0 | ||
} mem_err_t; | ||
|
||
typedef struct packed { // Autonomously updated CSRs | ||
logic [31:0] mcycle; | ||
logic [31:0] mcycleh; | ||
logic [31:0] cycle; | ||
logic [31:0] cycleh; | ||
logic [31:0] mip; | ||
logic nmip; | ||
} rvfi_auto_csr_map_t; | ||
|
||
typedef struct packed { | ||
logic [31:0] jvt; | ||
logic [31:0] mstatus; | ||
logic [31:0] misa; | ||
logic [31:0] mie; | ||
logic [31:0] mtvec; | ||
logic [31:0] mstatush; | ||
logic [31:0] mtvt; | ||
logic [31:0] mcountinhibit; | ||
logic [31:0][31:0] mhpmevent; | ||
logic [31:0] mscratch; | ||
logic [31:0] mepc; | ||
logic [31:0] mcause; | ||
logic [31:0] mtval; | ||
logic [31:0] mip; | ||
logic [31:0] mnxti; | ||
logic [31:0] mintstatus; | ||
logic [31:0] mintthresh; | ||
logic [31:0] mscratchcsw; | ||
logic [31:0] mscratchcswl; | ||
logic [31:0] mclicbase; | ||
logic [31:0] tselect; | ||
logic [3:0][31:0] tdata; | ||
logic [31:0] tinfo; | ||
logic [31:0] mcontext; | ||
logic [31:0] scontext; | ||
logic [31:0] dcsr; | ||
logic [31:0] dpc; | ||
logic [1:0][31:0] dscratch; | ||
logic [31:0] mcycle; | ||
logic [31:0] minstret; | ||
logic [31:0][31:0] mhpmcounter; | ||
logic [31:0] mcycleh; | ||
logic [31:0] minstreth; | ||
logic [31:0][31:0] mhpmcounterh; | ||
logic [31:0] cycle; | ||
logic [31:0] instret; | ||
logic [31:0][31:0] hpmcounter; | ||
logic [31:0] cycleh; | ||
logic [31:0] instreth; | ||
logic [31:0][31:0] hpmcounterh; | ||
logic [31:0] mvendorid; | ||
logic [31:0] marchid; | ||
logic [31:0] mimpid; | ||
logic [31:0] mhartid; | ||
logic [31:0] mcounteren; | ||
logic [3:0][31:0] pmpcfg; | ||
logic [15:0][31:0] pmpaddr; | ||
logic [31:0] mseccfg; | ||
logic [31:0] mseccfgh; | ||
logic [31:0] mconfigptr; | ||
|
||
} rvfi_csr_map_t; | ||
|
||
typedef struct packed { | ||
logic [10:0] cause; | ||
logic debug; | ||
logic interrupt; | ||
logic wu; | ||
} rvfi_wu_t; | ||
|
||
typedef struct packed { | ||
logic [10:0] cause; | ||
logic interrupt; | ||
logic exception; | ||
logic intr; | ||
} rvfi_intr_t; | ||
|
||
typedef struct packed { | ||
logic [1:0] cause_type; | ||
logic [2:0] debug_cause; | ||
logic [5:0] exception_cause; | ||
logic debug; | ||
logic exception; | ||
logic trap; | ||
} rvfi_trap_t; | ||
|
||
endpackage // cv32e40p_rvfi_pkg |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.