14d7fbe77Syulightenyu/*************************************************************************************** 24d7fbe77Syulightenyu * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 34d7fbe77Syulightenyu * Copyright (c) 2020-2021 Peng Cheng Laboratory 44d7fbe77Syulightenyu * 54d7fbe77Syulightenyu * XiangShan is licensed under Mulan PSL v2. 64d7fbe77Syulightenyu * You can use this software according to the terms and conditions of the Mulan PSL v2. 74d7fbe77Syulightenyu * You may obtain a copy of Mulan PSL v2 at: 84d7fbe77Syulightenyu * http://license.coscl.org.cn/MulanPSL2 94d7fbe77Syulightenyu * 104d7fbe77Syulightenyu * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 114d7fbe77Syulightenyu * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 124d7fbe77Syulightenyu * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 134d7fbe77Syulightenyu * 144d7fbe77Syulightenyu * See the Mulan PSL v2 for more details. 154d7fbe77Syulightenyu ***************************************************************************************/ 164d7fbe77Syulightenyu 174d7fbe77Syulightenyupackage utils 184d7fbe77Syulightenyu 194d7fbe77Syulightenyuimport chisel3._ 204d7fbe77Syulightenyuimport chisel3.util._ 214d7fbe77Syulightenyu 224d7fbe77Syulightenyu/* WFI state Update */ 234d7fbe77Syulightenyuobject WfiStateNext { 24ce80648bSyulightenyu val sNORMAL :: sGCLOCK :: sAWAKE :: sFLITWAKE :: Nil = Enum(4) 254d7fbe77Syulightenyu 264d7fbe77Syulightenyu def apply(wfiState: UInt, isWFI: Bool, isNormal: Bool, flitpend: Bool, intSrc: UInt): UInt = { 274d7fbe77Syulightenyu val nextState = MuxCase(wfiState, Array( 284d7fbe77Syulightenyu (wfiState === sNORMAL && isWFI && isNormal && !intSrc.orR) -> sGCLOCK, 294d7fbe77Syulightenyu (wfiState === sGCLOCK && intSrc.orR) -> sAWAKE, 30ce80648bSyulightenyu (wfiState === sGCLOCK && flitpend) -> sFLITWAKE, 31ce80648bSyulightenyu (wfiState === sFLITWAKE && ~isWFI) -> sNORMAL, 324d7fbe77Syulightenyu (wfiState === sAWAKE && !intSrc.orR) -> sNORMAL 334d7fbe77Syulightenyu ).toIndexedSeq) 344d7fbe77Syulightenyu 354d7fbe77Syulightenyu nextState 364d7fbe77Syulightenyu } 374d7fbe77Syulightenyu} 384d7fbe77Syulightenyu 394d7fbe77Syulightenyu/* Core low power state Update */ 404d7fbe77Syulightenyuobject lpStateNext { 41*814aa9ecSyulightenyu val sIDLE :: sL2FLUSH :: sWAITWFI :: sEXITCO :: sWAITQ :: sQREQ :: sPOFFREQ :: Nil = Enum(7) 424d7fbe77Syulightenyu 43*814aa9ecSyulightenyu def apply(lpState: UInt, l2flush: Bool, l2FlushDone: Bool, isWFI: Bool, exitco: Bool, QACTIVE: Bool, QACCEPTn: Bool): UInt = { 444d7fbe77Syulightenyu val nextState = MuxCase(lpState, Array( 454d7fbe77Syulightenyu (lpState === sIDLE && l2flush) -> sL2FLUSH, 464d7fbe77Syulightenyu (lpState === sL2FLUSH && l2FlushDone) -> sWAITWFI, 474d7fbe77Syulightenyu (lpState === sWAITWFI && isWFI ) -> sEXITCO, 48*814aa9ecSyulightenyu (lpState === sEXITCO && exitco ) -> sWAITQ, 49*814aa9ecSyulightenyu (lpState === sWAITQ && !QACTIVE ) -> sQREQ, 50*814aa9ecSyulightenyu (lpState === sQREQ && !QACCEPTn ) -> sPOFFREQ 514d7fbe77Syulightenyu ).toIndexedSeq) 524d7fbe77Syulightenyu 534d7fbe77Syulightenyu nextState 544d7fbe77Syulightenyu } 554d7fbe77Syulightenyu} 56