forked from Github_Repos/cvw
got rid of some underscores in filenames, modules
This commit is contained in:
parent
c96695b1b6
commit
1e174a8244
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////
|
||||
// cam_line.sv
|
||||
// camline.sv
|
||||
//
|
||||
// Written: tfleming@hmc.edu & jtorrey@hmc.edu 6 April 2021
|
||||
// Modified: kmacsaigoren@hmc.edu 1 June 2021
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
`include "wally-config.vh"
|
||||
|
||||
module cam_line #(parameter KEY_BITS = 20,
|
||||
module camline #(parameter KEY_BITS = 20,
|
||||
parameter SEGMENT_BITS = 10) (
|
||||
input clk, reset,
|
||||
|
@ -27,11 +27,11 @@
|
||||
|
||||
module decoder #(parameter BINARY_BITS = 3) (
|
||||
input [BINARY_BITS-1:0] binary,
|
||||
output [(2**BINARY_BITS)-1:0] one_hot
|
||||
output [(2**BINARY_BITS)-1:0] onehot
|
||||
);
|
||||
|
||||
// *** Double check whether this synthesizes as expected
|
||||
// -- Ben @ May 4: only warning is that "signed to unsigned assignment occurs"; that said, I haven't checked the netlists
|
||||
assign one_hot = 1 << binary;
|
||||
assign onehot = 1 << binary;
|
||||
|
||||
endmodule
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////
|
||||
// priority_encoder.sv
|
||||
// priorityencoder.sv
|
||||
//
|
||||
// Written: tfleming@hmc.edu & jtorrey@hmc.edu 7 April 2021
|
||||
// Based on implementation from https://www.allaboutcircuits.com/ip-cores/communication-controller/priority-encoder/
|
||||
@ -31,8 +31,8 @@
|
||||
|
||||
`include "wally-config.vh"
|
||||
|
||||
module priority_encoder #(parameter BINARY_BITS = 3) (
|
||||
input logic [2**BINARY_BITS - 1:0] one_hot,
|
||||
module priorityencoder #(parameter BINARY_BITS = 3) (
|
||||
input logic [2**BINARY_BITS - 1:0] onehot,
|
||||
output logic [BINARY_BITS - 1:0] binary
|
||||
);
|
||||
|
||||
@ -40,7 +40,7 @@ module priority_encoder #(parameter BINARY_BITS = 3) (
|
||||
always_comb begin
|
||||
binary = 0;
|
||||
for (i = 0; i < 2**BINARY_BITS; i++) begin
|
||||
if (one_hot[i]) binary = i; // prioritizes the most significant bit
|
||||
if (onehot[i]) binary = i; // prioritizes the most significant bit
|
||||
end
|
||||
end
|
||||
// *** triple check synthesizability here
|
@ -143,10 +143,10 @@ module tlb #(parameter ENTRY_BITS = 3,
|
||||
assign PageOffset = VirtualAddress[11:0];
|
||||
|
||||
// TLB entries are evicted according to the LRU algorithm
|
||||
tlb_lru #(ENTRY_BITS) lru(.*);
|
||||
tlblru #(ENTRY_BITS) lru(.*);
|
||||
|
||||
tlb_ram #(ENTRY_BITS) tlb_ram(.*);
|
||||
tlb_cam #(ENTRY_BITS, `VPN_BITS, `VPN_SEGMENT_BITS) tlb_cam(.*);
|
||||
tlbram #(ENTRY_BITS) tlbram(.*);
|
||||
tlbcam #(ENTRY_BITS, `VPN_BITS, `VPN_SEGMENT_BITS) tlbcam(.*);
|
||||
|
||||
// unswizzle useful PTE bits
|
||||
assign PTE_U = PTEAccessBits[4];
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////
|
||||
// tlb_cam.sv
|
||||
// tlbcam.sv
|
||||
//
|
||||
// Written: jtorrey@hmc.edu 16 February 2021
|
||||
// Modified: kmacsaigoren@hmc.edu 1 June 2021
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
`include "wally-config.vh"
|
||||
|
||||
module tlb_cam #(parameter ENTRY_BITS = 3,
|
||||
module tlbcam #(parameter ENTRY_BITS = 3,
|
||||
parameter KEY_BITS = 20,
|
||||
parameter SEGMENT_BITS = 10) (
|
||||
input clk, reset,
|
||||
@ -60,7 +60,7 @@ module tlb_cam #(parameter ENTRY_BITS = 3,
|
||||
generate
|
||||
genvar i;
|
||||
for (i = 0; i < NENTRIES; i++) begin
|
||||
cam_line #(KEY_BITS, SEGMENT_BITS) cam_line(
|
||||
camline #(KEY_BITS, SEGMENT_BITS) camline(
|
||||
.CAMLineWrite(CAMLineWrite[i] && TLBWrite),
|
||||
.PageType(PageTypeList[i]),
|
||||
.Match(Matches[i]),
|
||||
@ -71,7 +71,7 @@ module tlb_cam #(parameter ENTRY_BITS = 3,
|
||||
// In case there are multiple matches in the CAM, select only one
|
||||
// *** it might be guaranteed that the CAM will never have multiple matches.
|
||||
// If so, this is just an encoder
|
||||
priority_encoder #(ENTRY_BITS) match_priority(Matches, VPNIndex);
|
||||
priorityencoder #(ENTRY_BITS) matchpriority(Matches, VPNIndex);
|
||||
|
||||
assign CAMHit = |Matches & ~TLBFlush;
|
||||
assign HitPageType = PageTypeList[VPNIndex];
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////
|
||||
// tlb_lru.sv
|
||||
// tlblru.sv
|
||||
//
|
||||
// Written: tfleming@hmc.edu & jtorrey@hmc.edu 16 February 2021
|
||||
// Modified:
|
||||
@ -24,7 +24,7 @@
|
||||
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
///////////////////////////////////////////
|
||||
|
||||
module tlb_lru #(parameter ENTRY_BITS = 3) (
|
||||
module tlblru #(parameter ENTRY_BITS = 3) (
|
||||
input clk, reset,
|
||||
input TLBWrite,
|
||||
input TLBFlush,
|
||||
@ -45,12 +45,12 @@ module tlb_lru #(parameter ENTRY_BITS = 3) (
|
||||
logic AllUsed;
|
||||
|
||||
// Convert indices to one-hot encodings
|
||||
decoder #(ENTRY_BITS) read_decoder(VPNIndex, ReadLineOneHot);
|
||||
decoder #(ENTRY_BITS) readdecoder(VPNIndex, ReadLineOneHot);
|
||||
// *** should output writelineonehot so we don't have to decode WriteIndex outside
|
||||
decoder #(ENTRY_BITS) write_decoder(WriteIndex, WriteLineOneHot);
|
||||
decoder #(ENTRY_BITS) writedecoder(WriteIndex, WriteLineOneHot);
|
||||
|
||||
// Find the first line not recently used
|
||||
priority_encoder #(ENTRY_BITS) first_nru(~RUBits, WriteIndex);
|
||||
priorityencoder #(ENTRY_BITS) firstnru(~RUBits, WriteIndex);
|
||||
|
||||
// Access either the hit line or written line
|
||||
assign AccessLineOneHot = (TLBWrite) ? WriteLineOneHot : ReadLineOneHot;
|
||||
@ -63,7 +63,7 @@ module tlb_lru #(parameter ENTRY_BITS = 3) (
|
||||
assign RUBitsNext = (AllUsed) ? AccessLineOneHot : RUBitsAccessed;
|
||||
|
||||
// Update LRU state on any TLB hit or write
|
||||
flopenrc #(NENTRIES) lru_state(clk, reset, TLBFlush, (CAMHit || TLBWrite),
|
||||
flopenrc #(NENTRIES) lrustate(clk, reset, TLBFlush, (CAMHit || TLBWrite),
|
||||
RUBitsNext, RUBits);
|
||||
|
||||
endmodule
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////
|
||||
// tlb_ram.sv
|
||||
// tlbram.sv
|
||||
//
|
||||
// Written: jtorrey@hmc.edu & tfleming@hmc.edu 16 February 2021
|
||||
// Modified:
|
||||
@ -27,7 +27,7 @@
|
||||
|
||||
`include "wally-config.vh"
|
||||
|
||||
module tlb_ram #(parameter ENTRY_BITS = 3) (
|
||||
module tlbram #(parameter ENTRY_BITS = 3) (
|
||||
input clk, reset,
|
||||
input [ENTRY_BITS-1:0] VPNIndex, // Index to read from
|
||||
input [ENTRY_BITS-1:0] WriteIndex,
|
||||
@ -45,13 +45,13 @@ module tlb_ram #(parameter ENTRY_BITS = 3) (
|
||||
|
||||
logic [NENTRIES-1:0] RAMEntryWrite;
|
||||
|
||||
decoder #(ENTRY_BITS) tlb_ram_decoder(WriteIndex, RAMEntryWrite);
|
||||
decoder #(ENTRY_BITS) tlbramdecoder(WriteIndex, RAMEntryWrite);
|
||||
|
||||
// Generate a flop for every entry in the RAM
|
||||
generate
|
||||
genvar i;
|
||||
for (i = 0; i < NENTRIES; i++) begin: tlb_ram_flops
|
||||
flopenr #(`XLEN) pte_flop(clk, reset, RAMEntryWrite[i] & TLBWrite,
|
||||
for (i = 0; i < NENTRIES; i++) begin: tlb_ram_flops
|
||||
flopenr #(`XLEN) pteflop(clk, reset, RAMEntryWrite[i] & TLBWrite,
|
||||
PageTableEntryWrite, ram[i]);
|
||||
end
|
||||
endgenerate
|
Loading…
Reference in New Issue
Block a user