xref: /XiangShan/src/main/scala/utils/Trigger.scala (revision 1b46b9591920008655d659ac88cd0250db769664)
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 Mu lan 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._
20import chisel3.util._
21import xiangshan.MatchTriggerIO
22import chipsalliance.rocketchip.config.Parameters
23
24
25object TriggerCmp {
26  def apply(actual: UInt, tdata: UInt, matchType: UInt, enable: Bool) = {
27    val equal = actual === tdata
28    val greater = actual >= tdata
29    val less = actual <= tdata
30    val res = MuxLookup(matchType, false.B,
31      Array(0.U -> equal,
32          2.U -> greater,
33          3.U -> less))
34    res && enable
35  }
36}
37
38object ChainCheck {
39  def TimingCheck(prevTiming: Bool, thisTiming: Bool, chain: Bool) = !((prevTiming ^ thisTiming) && chain)
40  def HitCheck(prevHit: Bool, chain: Bool) = prevHit || !chain
41}
42
43object PrintTriggerInfo {
44  def apply(enable: Bool, trigger: MatchTriggerIO)(implicit p: Parameters) = {
45    XSDebug(enable, p"Debug Mode: Match Type is ${trigger.matchType}; select is ${trigger.select};" +
46      p"timing is ${trigger.timing}; action is ${trigger.action}; chain is ${trigger.chain};" +
47      p"tdata2 is ${Hexadecimal(trigger.tdata2)}")
48  }
49}