forked from Github_Repos/cvw
Replaced generates with arrays in TLB
This commit is contained in:
parent
67e191c6f3
commit
735f3b4217
@ -70,7 +70,7 @@ module pmpchecker (
|
|||||||
PMPCfg[j+3], PMPCfg[j+2], PMPCfg[j+1], PMPCfg[j]} = PMPCFG_ARRAY_REGW[j/8];
|
PMPCfg[j+3], PMPCfg[j+2], PMPCfg[j+1], PMPCfg[j]} = PMPCFG_ARRAY_REGW[j/8];
|
||||||
endgenerate */
|
endgenerate */
|
||||||
|
|
||||||
pmpadrdec pmpadrdec[`PMP_ENTRIES-1:0](
|
pmpadrdec pmpadrdecs[`PMP_ENTRIES-1:0](
|
||||||
.PhysicalAddress,
|
.PhysicalAddress,
|
||||||
.PMPCfg(PMPCFG_ARRAY_REGW),
|
.PMPCfg(PMPCFG_ARRAY_REGW),
|
||||||
.PMPAdr(PMPADDR_ARRAY_REGW),
|
.PMPAdr(PMPADDR_ARRAY_REGW),
|
||||||
|
@ -95,7 +95,7 @@ module tlb #(parameter ENTRY_BITS = 3,
|
|||||||
|
|
||||||
// Index (currently random) to write the next TLB entry
|
// Index (currently random) to write the next TLB entry
|
||||||
logic [ENTRY_BITS-1:0] WriteIndex;
|
logic [ENTRY_BITS-1:0] WriteIndex;
|
||||||
logic [(2**ENTRY_BITS)-1:0] WriteLines; // used as the one-hot encoding of WriteIndex
|
logic [(2**ENTRY_BITS)-1:0] WriteLines, WriteEnables; // used as the one-hot encoding of WriteIndex
|
||||||
|
|
||||||
// Sections of the virtual and physical addresses
|
// Sections of the virtual and physical addresses
|
||||||
logic [`VPN_BITS-1:0] VirtualPageNumber;
|
logic [`VPN_BITS-1:0] VirtualPageNumber;
|
||||||
@ -121,6 +121,7 @@ module tlb #(parameter ENTRY_BITS = 3,
|
|||||||
|
|
||||||
// Decode the integer encoded WriteIndex into the one-hot encoded WriteLines
|
// Decode the integer encoded WriteIndex into the one-hot encoded WriteLines
|
||||||
decoder #(ENTRY_BITS) writedecoder(WriteIndex, WriteLines);
|
decoder #(ENTRY_BITS) writedecoder(WriteIndex, WriteLines);
|
||||||
|
assign WriteEnables = WriteLines & {(2**ENTRY_BITS){TLBWrite}};
|
||||||
|
|
||||||
// The bus width is always the largest it could be for that XLEN. For example, vpn will be 36 bits wide in rv64
|
// The bus width is always the largest it could be for that XLEN. For example, vpn will be 36 bits wide in rv64
|
||||||
// this, even though it could be 27 bits (SV39) or 36 bits (SV48) wide. When the value of VPN is narrower,
|
// this, even though it could be 27 bits (SV39) or 36 bits (SV48) wide. When the value of VPN is narrower,
|
||||||
|
@ -35,9 +35,9 @@ module tlbcam #(parameter ENTRY_BITS = 3,
|
|||||||
input logic [KEY_BITS-1:0] VirtualPageNumber,
|
input logic [KEY_BITS-1:0] VirtualPageNumber,
|
||||||
input logic [1:0] PageTypeWriteVal,
|
input logic [1:0] PageTypeWriteVal,
|
||||||
// input logic [`SVMODE_BITS-1:0] SvMode, // *** may not need to be used.
|
// input logic [`SVMODE_BITS-1:0] SvMode, // *** may not need to be used.
|
||||||
input logic TLBWrite,
|
// input logic TLBWrite,
|
||||||
input logic TLBFlush,
|
input logic TLBFlush,
|
||||||
input logic [2**ENTRY_BITS-1:0] WriteLines,
|
input logic [2**ENTRY_BITS-1:0] WriteEnables,
|
||||||
|
|
||||||
output logic [ENTRY_BITS-1:0] VPNIndex,
|
output logic [ENTRY_BITS-1:0] VPNIndex,
|
||||||
output logic [1:0] HitPageType,
|
output logic [1:0] HitPageType,
|
||||||
@ -55,16 +55,24 @@ module tlbcam #(parameter ENTRY_BITS = 3,
|
|||||||
// original virtual page number from when the address was written, regardless
|
// original virtual page number from when the address was written, regardless
|
||||||
// of page type. However, matches are determined based on a subset of the
|
// of page type. However, matches are determined based on a subset of the
|
||||||
// page number segments.
|
// page number segments.
|
||||||
|
|
||||||
|
camline #(KEY_BITS, SEGMENT_BITS) camlines[NENTRIES-1:0](
|
||||||
|
.CAMLineWrite(WriteEnables),
|
||||||
|
.PageType(PageTypeList),
|
||||||
|
.Match(Matches),
|
||||||
|
.*);
|
||||||
|
/*
|
||||||
generate
|
generate
|
||||||
genvar i;
|
genvar i;
|
||||||
for (i = 0; i < NENTRIES; i++) begin
|
for (i = 0; i < NENTRIES; i++) begin
|
||||||
camline #(KEY_BITS, SEGMENT_BITS) camline(
|
camline #(KEY_BITS, SEGMENT_BITS) camline(
|
||||||
.CAMLineWrite(WriteLines[i] && TLBWrite),
|
.CAMLineWrite(WriteEnables[i]),
|
||||||
.PageType(PageTypeList[i]),
|
.PageType(PageTypeList[i]),
|
||||||
.Match(Matches[i]),
|
.Match(Matches[i]),
|
||||||
.*);
|
.*);
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
*/
|
||||||
|
|
||||||
// In case there are multiple matches in the CAM, select only one
|
// In case there are multiple matches in the CAM, select only one
|
||||||
// *** it might be guaranteed that the CAM will never have multiple matches.
|
// *** it might be guaranteed that the CAM will never have multiple matches.
|
||||||
|
@ -32,8 +32,8 @@ module tlbram #(parameter ENTRY_BITS = 3) (
|
|||||||
input logic [ENTRY_BITS-1:0] VPNIndex, // Index to read from
|
input logic [ENTRY_BITS-1:0] VPNIndex, // Index to read from
|
||||||
// input logic [ENTRY_BITS-1:0] WriteIndex, // *** unused?
|
// input logic [ENTRY_BITS-1:0] WriteIndex, // *** unused?
|
||||||
input logic [`XLEN-1:0] PTEWriteVal,
|
input logic [`XLEN-1:0] PTEWriteVal,
|
||||||
input logic TLBWrite,
|
// input logic TLBWrite,
|
||||||
input logic [2**ENTRY_BITS-1:0] WriteLines,
|
input logic [2**ENTRY_BITS-1:0] WriteEnables,
|
||||||
|
|
||||||
output logic [`PPN_BITS-1:0] PhysicalPageNumber,
|
output logic [`PPN_BITS-1:0] PhysicalPageNumber,
|
||||||
output logic [7:0] PTEAccessBits
|
output logic [7:0] PTEAccessBits
|
||||||
@ -45,13 +45,16 @@ module tlbram #(parameter ENTRY_BITS = 3) (
|
|||||||
logic [`XLEN-1:0] PageTableEntry;
|
logic [`XLEN-1:0] PageTableEntry;
|
||||||
|
|
||||||
// Generate a flop for every entry in the RAM
|
// Generate a flop for every entry in the RAM
|
||||||
|
flopenr #(`XLEN) pteflops[NENTRIES-1:0](clk, reset, WriteEnables, PTEWriteVal, ram);
|
||||||
|
/*
|
||||||
generate
|
generate
|
||||||
genvar i;
|
genvar i;
|
||||||
for (i = 0; i < NENTRIES; i++) begin: tlb_ram_flops
|
for (i = 0; i < NENTRIES; i++) begin: tlb_ram_flops
|
||||||
flopenr #(`XLEN) pteflop(clk, reset, WriteLines[i] & TLBWrite,
|
flopenr #(`XLEN) pteflop(clk, reset, WriteEnables[i],
|
||||||
PTEWriteVal, ram[i]);
|
PTEWriteVal, ram[i]);
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
*/
|
||||||
|
|
||||||
assign PageTableEntry = ram[VPNIndex];
|
assign PageTableEntry = ram[VPNIndex];
|
||||||
assign PTEAccessBits = PageTableEntry[7:0];
|
assign PTEAccessBits = PageTableEntry[7:0];
|
||||||
|
Loading…
Reference in New Issue
Block a user