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}