[source]

Module ibex_tracer

clk_ilogicrst_nilogichart_id_i[31:0]logicrvfi_validlogicrvfi_order[63:0]logicrvfi_insn[31:0]logicrvfi_traplogicrvfi_haltlogicrvfi_intrlogicrvfi_mode[1:0]logicrvfi_ixl[1:0]logicrvfi_rs1_addr[4:0]logicrvfi_rs2_addr[4:0]logicrvfi_rs3_addr[4:0]logicrvfi_rs1_rdata[31:0]logicrvfi_rs2_rdata[31:0]logicrvfi_rs3_rdata[31:0]logicrvfi_rd_addr[4:0]logicrvfi_rd_wdata[31:0]logicrvfi_pc_rdata[31:0]logicrvfi_pc_wdata[31:0]logicrvfi_mem_addr[31:0]logicrvfi_mem_rmask[3:0]logicrvfi_mem_wmask[3:0]logicrvfi_mem_rdata[31:0]logicrvfi_mem_wdata[31:0]logic

Block Diagram of ibex_tracer

Trace executed instructions in simulation

This tracer takes execution information from the RISC-V Verification Interface (RVFI) and produces a text file with a human-readable trace.

All traced instructions are written to a log file. By default, the log file is named trace_core_.log, with being the 8 digit hart ID of the core being traced.

The file name base, defaulting to "trace_core" can be set using the "ibex_tracer_file_base" plusarg passed to the simulation, e.g. "+ibex_tracer_file_base=ibex_my_trace". The exact syntax of passing plusargs to a simulation depends on the simulator.

The creation of the instruction trace is enabled by default but can be disabled for a simulation. This behaviour is controlled by the plusarg "ibex_tracer_enable". Use "ibex_tracer_enable=0" to disable the tracer.

The trace contains six columns, separated by tabs

  • The simulation time

  • The clock cycle count since reset

  • The program counter (PC)

  • The instruction

  • The decoded instruction in the same format as objdump, together with the accessed registers and read/written memory values. Jumps and branches show the target address. This column may be omitted if the instruction does not decode into a long form.

  • Accessed registers and memory locations.

Significant effort is spent to make the decoding produced by this tracer as similar as possible to the one produced by objdump. This simplifies the correlation between the static program information from the objdump-generated disassembly, and the runtime information from this tracer.

Ports

Name

Type

Direction

Description

clk_i

wire logic

input

rst_ni

wire logic

input

hart_id_i

wire logic [31 : 0]

input

rvfi_valid

wire logic

input

RVFI as described at https://github.com/SymbioticEDA/riscv-formal/blob/master/docs/rvfi.md The standard interface does not have _i/_o suffixes. For consistency with the standard the signals in this module don't have the suffixes either.

rvfi_order

wire logic [63 : 0]

input

rvfi_insn

wire logic [31 : 0]

input

rvfi_trap

wire logic

input

rvfi_halt

wire logic

input

rvfi_intr

wire logic

input

rvfi_mode

wire logic [1 : 0]

input

rvfi_ixl

wire logic [1 : 0]

input

rvfi_rs1_addr

wire logic [4 : 0]

input

rvfi_rs2_addr

wire logic [4 : 0]

input

rvfi_rs3_addr

wire logic [4 : 0]

input

rvfi_rs1_rdata

wire logic [31 : 0]

input

rvfi_rs2_rdata

wire logic [31 : 0]

input

rvfi_rs3_rdata

wire logic [31 : 0]

input

rvfi_rd_addr

wire logic [4 : 0]

input

rvfi_rd_wdata

wire logic [31 : 0]

input

rvfi_pc_rdata

wire logic [31 : 0]

input

rvfi_pc_wdata

wire logic [31 : 0]

input

rvfi_mem_addr

wire logic [31 : 0]

input

rvfi_mem_rmask

wire logic [3 : 0]

input

rvfi_mem_wmask

wire logic [3 : 0]

input

rvfi_mem_rdata

wire logic [31 : 0]

input

rvfi_mem_wdata

wire logic [31 : 0]

input

Always Blocks

always_ff @(posedge clk_i or negedge rst_ni)

cycle counter

always @(posedge clk_i)

log execution

Functions

printbuffer_dumpline(int fh)
Parameters:

fh (int)

reg_addr_to_str(logic[4:0] addr)

Format register address with "x" prefix, left-aligned to a fixed width of 3 characters.

Parameters:

addr (logic[4:0])

get_csr_name(logic[11:0] csr_addr)

Get a CSR name for a CSR address.

Parameters:

csr_addr (logic[11:0])

decode_mnemonic(string mnemonic)
Parameters:

mnemonic (string)

decode_r_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_r1_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_r_cmixcmov_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_r_funnelshift_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_i_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_i_shift_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_i_funnelshift_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_i_jalr_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_u_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_j_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_b_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_csr_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_cr_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_ci_cli_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_ci_caddi_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_ci_caddi16sp_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_ci_clui_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_ci_cslli_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_ciw_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_cb_sr_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_cb_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_cs_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_cj_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_compressed_load_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_compressed_store_insn(string mnemonic)
Parameters:

mnemonic (string)

decode_load_insn()
decode_store_insn()
get_fence_description(logic[3:0] bits)
Parameters:

bits (logic[3:0])

decode_fence()