1/*************************************************************************************** 2* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3* Copyright (c) 2020-2021 Peng Cheng Laboratory 4* 5* XiangShan is licensed under Mulan PSL v2. 6* You can use this software according to the terms and conditions of the Mulan PSL v2. 7* You may obtain a copy of Mulan PSL v2 at: 8* http://license.coscl.org.cn/MulanPSL2 9* 10* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13* 14* See the Mulan PSL v2 for more details. 15***************************************************************************************/ 16 17package utils 18 19import chisel3._ 20 21object DebugMem { 22 def apply[T <: Data](size: Int, data: T): DebugMem[T] = { 23 new DebugMem(size, data) 24 } 25} 26 27class DebugMem[T <: Data](size: Int, data: T) extends IndexedSeq[T] { 28 private var debugMem: Option[Mem[T]] = None 29 private var debugReg: Option[Vec[T]] = None 30 31 BuildInfo.version match { 32 case "3.6.0" => debugMem = Some(Mem(size, data)) 33 case _ => debugReg = Some(Reg(Vec(size, data))) 34 } 35 36 def apply(addr: Int): T = BuildInfo.version match { 37 case "3.6.0" => debugMem.get(addr) 38 case _ => debugReg.get(addr) 39 } 40 41 def apply(addr: UInt): T = BuildInfo.version match { 42 case "3.6.0" => debugMem.get(addr) 43 case _ => debugReg.get(addr) 44 } 45 46 def length: Int = BuildInfo.version match { 47 case "3.6.0" => debugMem.get.length.intValue 48 case _ => debugReg.get.length 49 } 50} 51