IMC DONE
This commit is contained in:
parent
6df13ebca3
commit
577645ba2a
22014
el2_ifu_mem_ctl.fir
22014
el2_ifu_mem_ctl.fir
File diff suppressed because it is too large
Load Diff
7290
el2_ifu_mem_ctl.v
7290
el2_ifu_mem_ctl.v
File diff suppressed because it is too large
Load Diff
|
@ -632,11 +632,7 @@ class el2_ifu_mem_ctl extends Module with el2_lib {
|
||||||
io.iccm_rden := (ifc_dma_access_q_ok & io.dma_iccm_req & !io.dma_mem_write) | (io.ifc_iccm_access_bf & io.ifc_fetch_req_bf)
|
io.iccm_rden := (ifc_dma_access_q_ok & io.dma_iccm_req & !io.dma_mem_write) | (io.ifc_iccm_access_bf & io.ifc_fetch_req_bf)
|
||||||
val iccm_dma_rden = ifc_dma_access_q_ok & io.dma_iccm_req & !io.dma_mem_write
|
val iccm_dma_rden = ifc_dma_access_q_ok & io.dma_iccm_req & !io.dma_mem_write
|
||||||
io.iccm_wr_size := Fill(3, io.dma_iccm_req) & io.dma_mem_sz
|
io.iccm_wr_size := Fill(3, io.dma_iccm_req) & io.dma_mem_sz
|
||||||
val m1 = Module(new rvecc_encode)
|
val dma_mem_ecc = Cat(rvecc_encode(io.dma_mem_wdata(63,32)), rvecc_encode(io.dma_mem_wdata(31,0)))
|
||||||
m1.io.din := io.dma_mem_wdata(31,0)
|
|
||||||
val m2 = Module(new rvecc_encode)
|
|
||||||
m2.io.din := io.dma_mem_wdata(63,32)
|
|
||||||
val dma_mem_ecc = Cat(m2.io.ecc_out, m1.io.ecc_out)
|
|
||||||
val iccm_ecc_corr_data_ff = WireInit(UInt(39.W), 0.U)
|
val iccm_ecc_corr_data_ff = WireInit(UInt(39.W), 0.U)
|
||||||
io.iccm_wr_data := Mux(iccm_correct_ecc & !(ifc_dma_access_q_ok & io.dma_iccm_req), Fill(2,iccm_ecc_corr_data_ff),
|
io.iccm_wr_data := Mux(iccm_correct_ecc & !(ifc_dma_access_q_ok & io.dma_iccm_req), Fill(2,iccm_ecc_corr_data_ff),
|
||||||
Cat(dma_mem_ecc(13,7),io.dma_mem_wdata(63,32), dma_mem_ecc(6,0), io.dma_mem_wdata(31,0)))
|
Cat(dma_mem_ecc(13,7),io.dma_mem_wdata(63,32), dma_mem_ecc(6,0), io.dma_mem_wdata(31,0)))
|
||||||
|
|
|
@ -240,7 +240,7 @@ trait el2_lib extends param{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move rvecc_encode to a proper trait
|
// Move rvecc_encode to a proper trait
|
||||||
def rvecc_encode(din:UInt) = { //Done for verification and testing
|
def rvecc_encode(din:UInt):UInt = {
|
||||||
val mask0 = Array(1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0)
|
val mask0 = Array(1,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0)
|
||||||
val mask1 = Array(1,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1)
|
val mask1 = Array(1,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1)
|
||||||
val mask2 = Array(0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1)
|
val mask2 = Array(0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1)
|
||||||
|
@ -265,7 +265,8 @@ trait el2_lib extends param{
|
||||||
if(mask5(i)==1) {w5(z) := din(i); z = z +1 }
|
if(mask5(i)==1) {w5(z) := din(i); z = z +1 }
|
||||||
}
|
}
|
||||||
val w6 = Cat((w5.asUInt.xorR),(w4.asUInt.xorR),(w3.asUInt.xorR),(w2.asUInt.xorR),(w1.asUInt.xorR),(w0.asUInt.xorR))
|
val w6 = Cat((w5.asUInt.xorR),(w4.asUInt.xorR),(w3.asUInt.xorR),(w2.asUInt.xorR),(w1.asUInt.xorR),(w0.asUInt.xorR))
|
||||||
Cat(din.xorR ^ w6.xorR, w6)
|
val ecc_out = Cat(din.xorR ^ w6.xorR, w6)
|
||||||
|
ecc_out
|
||||||
}
|
}
|
||||||
|
|
||||||
class rvecc_encode extends Module{ //Done for verification and testing
|
class rvecc_encode extends Module{ //Done for verification and testing
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue