Skip to content

Commit 39c41e4

Browse files
committed
got 'mouse' tracing for Spike working again
1 parent b21fb22 commit 39c41e4

File tree

7 files changed

+157
-282
lines changed

7 files changed

+157
-282
lines changed

hdl/tbn/riscof/r5p_mouse_riscof_tb.sv

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ import riscv_asm_pkg::*;
142142
// TCB system bus (shared by instruction/load/store)
143143
.tcb_vld (tcb_cpu.vld),
144144
.tcb_wen (tcb_cpu.req.wen),
145+
.tcb_ren (tcb_cpu.req.ren),
146+
.tcb_xen (tcb_cpu.req.xen),
145147
.tcb_adr (tcb_cpu.req.adr),
146148
.tcb_siz (tcb_cpu.req.siz),
147149
.tcb_wdt (tcb_cpu.req.wdt),
@@ -228,20 +230,22 @@ import riscv_asm_pkg::*;
228230

229231
`ifdef TRACE_SPIKE
230232

231-
// GPR array
232-
logic [XLEN-1:0] gpr [0:32-1];
233-
234-
// copy GPR array from system memory
235-
// TODO: apply proper streaming operator
236-
assign gpr = {>> XLEN {mem.mem[GPR_ADR & (MEM_SIZ-1) +: 4*8]}};
237-
238-
// system bus monitor
239-
r5p_mouse_trace_spike r5p_log (
240-
// instruction execution phase
241-
.pha (dut.ctl_pha),
242-
// TCB system bus
243-
.tcb (tcb_cpu)
244-
);
233+
// GPR array
234+
logic [XLEN-1:0] gpr [0:32-1];
235+
236+
// copy GPR array from system memory
237+
// TODO: apply proper streaming operator
238+
assign gpr = {>> XLEN {mem.mem[GPR_ADR & (MEM_SIZ-1) +: 4*8]}};
239+
240+
// trace with Spike format
241+
r5p_mouse_trace #(
242+
.FORMAT ("Spike")
243+
) trace_hdldb (
244+
// instruction execution phase
245+
.pha (dut.ctl_pha),
246+
// TCB system bus
247+
.tcb (tcb_cpu)
248+
);
245249

246250
`endif
247251

hdl/tbn/riscof/r5p_mouse_trace_spike.sv

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

hdl/tbn/riscof/trace_spike_pkg.sv

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,17 @@ package trace_spike_pkg;
3838
// IFU
3939
logic [XLEN-1:0] ifu_adr, // PC (IFU address)
4040
logic [XLEN-1:0] ifu_ins, // instruction
41-
logic ifu_ill, // instruction is illegal
4241
// WBU (write back to destination register)
43-
logic wbu_vld, // valid
42+
logic wbu_ena, // enable
4443
logic [ 5-1:0] wbu_idx, // index of destination register
4544
logic [XLEN-1:0] wbu_dat, // data
4645
// LSU
47-
logic lsu_vld, // valid
48-
logic lsu_wen, // enable
49-
logic [ 5-1:0] lsu_idx, // index of data source register
46+
logic lsu_ena, // enable
47+
logic lsu_wen, // write enable
48+
logic lsu_ren, // read enable
5049
logic [XLEN-1:0] lsu_adr, // PC (IFU address)
5150
logic [XLEN-1:0] lsu_siz, // load/store size
52-
logic [XLEN-1:0] lsu_wdt, // write data (store)
53-
logic [XLEN-1:0] lsu_rdt // read data (load)
51+
logic [XLEN-1:0] lsu_wdt // write data (store)
5452
);
5553
string str_if; // instruction fetch
5654
string str_wb; // write-back
@@ -62,22 +60,27 @@ package trace_spike_pkg;
6260
str_if = $sformatf(" 0x%8h (0x%8h)", ifu_adr, ifu_ins);
6361

6462
// prepare write-back
65-
str_wb = wbu_vld ? $sformatf(" %s 0x%8h", format_gpr(wbu_idx), wbu_dat) : "";
63+
str_wb = wbu_ena ? $sformatf(" %s 0x%8h", format_gpr(wbu_idx), wbu_dat) : "";
6664

6765
// prepare load
68-
str_ld = $sformatf(" mem 0x%8h", lsu_adr);
66+
if (lsu_ena & lsu_ren) begin
67+
str_ld = $sformatf(" mem 0x%8h", lsu_adr);
68+
end else begin
69+
str_ld = "";
70+
end
6971

7072
// prepare store
71-
case (lsu_siz)
72-
2'd0: str_st = $sformatf(" mem 0x%8h 0x%2h", lsu_adr, lsu_wdt[ 8-1:0]);
73-
2'd1: str_st = $sformatf(" mem 0x%8h 0x%4h", lsu_adr, lsu_wdt[16-1:0]);
74-
2'd2: str_st = $sformatf(" mem 0x%8h 0x%8h", lsu_adr, lsu_wdt[32-1:0]);
75-
// 2'd3: str_st = $sformatf(" mem 0x%8h 0x%16h", lsu_adr, lsu_wdt[64-1:0]);
76-
default: $error("Unsupported store size %0d", lsu_siz);
77-
endcase
78-
79-
// prepare load/store
80-
str_ls = lsu_vld ? (lsu_wen ? str_st : str_ld) : "";
73+
if (lsu_ena & lsu_wen) begin
74+
case (lsu_siz)
75+
2'd0: str_st = $sformatf(" mem 0x%8h 0x%2h", lsu_adr, lsu_wdt[ 8-1:0]);
76+
2'd1: str_st = $sformatf(" mem 0x%8h 0x%4h", lsu_adr, lsu_wdt[16-1:0]);
77+
2'd2: str_st = $sformatf(" mem 0x%8h 0x%8h", lsu_adr, lsu_wdt[32-1:0]);
78+
// 2'd3: str_st = $sformatf(" mem 0x%8h 0x%16h", lsu_adr, lsu_wdt[64-1:0]);
79+
default: $error("Unsupported store size %0d", lsu_siz);
80+
endcase
81+
end else begin
82+
str_st = "";
83+
end
8184

8285
// combine fetch/write-back/load/store
8386
return($sformatf("core %0d: 3%s%s%s%s\n", core, str_if, str_wb, str_ld, str_st));

hdl/tbn/soc/r5p_mouse_soc_top_tb.sv

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,20 +95,20 @@ module r5p_mouse_soc_top_tb #(
9595
endgenerate
9696

9797
////////////////////////////////////////////////////////////////////////////////
98-
// GDB stub instance
98+
// tracing
9999
////////////////////////////////////////////////////////////////////////////////
100100

101101
`ifdef TRACE_HDLDB
102102

103-
// system bus monitor
104-
r5p_mouse_trace #(
105-
.FORMAT ("HDLDB")
106-
) trace_hdldb (
107-
// instruction execution phase
108-
.pha (dut.ctl_pha),
109-
// TCB system bus
110-
.tcb (dut.tcb_cpu)
111-
);
103+
// trace with HDLDB format
104+
r5p_mouse_trace #(
105+
.FORMAT ("HDLDB")
106+
) trace_hdldb (
107+
// instruction execution phase
108+
.pha (dut.ctl_pha),
109+
// TCB system bus
110+
.tcb (dut.tcb_cpu)
111+
);
112112

113113
`endif
114114

0 commit comments

Comments
 (0)