xref: /XiangShan/src/main/scala/device/AXI4Flash.scala (revision f8d0b1072a8a0360965e97879bb8224911caa4dc)
1c6d43980SLemover/***************************************************************************************
2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory
4c6d43980SLemover*
5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2.
6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2.
7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at:
8c6d43980SLemover*          http://license.coscl.org.cn/MulanPSL2
9c6d43980SLemover*
10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13c6d43980SLemover*
14c6d43980SLemover* See the Mulan PSL v2 for more details.
15c6d43980SLemover***************************************************************************************/
16c6d43980SLemover
17b4cc98d2SZihao Yupackage device
18b4cc98d2SZihao Yu
19b4cc98d2SZihao Yuimport chisel3._
20b4cc98d2SZihao Yuimport chisel3.util._
21fad48058SYinan Xuimport difftest.common.DifftestFlash
228891a219SYinan Xuimport org.chipsalliance.cde.config.Parameters
23956d83c0Slinjiaweiimport freechips.rocketchip.diplomacy.AddressSet
244c494e36SJay
25956d83c0Slinjiaweiclass AXI4Flash
26956d83c0Slinjiawei(
27a2e9bde6SAllen  address: Seq[AddressSet]
28956d83c0Slinjiawei)(implicit p: Parameters)
29956d83c0Slinjiawei  extends AXI4SlaveModule(address, executable = false)
30956d83c0Slinjiawei{
31956d83c0Slinjiawei
32956d83c0Slinjiawei  override lazy val module = new AXI4SlaveModuleImp(this){
33*f8d0b107SJiuyue Ma    val beatBits = log2Ceil(node.portParams.head.beatBytes)
34*f8d0b107SJiuyue Ma    def getOffset(addr: UInt) = Cat(addr(15, beatBits), 0.U(beatBits.W))
35b4cc98d2SZihao Yu
36fad48058SYinan Xu    val flash = DifftestFlash()
37fad48058SYinan Xu    flash.en := in.ar.fire
38510ae4eeSJiuyang Liu    flash.addr := Cat(0.U(16.W), getOffset(raddr))
39b4cc98d2SZihao Yu
40510ae4eeSJiuyang Liu    in.r.bits.data := flash.data
41b4cc98d2SZihao Yu  }
42956d83c0Slinjiawei}
43