mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Added parameter to spillsupport.
This commit is contained in:
parent
7b96b3f73c
commit
d78ba777a4
@ -124,7 +124,7 @@ module ifu (
|
|||||||
|
|
||||||
if(`C_SUPPORTED) begin : SpillSupport
|
if(`C_SUPPORTED) begin : SpillSupport
|
||||||
|
|
||||||
spillsupport spillsupport(.clk, .reset, .StallF, .PCF, .PCPlusUpperF, .PCNextF, .InstrRawF,
|
spillsupport #(CACHE_ENABLED) spillsupport(.clk, .reset, .StallF, .PCF, .PCPlusUpperF, .PCNextF, .InstrRawF,
|
||||||
.InstrDAPageFaultF, .IFUCacheBusStallF, .ITLBMissF, .PCNextFSpill, .PCFSpill,
|
.InstrDAPageFaultF, .IFUCacheBusStallF, .ITLBMissF, .PCNextFSpill, .PCFSpill,
|
||||||
.SelNextSpillF, .PostSpillInstrRawF, .CompressedF);
|
.SelNextSpillF, .PostSpillInstrRawF, .CompressedF);
|
||||||
end else begin : NoSpillSupport
|
end else begin : NoSpillSupport
|
||||||
|
@ -32,30 +32,30 @@
|
|||||||
|
|
||||||
`include "wally-config.vh"
|
`include "wally-config.vh"
|
||||||
|
|
||||||
module spillsupport (
|
module spillsupport #(parameter CACHE_ENABLED)
|
||||||
input logic clk,
|
(input logic clk,
|
||||||
input logic reset,
|
input logic reset,
|
||||||
input logic StallF,
|
input logic StallF,
|
||||||
input logic [`XLEN-1:0] PCF,
|
input logic [`XLEN-1:0] PCF,
|
||||||
input logic [`XLEN-3:0] PCPlusUpperF,
|
input logic [`XLEN-3:0] PCPlusUpperF,
|
||||||
input logic [`XLEN-1:0] PCNextF,
|
input logic [`XLEN-1:0] PCNextF,
|
||||||
input logic [31:0] InstrRawF,
|
input logic [31:0] InstrRawF,
|
||||||
input logic IFUCacheBusStallF,
|
input logic IFUCacheBusStallF,
|
||||||
input logic ITLBMissF,
|
input logic ITLBMissF,
|
||||||
input logic InstrDAPageFaultF,
|
input logic InstrDAPageFaultF,
|
||||||
output logic [`XLEN-1:0] PCNextFSpill,
|
output logic [`XLEN-1:0] PCNextFSpill,
|
||||||
output logic [`XLEN-1:0] PCFSpill,
|
output logic [`XLEN-1:0] PCFSpill,
|
||||||
output logic SelNextSpillF,
|
output logic SelNextSpillF,
|
||||||
output logic [31:0] PostSpillInstrRawF,
|
output logic [31:0] PostSpillInstrRawF,
|
||||||
output logic CompressedF);
|
output logic CompressedF);
|
||||||
|
|
||||||
|
|
||||||
localparam integer SPILLTHRESHOLD = (`IMEM == `MEM_CACHE) ? `ICACHE_LINELENINBITS/32 : 1;
|
localparam integer SPILLTHRESHOLD = CACHE_ENABLED ? `ICACHE_LINELENINBITS/32 : 1;
|
||||||
logic [`XLEN-1:0] PCPlus2F;
|
logic [`XLEN-1:0] PCPlus2F;
|
||||||
logic TakeSpillF;
|
logic TakeSpillF;
|
||||||
logic SpillF;
|
logic SpillF;
|
||||||
logic SelSpillF, SpillSaveF;
|
logic SelSpillF, SpillSaveF;
|
||||||
logic [15:0] SpillDataLine0;
|
logic [15:0] SpillDataLine0, SavedInstr;
|
||||||
typedef enum logic [1:0] {STATE_READY, STATE_SPILL} statetype;
|
typedef enum logic [1:0] {STATE_READY, STATE_SPILL} statetype;
|
||||||
(* mark_debug = "true" *) statetype CurrState, NextState;
|
(* mark_debug = "true" *) statetype CurrState, NextState;
|
||||||
|
|
||||||
@ -86,11 +86,12 @@ module spillsupport (
|
|||||||
assign SelNextSpillF = (CurrState == STATE_READY & TakeSpillF) |
|
assign SelNextSpillF = (CurrState == STATE_READY & TakeSpillF) |
|
||||||
(CurrState == STATE_SPILL & IFUCacheBusStallF);
|
(CurrState == STATE_SPILL & IFUCacheBusStallF);
|
||||||
assign SpillSaveF = (CurrState == STATE_READY) & TakeSpillF;
|
assign SpillSaveF = (CurrState == STATE_READY) & TakeSpillF;
|
||||||
|
assign SavedInstr = CACHE_ENABLED ? InstrRawF[15:0] : InstrRawF[31:16];
|
||||||
|
|
||||||
flopenr #(16) SpillInstrReg(.clk(clk),
|
flopenr #(16) SpillInstrReg(.clk(clk),
|
||||||
.en(SpillSaveF),
|
.en(SpillSaveF),
|
||||||
.reset(reset),
|
.reset(reset),
|
||||||
.d((`IMEM == `MEM_CACHE) ? InstrRawF[15:0] : InstrRawF[31:16]),
|
.d(SavedInstr),
|
||||||
.q(SpillDataLine0));
|
.q(SpillDataLine0));
|
||||||
|
|
||||||
mux2 #(32) postspillmux(.d0(InstrRawF), .d1({InstrRawF[15:0], SpillDataLine0}), .s(SpillF),
|
mux2 #(32) postspillmux(.d0(InstrRawF), .d1({InstrRawF[15:0], SpillDataLine0}), .s(SpillF),
|
||||||
|
Loading…
Reference in New Issue
Block a user