mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-23 13:27:10 -04:00
Tracer: Mark all functions "automatic"
By default, variables in functions are static in SystemVerilog. This caused `string desc = "";` in `get_fence_description` to be executed only once, i.e. the text was continuously extended from the last call. Mark all functions `automatic` to get behavior as one would expect from normal functions.
This commit is contained in:
parent
24315515f6
commit
fde40564a2
1 changed files with 29 additions and 29 deletions
|
@ -88,7 +88,7 @@ module ibex_tracer (
|
|||
localparam MEM = (1 << 3);
|
||||
logic [3:0] data_accessed;
|
||||
|
||||
function void printbuffer_dumpline();
|
||||
function automatic void printbuffer_dumpline();
|
||||
string rvfi_insn_str;
|
||||
|
||||
if (file_handle == 32'h0) begin
|
||||
|
@ -136,7 +136,7 @@ module ibex_tracer (
|
|||
|
||||
|
||||
// Format register address with "x" prefix, left-aligned to a fixed width of 3 characters.
|
||||
function string reg_addr_to_str(input logic [4:0] addr);
|
||||
function automatic string reg_addr_to_str(input logic [4:0] addr);
|
||||
if (addr < 10) begin
|
||||
return $sformatf(" x%0d", addr);
|
||||
end else begin
|
||||
|
@ -145,7 +145,7 @@ module ibex_tracer (
|
|||
endfunction
|
||||
|
||||
// Get a CSR name for a CSR address.
|
||||
function string get_csr_name(input logic [11:0] csr_addr);
|
||||
function automatic string get_csr_name(input logic [11:0] csr_addr);
|
||||
unique case (csr_addr)
|
||||
12'd0: return "ustatus";
|
||||
12'd4: return "uie";
|
||||
|
@ -391,22 +391,22 @@ module ibex_tracer (
|
|||
endcase
|
||||
endfunction
|
||||
|
||||
function void decode_mnemonic(input string mnemonic);
|
||||
function automatic void decode_mnemonic(input string mnemonic);
|
||||
decoded_str = mnemonic;
|
||||
endfunction
|
||||
|
||||
function void decode_r_insn(input string mnemonic);
|
||||
function automatic void decode_r_insn(input string mnemonic);
|
||||
data_accessed = RS1 | RS2 | RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,x%0d,x%0d", mnemonic, rvfi_rd_addr, rvfi_rs1_addr, rvfi_rs2_addr);
|
||||
endfunction
|
||||
|
||||
function void decode_i_insn(input string mnemonic);
|
||||
function automatic void decode_i_insn(input string mnemonic);
|
||||
data_accessed = RS1 | RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,x%0d,%0d", mnemonic, rvfi_rd_addr, rvfi_rs1_addr,
|
||||
$signed({{20 {rvfi_insn[31]}}, rvfi_insn[31:20]}));
|
||||
endfunction
|
||||
|
||||
function void decode_i_shift_insn(input string mnemonic);
|
||||
function automatic void decode_i_shift_insn(input string mnemonic);
|
||||
// SLLI, SRLI, SRAI
|
||||
logic [4:0] shamt;
|
||||
shamt = {rvfi_insn[24:20]};
|
||||
|
@ -414,25 +414,25 @@ module ibex_tracer (
|
|||
decoded_str = $sformatf("%s\tx%0d,x%0d,0x%0x", mnemonic, rvfi_rd_addr, rvfi_rs1_addr, shamt);
|
||||
endfunction
|
||||
|
||||
function void decode_i_jalr_insn(input string mnemonic);
|
||||
function automatic void decode_i_jalr_insn(input string mnemonic);
|
||||
// JALR
|
||||
data_accessed = RS1 | RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,%0d(x%0d)", mnemonic, rvfi_rd_addr,
|
||||
$signed({{20 {rvfi_insn[31]}}, rvfi_insn[31:20]}), rvfi_rs1_addr);
|
||||
endfunction
|
||||
|
||||
function void decode_u_insn(input string mnemonic);
|
||||
function automatic void decode_u_insn(input string mnemonic);
|
||||
data_accessed = RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,0x%0x", mnemonic, rvfi_rd_addr, {rvfi_insn[31:12]});
|
||||
endfunction
|
||||
|
||||
function void decode_j_insn(input string mnemonic);
|
||||
function automatic void decode_j_insn(input string mnemonic);
|
||||
// JAL
|
||||
data_accessed = RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,%0x", mnemonic, rvfi_rd_addr, rvfi_pc_wdata);
|
||||
endfunction
|
||||
|
||||
function void decode_b_insn(input string mnemonic);
|
||||
function automatic void decode_b_insn(input string mnemonic);
|
||||
logic [31:0] branch_target;
|
||||
logic [31:0] imm;
|
||||
|
||||
|
@ -445,7 +445,7 @@ module ibex_tracer (
|
|||
decoded_str = $sformatf("%s\tx%0d,x%0d,%0x", mnemonic, rvfi_rs1_addr, rvfi_rs2_addr, branch_target);
|
||||
endfunction
|
||||
|
||||
function void decode_csr_insn(input string mnemonic);
|
||||
function automatic void decode_csr_insn(input string mnemonic);
|
||||
logic [11:0] csr;
|
||||
string csr_name;
|
||||
csr = rvfi_insn[31:20];
|
||||
|
@ -461,7 +461,7 @@ module ibex_tracer (
|
|||
end
|
||||
endfunction
|
||||
|
||||
function void decode_cr_insn(input string mnemonic);
|
||||
function automatic void decode_cr_insn(input string mnemonic);
|
||||
if (rvfi_rs2_addr == 5'b0) begin
|
||||
if (rvfi_insn[12] == 1'b1) begin
|
||||
// C.JALR
|
||||
|
@ -477,42 +477,42 @@ module ibex_tracer (
|
|||
end
|
||||
endfunction
|
||||
|
||||
function void decode_ci_cli_insn(input string mnemonic);
|
||||
function automatic void decode_ci_cli_insn(input string mnemonic);
|
||||
logic [5:0] imm;
|
||||
imm = {rvfi_insn[12], rvfi_insn[6:2]};
|
||||
data_accessed = RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,%0d", mnemonic, rvfi_rd_addr, $signed(imm));
|
||||
endfunction
|
||||
|
||||
function void decode_ci_caddi_insn(input string mnemonic);
|
||||
function automatic void decode_ci_caddi_insn(input string mnemonic);
|
||||
logic [5:0] nzimm;
|
||||
nzimm = {rvfi_insn[12], rvfi_insn[6:2]};
|
||||
data_accessed = RS1 | RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,%0d", mnemonic, rvfi_rd_addr, $signed(nzimm));
|
||||
endfunction
|
||||
|
||||
function void decode_ci_caddi16sp_insn(input string mnemonic);
|
||||
function automatic void decode_ci_caddi16sp_insn(input string mnemonic);
|
||||
logic [9:0] nzimm;
|
||||
nzimm = {rvfi_insn[12], rvfi_insn[4:3], rvfi_insn[5], rvfi_insn[2], rvfi_insn[6], 4'b0};
|
||||
data_accessed = RS1 | RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,%0d", mnemonic, rvfi_rd_addr, $signed(nzimm));
|
||||
endfunction
|
||||
|
||||
function void decode_ci_clui_insn(input string mnemonic);
|
||||
function automatic void decode_ci_clui_insn(input string mnemonic);
|
||||
logic [5:0] nzimm;
|
||||
nzimm = {rvfi_insn[12], rvfi_insn[6:2]};
|
||||
data_accessed = RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,0x%0x", mnemonic, rvfi_rd_addr, 20'($signed(nzimm)));
|
||||
endfunction
|
||||
|
||||
function void decode_ci_cslli_insn(input string mnemonic);
|
||||
function automatic void decode_ci_cslli_insn(input string mnemonic);
|
||||
logic [5:0] shamt;
|
||||
shamt = {rvfi_insn[12], rvfi_insn[6:2]};
|
||||
data_accessed = RS1 | RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,0x%0x", mnemonic, rvfi_rd_addr, shamt);
|
||||
endfunction
|
||||
|
||||
function void decode_ciw_insn(input string mnemonic);
|
||||
function automatic void decode_ciw_insn(input string mnemonic);
|
||||
// C.ADDI4SPN
|
||||
logic [9:0] nzuimm;
|
||||
nzuimm = {rvfi_insn[10:7], rvfi_insn[12:11], rvfi_insn[5], rvfi_insn[6], 2'b00};
|
||||
|
@ -520,14 +520,14 @@ module ibex_tracer (
|
|||
decoded_str = $sformatf("%s\tx%0d,x2,%0d", mnemonic, rvfi_rd_addr, nzuimm);
|
||||
endfunction
|
||||
|
||||
function void decode_cb_sr_insn(input string mnemonic);
|
||||
function automatic void decode_cb_sr_insn(input string mnemonic);
|
||||
logic [5:0] shamt;
|
||||
shamt = {rvfi_insn[12], rvfi_insn[6:2]};
|
||||
data_accessed = RS1 | RD;
|
||||
decoded_str = $sformatf("%s\tx%0d,0x%0x", mnemonic, rvfi_rs1_addr, shamt);
|
||||
endfunction
|
||||
|
||||
function void decode_cb_insn(input string mnemonic);
|
||||
function automatic void decode_cb_insn(input string mnemonic);
|
||||
logic [7:0] imm;
|
||||
logic [31:0] jump_target;
|
||||
if (rvfi_insn[15:13] == 3'b110 || rvfi_insn[15:13] == 3'b111) begin
|
||||
|
@ -549,12 +549,12 @@ module ibex_tracer (
|
|||
end
|
||||
endfunction
|
||||
|
||||
function void decode_cs_insn(input string mnemonic);
|
||||
function automatic void decode_cs_insn(input string mnemonic);
|
||||
data_accessed = RS1 | RS2 | RD; // RS1 == RD
|
||||
decoded_str = $sformatf("%s\tx%0d,x%0d", mnemonic, rvfi_rd_addr, rvfi_rs2_addr);
|
||||
endfunction
|
||||
|
||||
function void decode_cj_insn(input string mnemonic);
|
||||
function automatic void decode_cj_insn(input string mnemonic);
|
||||
if (rvfi_insn[15:13] == 3'b001) begin
|
||||
// C.JAL
|
||||
data_accessed = RD;
|
||||
|
@ -562,7 +562,7 @@ module ibex_tracer (
|
|||
decoded_str = $sformatf("%s\t%0x", mnemonic, rvfi_pc_wdata);
|
||||
endfunction
|
||||
|
||||
function void decode_compressed_load_insn(input string mnemonic);
|
||||
function automatic void decode_compressed_load_insn(input string mnemonic);
|
||||
logic [7:0] imm;
|
||||
|
||||
if (rvfi_insn[1:0] == OPCODE_C0) begin
|
||||
|
@ -576,7 +576,7 @@ module ibex_tracer (
|
|||
decoded_str = $sformatf("%s\tx%0d,%0d(x%0d)", mnemonic, rvfi_rd_addr, imm, rvfi_rs1_addr);
|
||||
endfunction
|
||||
|
||||
function void decode_compressed_store_insn(input string mnemonic);
|
||||
function automatic void decode_compressed_store_insn(input string mnemonic);
|
||||
logic [7:0] imm;
|
||||
if (rvfi_insn[1:0] == OPCODE_C0) begin
|
||||
// C.SW
|
||||
|
@ -589,7 +589,7 @@ module ibex_tracer (
|
|||
decoded_str = $sformatf("%s\tx%0d,%0d(x%0d)", mnemonic, rvfi_rs2_addr, imm, rvfi_rs1_addr);
|
||||
endfunction
|
||||
|
||||
function void decode_load_insn();
|
||||
function automatic void decode_load_insn();
|
||||
string mnemonic;
|
||||
|
||||
/*
|
||||
|
@ -632,7 +632,7 @@ module ibex_tracer (
|
|||
$signed({{20 {rvfi_insn[31]}}, rvfi_insn[31:20]}), rvfi_rs1_addr);
|
||||
endfunction
|
||||
|
||||
function void decode_store_insn();
|
||||
function automatic void decode_store_insn();
|
||||
string mnemonic;
|
||||
|
||||
unique case (rvfi_insn[13:12])
|
||||
|
@ -655,7 +655,7 @@ module ibex_tracer (
|
|||
end
|
||||
endfunction
|
||||
|
||||
function string get_fence_description(logic [3:0] bits);
|
||||
function automatic string get_fence_description(logic [3:0] bits);
|
||||
string desc = "";
|
||||
if (bits[3]) begin
|
||||
desc = {desc, "i"};
|
||||
|
@ -672,7 +672,7 @@ module ibex_tracer (
|
|||
return desc;
|
||||
endfunction
|
||||
|
||||
function void decode_fence();
|
||||
function automatic void decode_fence();
|
||||
string predecessor;
|
||||
string successor;
|
||||
predecessor = get_fence_description(rvfi_insn[27:24]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue