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}