xref: /XiangShan/src/main/scala/utils/Trigger.scala (revision 8891a219bbc84f568e1d134854d8d5ed86d6d560)
172951335SLi Qianruo/***************************************************************************************
272951335SLi Qianruo * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
372951335SLi Qianruo * Copyright (c) 2020-2021 Peng Cheng Laboratory
472951335SLi Qianruo *
572951335SLi Qianruo * XiangShan is licensed under Mulan PSL v2.
672951335SLi Qianruo * You can use this software according to the terms and conditions of the Mu lan PSL v2.
772951335SLi Qianruo * You may obtain a copy of Mulan PSL v2 at:
872951335SLi Qianruo *          http://license.coscl.org.cn/MulanPSL2
972951335SLi Qianruo *
1072951335SLi Qianruo * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
1172951335SLi Qianruo * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
1272951335SLi Qianruo * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
1372951335SLi Qianruo *
1472951335SLi Qianruo * See the Mulan PSL v2 for more details.
1572951335SLi Qianruo ***************************************************************************************/
1672951335SLi Qianruo
1772951335SLi Qianruopackage utils
1872951335SLi Qianruo
1972951335SLi Qianruoimport chisel3._
2072951335SLi Qianruoimport chisel3.util._
2184e47f35SLi Qianruoimport xiangshan.MatchTriggerIO
22*8891a219SYinan Xuimport org.chipsalliance.cde.config.Parameters
2384e47f35SLi Qianruo
2472951335SLi Qianruo
2572951335SLi Qianruoobject TriggerCmp {
2672951335SLi Qianruo  def apply(actual: UInt, tdata: UInt, matchType: UInt, enable: Bool) = {
2772951335SLi Qianruo    val equal = actual === tdata
2872951335SLi Qianruo    val greater = actual >= tdata
2972951335SLi Qianruo    val less = actual <= tdata
3072951335SLi Qianruo    val res = MuxLookup(matchType, false.B,
3172951335SLi Qianruo      Array(0.U -> equal,
3272951335SLi Qianruo          2.U -> greater,
3372951335SLi Qianruo          3.U -> less))
3472951335SLi Qianruo    res && enable
3572951335SLi Qianruo  }
3672951335SLi Qianruo}
3772951335SLi Qianruo
3872951335SLi Qianruoobject ChainCheck {
3972951335SLi Qianruo  def TimingCheck(prevTiming: Bool, thisTiming: Bool, chain: Bool) = !((prevTiming ^ thisTiming) && chain)
4072951335SLi Qianruo  def HitCheck(prevHit: Bool, chain: Bool) = prevHit || !chain
4172951335SLi Qianruo}
4284e47f35SLi Qianruo
4384e47f35SLi Qianruoobject PrintTriggerInfo {
4484e47f35SLi Qianruo  def apply(enable: Bool, trigger: MatchTriggerIO)(implicit p: Parameters) = {
4584e47f35SLi Qianruo    XSDebug(enable, p"Debug Mode: Match Type is ${trigger.matchType}; select is ${trigger.select};" +
4684e47f35SLi Qianruo      p"timing is ${trigger.timing}; action is ${trigger.action}; chain is ${trigger.chain};" +
4784e47f35SLi Qianruo      p"tdata2 is ${Hexadecimal(trigger.tdata2)}")
4884e47f35SLi Qianruo  }
4984e47f35SLi Qianruo}