mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Moved I-Cache offset selection mux to icache.sv (top level).
When we switch to set associative this is will be more efficient.
This commit is contained in:
parent
fdc7c673dd
commit
35afdecda2
@ -184,47 +184,47 @@ add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/N
|
|||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/D
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/D
|
||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/Q
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/Q
|
||||||
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/rem0
|
add wave -noupdate -group divider /testbench/dut/hart/mdu/genblk1/div/rem0
|
||||||
add wave -noupdate -group icache -color Orange /testbench/dut/hart/ifu/icache/controller/CurrState
|
add wave -noupdate -expand -group icache -color Orange /testbench/dut/hart/ifu/icache/controller/CurrState
|
||||||
add wave -noupdate -group icache /testbench/dut/hart/ifu/icache/controller/NextState
|
add wave -noupdate -expand -group icache /testbench/dut/hart/ifu/icache/controller/NextState
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/hit
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/hit
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spill
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spill
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/ICacheStallF
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/ICacheStallF
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/SavePC
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/SavePC
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/UnalignedSelect
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/UnalignedSelect
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PCMux
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PCMux
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/spillSave
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntReset
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntReset
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PreCntEn
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/PreCntEn
|
||||||
add wave -noupdate -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntEn
|
add wave -noupdate -expand -group icache -expand -group {fsm out and control} /testbench/dut/hart/ifu/icache/controller/CntEn
|
||||||
add wave -noupdate -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/AHBByteLength
|
add wave -noupdate -expand -group icache -expand -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/NUMLINES
|
||||||
add wave -noupdate -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/AHBOFFETWIDTH
|
add wave -noupdate -expand -group icache -expand -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/BLOCKLEN
|
||||||
add wave -noupdate -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/BlockByteLength
|
add wave -noupdate -expand -group icache -expand -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/BLOCKBYTELEN
|
||||||
add wave -noupdate -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/OFFSETWIDTH
|
add wave -noupdate -expand -group icache -expand -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/OFFSETLEN
|
||||||
add wave -noupdate -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/WORDSPERLINE
|
add wave -noupdate -expand -group icache -expand -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/INDEXLEN
|
||||||
add wave -noupdate -group icache -group parameters /testbench/dut/hart/ifu/icache/controller/LOGWPL
|
add wave -noupdate -expand -group icache -expand -group {icache parameters} -radix unsigned /testbench/dut/hart/ifu/icache/cachemem/TAGLEN
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCountFlag
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCountFlag
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCount
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/FetchCount
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrPAdrF
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrPAdrF
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrReadF
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrReadF
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrAckF
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrAckF
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrInF
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/InstrInF
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteEnable
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteEnable
|
||||||
add wave -noupdate -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteData
|
add wave -noupdate -expand -group icache -expand -group memory /testbench/dut/hart/ifu/icache/controller/ICacheMemWriteData
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataValidBit
|
add wave -noupdate -expand -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataValidBit
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataValid
|
add wave -noupdate -expand -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataValid
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataTag
|
add wave -noupdate -expand -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/DataTag
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/cachetags/ReadData
|
add wave -noupdate -expand -group icache -expand -group memory -group {tag read} /testbench/dut/hart/ifu/icache/cachemem/cachetags/ReadData
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteEnable
|
add wave -noupdate -expand -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteEnable
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteLine
|
add wave -noupdate -expand -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/WriteLine
|
||||||
add wave -noupdate -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/cachetags/StoredData
|
add wave -noupdate -expand -group icache -expand -group memory -group {tag write} /testbench/dut/hart/ifu/icache/cachemem/cachetags/StoredData
|
||||||
add wave -noupdate -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/FinalInstrRawF
|
add wave -noupdate -expand -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/FinalInstrRawF
|
||||||
add wave -noupdate -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/AlignedInstrRawD
|
add wave -noupdate -expand -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/AlignedInstrRawD
|
||||||
add wave -noupdate -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/FlushDLastCyclen
|
add wave -noupdate -expand -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/FlushDLastCyclen
|
||||||
add wave -noupdate -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/InstrRawD
|
add wave -noupdate -expand -group icache -expand -group {instr to cpu} /testbench/dut/hart/ifu/icache/controller/InstrRawD
|
||||||
add wave -noupdate -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPF
|
add wave -noupdate -expand -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPF
|
||||||
add wave -noupdate -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPreFinalF
|
add wave -noupdate -expand -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPreFinalF
|
||||||
add wave -noupdate -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPFinalF
|
add wave -noupdate -expand -group icache -expand -group pc /testbench/dut/hart/ifu/icache/controller/PCPFinalF
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/BusState
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/BusState
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HCLK
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HCLK
|
||||||
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HRDATA
|
add wave -noupdate -group AHB /testbench/dut/hart/ebu/HRDATA
|
||||||
@ -245,7 +245,7 @@ add wave -noupdate -group csr -color Aquamarine -label {br executed} -radix unsi
|
|||||||
add wave -noupdate -group csr -color Aquamarine -label {br miss predicted} -radix unsigned {/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[4]}
|
add wave -noupdate -group csr -color Aquamarine -label {br miss predicted} -radix unsigned {/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[4]}
|
||||||
add wave -noupdate -group csr -childformat {{{/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[5]} -radix unsigned} {{/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[4]} -radix unsigned}} -subitemconfig {{/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[5]} {-height 16 -radix unsigned} {/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[4]} {-height 16 -radix unsigned}} /testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW
|
add wave -noupdate -group csr -childformat {{{/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[5]} -radix unsigned} {{/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[4]} -radix unsigned}} -subitemconfig {{/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[5]} {-height 16 -radix unsigned} {/testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW[4]} {-height 16 -radix unsigned}} /testbench/dut/hart/priv/csr/genblk1/counters/genblk2/HPMCOUNTER_REGW
|
||||||
TreeUpdate [SetDefaultTree]
|
TreeUpdate [SetDefaultTree]
|
||||||
WaveRestoreCursors {{Cursor 4} {32648010 ns} 0} {{Cursor 5} {2172501 ns} 0}
|
WaveRestoreCursors {{Cursor 4} {32648010 ns} 0} {{Cursor 5} {759692 ns} 0}
|
||||||
quietly wave cursor active 2
|
quietly wave cursor active 2
|
||||||
configure wave -namecolwidth 250
|
configure wave -namecolwidth 250
|
||||||
configure wave -valuecolwidth 189
|
configure wave -valuecolwidth 189
|
||||||
@ -261,4 +261,4 @@ configure wave -griddelta 40
|
|||||||
configure wave -timeline 0
|
configure wave -timeline 0
|
||||||
configure wave -timelineunits ns
|
configure wave -timelineunits ns
|
||||||
update
|
update
|
||||||
WaveRestoreZoom {0 ns} {391986 ns}
|
WaveRestoreZoom {1826338 ns} {1988889 ns}
|
||||||
|
54
wally-pipelined/src/cache/ICacheMem.sv
vendored
54
wally-pipelined/src/cache/ICacheMem.sv
vendored
@ -8,28 +8,22 @@ module ICacheMem #(parameter NUMLINES=512, parameter BLOCKLEN = 256)
|
|||||||
// If flush is high, invalidate the entire cache
|
// If flush is high, invalidate the entire cache
|
||||||
input logic flush,
|
input logic flush,
|
||||||
|
|
||||||
// Select which address to read (broken for efficiency's sake)
|
input logic [`XLEN-1:0] PCTagF, // physical address
|
||||||
input logic [`XLEN-1:0] PCTagF, // physical tag address
|
input logic [`XLEN-1:0] PCNextIndexF, // virtual address
|
||||||
input logic [`XLEN-1:0] PCNextIndexF,
|
|
||||||
// Write new data to the cache
|
|
||||||
input logic WriteEnable,
|
input logic WriteEnable,
|
||||||
input logic [BLOCKLEN-1:0] WriteLine,
|
input logic [BLOCKLEN-1:0] WriteLine,
|
||||||
// Output the word, as well as if it is valid
|
output logic [BLOCKLEN-1:0] ReadLineF,
|
||||||
output logic [31:0] DataWord, // *** was `XLEN-1
|
output logic HitF
|
||||||
output logic DataValid
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// divide the address bus into sections, tag, index, offset
|
// divide the address bus into sections; tag, index, and offset
|
||||||
localparam BLOCKBYTELEN = BLOCKLEN/8;
|
localparam BLOCKBYTELEN = BLOCKLEN/8;
|
||||||
localparam OFFSETLEN = $clog2(BLOCKBYTELEN);
|
localparam OFFSETLEN = $clog2(BLOCKBYTELEN);
|
||||||
localparam INDEXLEN = $clog2(NUMLINES);
|
localparam INDEXLEN = $clog2(NUMLINES);
|
||||||
|
// *** BUG. `XLEN needs to be replaced with the virtual address width, S32, S39, or S48
|
||||||
localparam TAGLEN = `XLEN - OFFSETLEN - INDEXLEN;
|
localparam TAGLEN = `XLEN - OFFSETLEN - INDEXLEN;
|
||||||
|
|
||||||
// Machinery to read from and write to the correct addresses in memory
|
logic [TAGLEN-1:0] LookupTag;
|
||||||
logic [BLOCKLEN-1:0] ReadLine;
|
|
||||||
|
|
||||||
// Machinery to check if a given read is valid and is the desired value
|
|
||||||
logic [TAGLEN-1:0] DataTag;
|
|
||||||
logic [NUMLINES-1:0] ValidOut;
|
logic [NUMLINES-1:0] ValidOut;
|
||||||
logic DataValidBit;
|
logic DataValidBit;
|
||||||
|
|
||||||
@ -37,43 +31,17 @@ module ICacheMem #(parameter NUMLINES=512, parameter BLOCKLEN = 256)
|
|||||||
sram1rw #(.DEPTH(BLOCKLEN), .WIDTH(NUMLINES))
|
sram1rw #(.DEPTH(BLOCKLEN), .WIDTH(NUMLINES))
|
||||||
cachemem (.*,
|
cachemem (.*,
|
||||||
.Addr(PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
.Addr(PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
.ReadData(ReadLine),
|
.ReadData(ReadLineF),
|
||||||
.WriteData(WriteLine)
|
.WriteData(WriteLine)
|
||||||
);
|
);
|
||||||
|
|
||||||
sram1rw #(.DEPTH(TAGLEN), .WIDTH(NUMLINES))
|
sram1rw #(.DEPTH(TAGLEN), .WIDTH(NUMLINES))
|
||||||
cachetags (.*,
|
cachetags (.*,
|
||||||
.Addr(PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
.Addr(PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
.ReadData(DataTag),
|
.ReadData(LookupTag),
|
||||||
.WriteData(PCTagF[`XLEN-1:INDEXLEN+OFFSETLEN])
|
.WriteData(PCTagF[`XLEN-1:INDEXLEN+OFFSETLEN])
|
||||||
);
|
);
|
||||||
|
|
||||||
// Pick the right bits coming out the read line
|
|
||||||
//assign DataWord = ReadLineTransformed[ReadOffset];
|
|
||||||
//logic [31:0] tempRD;
|
|
||||||
always_comb begin
|
|
||||||
case (PCTagF[4:1])
|
|
||||||
0: DataWord = ReadLine[31:0];
|
|
||||||
1: DataWord = ReadLine[47:16];
|
|
||||||
2: DataWord = ReadLine[63:32];
|
|
||||||
3: DataWord = ReadLine[79:48];
|
|
||||||
|
|
||||||
4: DataWord = ReadLine[95:64];
|
|
||||||
5: DataWord = ReadLine[111:80];
|
|
||||||
6: DataWord = ReadLine[127:96];
|
|
||||||
7: DataWord = ReadLine[143:112];
|
|
||||||
|
|
||||||
8: DataWord = ReadLine[159:128];
|
|
||||||
9: DataWord = ReadLine[175:144];
|
|
||||||
10: DataWord = ReadLine[191:160];
|
|
||||||
11: DataWord = ReadLine[207:176];
|
|
||||||
|
|
||||||
12: DataWord = ReadLine[223:192];
|
|
||||||
13: DataWord = ReadLine[239:208];
|
|
||||||
14: DataWord = ReadLine[255:224];
|
|
||||||
15: DataWord = {16'b0, ReadLine[255:240]};
|
|
||||||
endcase
|
|
||||||
end
|
|
||||||
|
|
||||||
// Correctly handle the valid bits
|
// Correctly handle the valid bits
|
||||||
always_ff @(posedge clk, posedge reset) begin
|
always_ff @(posedge clk, posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
@ -87,5 +55,5 @@ module ICacheMem #(parameter NUMLINES=512, parameter BLOCKLEN = 256)
|
|||||||
end
|
end
|
||||||
DataValidBit <= ValidOut[PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]];
|
DataValidBit <= ValidOut[PCNextIndexF[INDEXLEN+OFFSETLEN-1:OFFSETLEN]];
|
||||||
end
|
end
|
||||||
assign DataValid = DataValidBit && (DataTag == PCTagF[`XLEN-1:INDEXLEN+OFFSETLEN]);
|
assign HitF = DataValidBit && (LookupTag == PCTagF[`XLEN-1:INDEXLEN+OFFSETLEN]);
|
||||||
endmodule
|
endmodule
|
||||||
|
34
wally-pipelined/src/cache/icache.sv
vendored
34
wally-pipelined/src/cache/icache.sv
vendored
@ -25,7 +25,8 @@
|
|||||||
|
|
||||||
`include "wally-config.vh"
|
`include "wally-config.vh"
|
||||||
|
|
||||||
module icache(
|
module icache
|
||||||
|
(
|
||||||
// Basic pipeline stuff
|
// Basic pipeline stuff
|
||||||
input logic clk, reset,
|
input logic clk, reset,
|
||||||
input logic StallF, StallD,
|
input logic StallF, StallD,
|
||||||
@ -62,6 +63,8 @@ module icache(
|
|||||||
logic [31:0] ICacheMemReadData;
|
logic [31:0] ICacheMemReadData;
|
||||||
logic ICacheMemReadValid;
|
logic ICacheMemReadValid;
|
||||||
logic ICacheReadEn;
|
logic ICacheReadEn;
|
||||||
|
logic [BLOCKLEN-1:0] ReadLineF;
|
||||||
|
|
||||||
|
|
||||||
ICacheMem #(.BLOCKLEN(BLOCKLEN), .NUMLINES(NUMLINES))
|
ICacheMem #(.BLOCKLEN(BLOCKLEN), .NUMLINES(NUMLINES))
|
||||||
cachemem(
|
cachemem(
|
||||||
@ -70,10 +73,35 @@ module icache(
|
|||||||
.flush(FlushMem),
|
.flush(FlushMem),
|
||||||
.WriteEnable(ICacheMemWriteEnable),
|
.WriteEnable(ICacheMemWriteEnable),
|
||||||
.WriteLine(ICacheMemWriteData),
|
.WriteLine(ICacheMemWriteData),
|
||||||
.DataWord(ICacheMemReadData),
|
.ReadLineF(ReadLineF),
|
||||||
.DataValid(ICacheMemReadValid)
|
.HitF(ICacheMemReadValid)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
always_comb begin
|
||||||
|
case (PCTagF[4:1])
|
||||||
|
0: ICacheMemReadData = ReadLineF[31:0];
|
||||||
|
1: ICacheMemReadData = ReadLineF[47:16];
|
||||||
|
2: ICacheMemReadData = ReadLineF[63:32];
|
||||||
|
3: ICacheMemReadData = ReadLineF[79:48];
|
||||||
|
|
||||||
|
4: ICacheMemReadData = ReadLineF[95:64];
|
||||||
|
5: ICacheMemReadData = ReadLineF[111:80];
|
||||||
|
6: ICacheMemReadData = ReadLineF[127:96];
|
||||||
|
7: ICacheMemReadData = ReadLineF[143:112];
|
||||||
|
|
||||||
|
8: ICacheMemReadData = ReadLineF[159:128];
|
||||||
|
9: ICacheMemReadData = ReadLineF[175:144];
|
||||||
|
10: ICacheMemReadData = ReadLineF[191:160];
|
||||||
|
11: ICacheMemReadData = ReadLineF[207:176];
|
||||||
|
|
||||||
|
12: ICacheMemReadData = ReadLineF[223:192];
|
||||||
|
13: ICacheMemReadData = ReadLineF[239:208];
|
||||||
|
14: ICacheMemReadData = ReadLineF[255:224];
|
||||||
|
15: ICacheMemReadData = {16'b0, ReadLineF[255:240]};
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
ICacheCntrl #(.BLOCKLEN(BLOCKLEN)) controller(.*);
|
ICacheCntrl #(.BLOCKLEN(BLOCKLEN)) controller(.*);
|
||||||
|
|
||||||
// For now, assume no writes to executable memory
|
// For now, assume no writes to executable memory
|
||||||
|
Loading…
Reference in New Issue
Block a user