fix7 - mmu
This commit is contained in:
parent
9601995c06
commit
9e6b806ec7
@ -273,7 +273,7 @@ module DCache (
|
|||||||
|
|
||||||
case (port.wstrb)
|
case (port.wstrb)
|
||||||
4'b1111: begin
|
4'b1111: begin
|
||||||
case (port.addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata1[0][127:96] = port.wdata;
|
wdata1[0][127:96] = port.wdata;
|
||||||
wdata1[1][127:96] = port.wdata;
|
wdata1[1][127:96] = port.wdata;
|
||||||
@ -299,7 +299,7 @@ module DCache (
|
|||||||
wdata1[3][31:0] = port.wdata;
|
wdata1[3][31:0] = port.wdata;
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
case (addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata2[0][127:96] = port.wdata;
|
wdata2[0][127:96] = port.wdata;
|
||||||
wdata2[1][127:96] = port.wdata;
|
wdata2[1][127:96] = port.wdata;
|
||||||
@ -327,7 +327,7 @@ module DCache (
|
|||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
4'b1100: begin
|
4'b1100: begin
|
||||||
case (port.addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata1[0][127:112] = port.wdata[31:16];
|
wdata1[0][127:112] = port.wdata[31:16];
|
||||||
wdata1[1][127:112] = port.wdata[31:16];
|
wdata1[1][127:112] = port.wdata[31:16];
|
||||||
@ -353,7 +353,7 @@ module DCache (
|
|||||||
wdata1[3][31:16] = port.wdata[31:16];
|
wdata1[3][31:16] = port.wdata[31:16];
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
case (addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata2[0][127:112] = port.wdata[31:16];
|
wdata2[0][127:112] = port.wdata[31:16];
|
||||||
wdata2[1][127:112] = port.wdata[31:16];
|
wdata2[1][127:112] = port.wdata[31:16];
|
||||||
@ -381,7 +381,7 @@ module DCache (
|
|||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
4'b0011: begin
|
4'b0011: begin
|
||||||
case (port.addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata1[0][111:96] = port.wdata[15:0];
|
wdata1[0][111:96] = port.wdata[15:0];
|
||||||
wdata1[1][111:96] = port.wdata[15:0];
|
wdata1[1][111:96] = port.wdata[15:0];
|
||||||
@ -407,7 +407,7 @@ module DCache (
|
|||||||
wdata1[3][15:0] = port.wdata[15:0];
|
wdata1[3][15:0] = port.wdata[15:0];
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
case (addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata2[0][111:96] = port.wdata[15:0];
|
wdata2[0][111:96] = port.wdata[15:0];
|
||||||
wdata2[1][111:96] = port.wdata[15:0];
|
wdata2[1][111:96] = port.wdata[15:0];
|
||||||
@ -435,7 +435,7 @@ module DCache (
|
|||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
4'b1000: begin
|
4'b1000: begin
|
||||||
case (port.addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata1[0][127:120] = port.wdata[31:24];
|
wdata1[0][127:120] = port.wdata[31:24];
|
||||||
wdata1[1][127:120] = port.wdata[31:24];
|
wdata1[1][127:120] = port.wdata[31:24];
|
||||||
@ -461,7 +461,7 @@ module DCache (
|
|||||||
wdata1[3][31:24] = port.wdata[31:24];
|
wdata1[3][31:24] = port.wdata[31:24];
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
case (addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata2[0][127:120] = port.wdata[31:24];
|
wdata2[0][127:120] = port.wdata[31:24];
|
||||||
wdata2[1][127:120] = port.wdata[31:24];
|
wdata2[1][127:120] = port.wdata[31:24];
|
||||||
@ -489,7 +489,7 @@ module DCache (
|
|||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
4'b0100: begin
|
4'b0100: begin
|
||||||
case (port.addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata1[0][119:112] = port.wdata[23:16];
|
wdata1[0][119:112] = port.wdata[23:16];
|
||||||
wdata1[1][119:112] = port.wdata[23:16];
|
wdata1[1][119:112] = port.wdata[23:16];
|
||||||
@ -515,7 +515,7 @@ module DCache (
|
|||||||
wdata1[3][23:16] = port.wdata[23:16];
|
wdata1[3][23:16] = port.wdata[23:16];
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
case (addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata2[0][119:112] = port.wdata[23:16];
|
wdata2[0][119:112] = port.wdata[23:16];
|
||||||
wdata2[1][119:112] = port.wdata[23:16];
|
wdata2[1][119:112] = port.wdata[23:16];
|
||||||
@ -543,7 +543,7 @@ module DCache (
|
|||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
4'b0010: begin
|
4'b0010: begin
|
||||||
case (port.addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata1[0][111:104] = port.wdata[15:8];
|
wdata1[0][111:104] = port.wdata[15:8];
|
||||||
wdata1[1][111:104] = port.wdata[15:8];
|
wdata1[1][111:104] = port.wdata[15:8];
|
||||||
@ -569,7 +569,7 @@ module DCache (
|
|||||||
wdata1[3][15:8] = port.wdata[15:8];
|
wdata1[3][15:8] = port.wdata[15:8];
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
case (addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata2[0][111:104] = port.wdata[15:8];
|
wdata2[0][111:104] = port.wdata[15:8];
|
||||||
wdata2[1][111:104] = port.wdata[15:8];
|
wdata2[1][111:104] = port.wdata[15:8];
|
||||||
@ -597,7 +597,7 @@ module DCache (
|
|||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
4'b0001: begin
|
4'b0001: begin
|
||||||
case (port.addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata1[0][103:96] = port.wdata[7:0];
|
wdata1[0][103:96] = port.wdata[7:0];
|
||||||
wdata1[1][103:96] = port.wdata[7:0];
|
wdata1[1][103:96] = port.wdata[7:0];
|
||||||
@ -623,7 +623,7 @@ module DCache (
|
|||||||
wdata1[3][7:0] = port.wdata[7:0];
|
wdata1[3][7:0] = port.wdata[7:0];
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
case (addr[1:0])
|
case (addr[3:2])
|
||||||
2'b11: begin
|
2'b11: begin
|
||||||
wdata2[0][103:96] = port.wdata[7:0];
|
wdata2[0][103:96] = port.wdata[7:0];
|
||||||
wdata2[1][103:96] = port.wdata[7:0];
|
wdata2[1][103:96] = port.wdata[7:0];
|
||||||
|
@ -210,7 +210,7 @@ module Datapath (
|
|||||||
`PCEXC,
|
`PCEXC,
|
||||||
C0_EPC,
|
C0_EPC,
|
||||||
`PCRST,
|
`PCRST,
|
||||||
{~F_valid, M_exception.ERET, M_exception.ExcValid, ~D_IA_valid},
|
{~F_valid, M_exception.ERET, M_exception.ExcValid, ~D_IB_valid},
|
||||||
PF.pc
|
PF.pc
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -218,7 +218,7 @@ module Datapath (
|
|||||||
assign rstM = C0_exception.ExcValid;
|
assign rstM = C0_exception.ExcValid;
|
||||||
|
|
||||||
assign PF_go = ~D.IA_ExcValid & ~D.IB_ExcValid & ~E.I0.ExcValid & ~E.I1.ExcValid & PF.pc[1:0] == 2'b00;
|
assign PF_go = ~D.IA_ExcValid & ~D.IB_ExcValid & ~E.I0.ExcValid & ~E.I1.ExcValid & PF.pc[1:0] == 2'b00;
|
||||||
assign fetch_i.req = rst | M_exception.ExcValid | ~D_IA_valid
|
assign fetch_i.req = rst | M_exception.ExcValid | ~D_IB_valid
|
||||||
| PF_go & (~D.IA.PFCtrl.BJRJ | D_IA_can_dispatch)
|
| PF_go & (~D.IA.PFCtrl.BJRJ | D_IA_can_dispatch)
|
||||||
& (rstD
|
& (rstD
|
||||||
| ( ~IQ_valids[3]
|
| ( ~IQ_valids[3]
|
||||||
|
@ -188,7 +188,6 @@ module MMU (
|
|||||||
|
|
||||||
word_t ddAddr1;
|
word_t ddAddr1;
|
||||||
logic [127:0] ddData1;
|
logic [127:0] ddData1;
|
||||||
logic ddValid1;
|
|
||||||
|
|
||||||
// ============================
|
// ============================
|
||||||
// ======== dFlip-Flop ========
|
// ======== dFlip-Flop ========
|
||||||
@ -400,7 +399,7 @@ module MMU (
|
|||||||
case (dwState)
|
case (dwState)
|
||||||
DW_IDLE: begin
|
DW_IDLE: begin
|
||||||
if ((drState == DR_IDLE) & dValid1 & (~dCached1 & dwr1 | dCached1 & ~dc.hit & dc.dirt_valid)) begin
|
if ((drState == DR_IDLE) & dValid1 & (~dCached1 & dwr1 | dCached1 & ~dc.hit & dc.dirt_valid)) begin
|
||||||
if (ddValid1) begin
|
if (dCached1) begin
|
||||||
wdata_axi.wdata = ddData1[31:0];
|
wdata_axi.wdata = ddData1[31:0];
|
||||||
wdata_axi.wstrb = 4'b1111;
|
wdata_axi.wstrb = 4'b1111;
|
||||||
wdata_axi.wvalid = 1'b1;
|
wdata_axi.wvalid = 1'b1;
|
||||||
@ -426,7 +425,7 @@ module MMU (
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
DW_WD1: begin
|
DW_WD1: begin
|
||||||
if (ddValid1) begin
|
if (dCached1) begin
|
||||||
wdata_axi.wdata = ddData1[31:0];
|
wdata_axi.wdata = ddData1[31:0];
|
||||||
wdata_axi.wstrb = 4'b1111;
|
wdata_axi.wstrb = 4'b1111;
|
||||||
wdata_axi.wvalid = 1'b1;
|
wdata_axi.wvalid = 1'b1;
|
||||||
@ -542,12 +541,6 @@ module MMU (
|
|||||||
dc.dirt_valid,
|
dc.dirt_valid,
|
||||||
ddData1
|
ddData1
|
||||||
);
|
);
|
||||||
ffen #(1) ddvalid_ff (
|
|
||||||
clk,
|
|
||||||
dc.dirt_valid,
|
|
||||||
dc.dirt_valid,
|
|
||||||
ddValid1
|
|
||||||
);
|
|
||||||
|
|
||||||
// ================================
|
// ================================
|
||||||
// ========== dwFunction ==========
|
// ========== dwFunction ==========
|
||||||
|
@ -32,7 +32,7 @@ interface sramro_i ();
|
|||||||
|
|
||||||
endinterface
|
endinterface
|
||||||
|
|
||||||
// SRAM interface for ICache/MMU <-> AXI
|
// SRAM interface for IDCache/MMU <-> AXI
|
||||||
interface SRAM_RO_AXI_i;
|
interface SRAM_RO_AXI_i;
|
||||||
logic req;
|
logic req;
|
||||||
word_t addr;
|
word_t addr;
|
||||||
|
Loading…
Reference in New Issue
Block a user