@@ -3,7 +3,9 @@ package treecorel2
33import chisel3 ._
44import chisel3 .util ._
55
6- class Crossbar extends Module {
6+ import treecorel2 .common .InstConfig
7+
8+ class Crossbar extends Module with InstConfig {
79 val io = IO (new Bundle {
810 val socEn = Input (Bool ())
911 val runEn = Input (Bool ())
@@ -26,34 +28,34 @@ class Crossbar extends Module {
2628 switch(stateReg) {
2729 is(eumInst) {
2830 when(io.runEn) {
29- stateReg := eumMem
3031 globalEn := true .B
32+ stateReg := eumMem
3133 inst := rdInst
3234 }
3335 }
3436 is(eumMem) {
3537 when(io.runEn) {
36- stateReg := eumInst
3738 globalEn := false .B
39+ stateReg := eumInst
3840 inst := 0x13 .U
3941 }
4042 }
4143 }
4244
43- protected val instSize = Mux (io.socEn, 2 .U , 3 .U )
4445 // because the difftest's logic addr is 0x000000
45- protected val addrOffset = Mux (io.socEn, " h0000000000000000 " . U ( 64 . W ), " h0000000080000000 " . U ( 64 . W ) )
46-
47- protected val instAddr = io.core.fetch.addr - addrOffset
48- protected val loadAddr = io.core.ld.addr - addrOffset
49- protected val storeAddr = io.core.sd.addr - addrOffset
46+ protected val instSize = Mux (io.socEn, instSoCRSize, instDiffRSize )
47+ protected val baseAddr = Mux (io.socEn, socStartBaseAddr, socStartBaseAddr)
48+ protected val instAddr = io.core.fetch.addr - baseAddr
49+ protected val loadAddr = io.core.ld.addr - baseAddr
50+ protected val storeAddr = io.core.sd.addr - baseAddr
5051 protected val maEn = io.core.ld.en || io.core.sd.en
5152
53+ // prepare the data exchange io signals
5254 io.dxchg.ren := ((stateReg === eumInst) || (stateReg === eumMem && maEn))
5355 io.dxchg.raddr := Mux (stateReg === eumInst, instAddr, loadAddr)
5456 io.dxchg.rsize := Mux (stateReg === eumMem && io.core.ld.en, io.core.ld.size, instSize)
57+ io.dxchg.wen := stateReg === eumMem && io.core.sd.en
5558 io.dxchg.waddr := storeAddr
5659 io.dxchg.wdata := io.core.sd.data
5760 io.dxchg.wmask := io.core.sd.mask
58- io.dxchg.wen := stateReg === eumMem && io.core.sd.en
5961}
0 commit comments