mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Removed more *** from camline and csrc.
This commit is contained in:
parent
576f1b9e59
commit
91c844ca45
@ -41,7 +41,7 @@ module tlbcamline import cvw::*; #(parameter cvw_t P,
|
||||
input logic PTE_NAPOT, // entry is in NAPOT mode (N bit set and PPN[3:0] = 1000)
|
||||
input logic [1:0] PageTypeWriteVal,
|
||||
input logic TLBFlush, // Flush this line (set valid to 0)
|
||||
output logic [1:0] PageTypeRead, // *** should this be the stored version or the always updated one?
|
||||
output logic [1:0] PageTypeRead,
|
||||
output logic Match
|
||||
);
|
||||
|
||||
@ -102,8 +102,6 @@ module tlbcamline import cvw::*; #(parameter cvw_t P,
|
||||
|
||||
// On a write, set the valid bit high and update the stored key.
|
||||
// On a flush, zero the valid bit and leave the key unchanged.
|
||||
// *** Might we want to update stored key right away to output match on the
|
||||
// write cycle? (using a mux)
|
||||
flopenr #(1) validbitflop(clk, reset, WriteEnable | TLBFlush, ~TLBFlush, Valid);
|
||||
flopenr #(KEY_BITS) keyflop(clk, reset, WriteEnable, {SATP_ASID, VPN}, Key);
|
||||
endmodule
|
||||
|
@ -95,11 +95,13 @@ module csrc import cvw::*; #(parameter cvw_t P) (
|
||||
assign CounterEvent[1] = 1'b0; // Counter 1 doesn't exist
|
||||
assign CounterEvent[2] = InstrValidNotFlushedM; // MINSTRET instructions retired
|
||||
if (P.ZIHPM_SUPPORTED) begin: cevent // User-defined counters
|
||||
assign CounterEvent[3] = IClassM[0] & InstrValidNotFlushedM; // branch instruction
|
||||
assign CounterEvent[4] = IClassM[1] & ~IClassM[2] & InstrValidNotFlushedM; // jump and not return instructions
|
||||
assign CounterEvent[5] = IClassM[2] & InstrValidNotFlushedM; // return instructions
|
||||
// Ideally all events would be counted in the M stage, but the pipelining is costly. The counters may
|
||||
// count an event in a previous pipeline stage.
|
||||
assign CounterEvent[3] = IClassM[0] & InstrValidNotFlushedM; // branch instruction
|
||||
assign CounterEvent[4] = IClassM[1] & ~IClassM[2] & InstrValidNotFlushedM; // jump and not return instructions
|
||||
assign CounterEvent[5] = IClassM[2] & InstrValidNotFlushedM; // return instructions
|
||||
assign CounterEvent[6] = BPWrongM & InstrValidNotFlushedM; // branch predictor wrong
|
||||
assign CounterEvent[7] = BPDirWrongM & InstrValidNotFlushedM; // Branch predictor wrong direction
|
||||
assign CounterEvent[7] = BPDirWrongM & InstrValidNotFlushedM; // Branch predictor wrong direction
|
||||
assign CounterEvent[8] = BTAWrongM & InstrValidNotFlushedM; // branch predictor wrong target
|
||||
assign CounterEvent[9] = RASPredPCWrongM & InstrValidNotFlushedM; // return address stack wrong address
|
||||
assign CounterEvent[10] = IClassWrongM & InstrValidNotFlushedM; // instruction class predictor wrong
|
||||
@ -117,8 +119,8 @@ module csrc import cvw::*; #(parameter cvw_t P) (
|
||||
assign CounterEvent[22] = InterruptM; // interrupt, InstrValidNotFlushedM will be low
|
||||
assign CounterEvent[23] = ExceptionM; // exceptions, InstrValidNotFlushedM will be low
|
||||
// coverage off
|
||||
// DivBusyE will never be assert high since this configuration uses the FPU to do integer division
|
||||
assign CounterEvent[24] = DivBusyE | FDivBusyE; // division cycles *** RT: might need to be delay until the next cycle
|
||||
// DivBusyE will never be asserted high because the RV64GC configuration uses the FPU to do integer division
|
||||
assign CounterEvent[24] = DivBusyE | FDivBusyE; // division cycles
|
||||
// coverage on
|
||||
assign CounterEvent[P.COUNTERS-1:25] = '0; // eventually give these sources, including FP instructions, I$/D$ misses, branches and mispredictions
|
||||
end else begin: cevent
|
||||
|
Loading…
Reference in New Issue
Block a user