1c6d43980SLemover/*************************************************************************************** 2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory 4c6d43980SLemover* 5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 8c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 9c6d43980SLemover* 10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13c6d43980SLemover* 14c6d43980SLemover* See the Mulan PSL v2 for more details. 15c6d43980SLemover***************************************************************************************/ 16c6d43980SLemover 17e18c367fSLinJiaweipackage xiangshan.backend.fu 18e18c367fSLinJiawei 192225d46eSJiawei Linimport chipsalliance.rocketchip.config.Parameters 20e18c367fSLinJiaweiimport chisel3._ 21e18c367fSLinJiaweiimport chisel3.util._ 223c02ee8fSwakafaimport utility.{LookupTree, LookupTreeDefault, ParallelMux, SignExt, ZeroExt} 23e18c367fSLinJiaweiimport xiangshan._ 24*fe528fd6Ssinsanctionimport utils._ 25e18c367fSLinJiawei 262225d46eSJiawei Linclass AddModule(implicit p: Parameters) extends XSModule { 2731ea8750SLinJiawei val io = IO(new Bundle() { 282bd5334dSYinan Xu val src = Vec(2, Input(UInt(XLEN.W))) 2928c18878Szfw val srcw = Input(UInt((XLEN/2).W)) 3028c18878Szfw val add = Output(UInt(XLEN.W)) 3128c18878Szfw val addw = Output(UInt((XLEN/2).W)) 3231ea8750SLinJiawei }) 3328c18878Szfw io.add := io.src(0) + io.src(1) 3488825c5cSYinan Xu // TODO: why this extra adder? 3528c18878Szfw io.addw := io.srcw + io.src(1)(31,0) 3631ea8750SLinJiawei} 3731ea8750SLinJiawei 382225d46eSJiawei Linclass SubModule(implicit p: Parameters) extends XSModule { 3931ea8750SLinJiawei val io = IO(new Bundle() { 402bd5334dSYinan Xu val src = Vec(2, Input(UInt(XLEN.W))) 41184a1958Szfw val sub = Output(UInt((XLEN+1).W)) 4231ea8750SLinJiawei }) 43184a1958Szfw io.sub := (io.src(0) +& (~io.src(1)).asUInt()) + 1.U 4431ea8750SLinJiawei} 4531ea8750SLinJiawei 462225d46eSJiawei Linclass LeftShiftModule(implicit p: Parameters) extends XSModule { 4731ea8750SLinJiawei val io = IO(new Bundle() { 4831ea8750SLinJiawei val shamt = Input(UInt(6.W)) 4928c18878Szfw val revShamt = Input(UInt(6.W)) 5031ea8750SLinJiawei val sllSrc = Input(UInt(XLEN.W)) 5131ea8750SLinJiawei val sll = Output(UInt(XLEN.W)) 5228c18878Szfw val revSll = Output(UInt(XLEN.W)) 5331ea8750SLinJiawei }) 54184a1958Szfw io.sll := io.sllSrc << io.shamt 5528c18878Szfw io.revSll := io.sllSrc << io.revShamt 56184a1958Szfw} 57184a1958Szfw 58184a1958Szfwclass LeftShiftWordModule(implicit p: Parameters) extends XSModule { 59184a1958Szfw val io = IO(new Bundle() { 60184a1958Szfw val shamt = Input(UInt(5.W)) 6128c18878Szfw val revShamt = Input(UInt(5.W)) 62184a1958Szfw val sllSrc = Input(UInt((XLEN/2).W)) 63184a1958Szfw val sllw = Output(UInt((XLEN/2).W)) 6428c18878Szfw val revSllw = Output(UInt((XLEN/2).W)) 65184a1958Szfw }) 66184a1958Szfw io.sllw := io.sllSrc << io.shamt 6728c18878Szfw io.revSllw := io.sllSrc << io.revShamt 6831ea8750SLinJiawei} 6931ea8750SLinJiawei 702225d46eSJiawei Linclass RightShiftModule(implicit p: Parameters) extends XSModule { 7131ea8750SLinJiawei val io = IO(new Bundle() { 7231ea8750SLinJiawei val shamt = Input(UInt(6.W)) 7328c18878Szfw val revShamt = Input(UInt(6.W)) 7431ea8750SLinJiawei val srlSrc, sraSrc = Input(UInt(XLEN.W)) 75184a1958Szfw val srl, sra = Output(UInt(XLEN.W)) 7628c18878Szfw val revSrl = Output(UInt(XLEN.W)) 7731ea8750SLinJiawei }) 78184a1958Szfw io.srl := io.srlSrc >> io.shamt 79184a1958Szfw io.sra := (io.sraSrc.asSInt() >> io.shamt).asUInt() 8028c18878Szfw io.revSrl := io.srlSrc >> io.revShamt 8131ea8750SLinJiawei} 8231ea8750SLinJiawei 83184a1958Szfwclass RightShiftWordModule(implicit p: Parameters) extends XSModule { 84ee8ff153Szfw val io = IO(new Bundle() { 85184a1958Szfw val shamt = Input(UInt(5.W)) 8628c18878Szfw val revShamt = Input(UInt(5.W)) 87184a1958Szfw val srlSrc, sraSrc = Input(UInt((XLEN/2).W)) 88184a1958Szfw val srlw, sraw = Output(UInt((XLEN/2).W)) 8928c18878Szfw val revSrlw = Output(UInt((XLEN/2).W)) 90ee8ff153Szfw }) 91184a1958Szfw 92184a1958Szfw io.srlw := io.srlSrc >> io.shamt 93184a1958Szfw io.sraw := (io.sraSrc.asSInt() >> io.shamt).asUInt() 9428c18878Szfw io.revSrlw := io.srlSrc >> io.revShamt 95ee8ff153Szfw} 96ee8ff153Szfw 97184a1958Szfw 982225d46eSJiawei Linclass MiscResultSelect(implicit p: Parameters) extends XSModule { 9931ea8750SLinJiawei val io = IO(new Bundle() { 100675acc68SYinan Xu val func = Input(UInt(6.W)) 101675acc68SYinan Xu val and, or, xor, orcb, orh48, sextb, packh, sexth, packw, revb, rev8, pack = Input(UInt(XLEN.W)) 10288825c5cSYinan Xu val src = Input(UInt(XLEN.W)) 10331ea8750SLinJiawei val miscRes = Output(UInt(XLEN.W)) 10431ea8750SLinJiawei }) 105ee8ff153Szfw 106675acc68SYinan Xu val logicRes = VecInit(Seq( 107675acc68SYinan Xu io.and, 108675acc68SYinan Xu io.or, 109675acc68SYinan Xu io.xor, 110675acc68SYinan Xu io.orcb 111675acc68SYinan Xu ))(io.func(2, 1)) 112675acc68SYinan Xu val miscRes = VecInit(Seq(io.sextb, io.packh, io.sexth, io.packw))(io.func(1, 0)) 113675acc68SYinan Xu val logicBase = Mux(io.func(3), miscRes, logicRes) 11488825c5cSYinan Xu 115675acc68SYinan Xu val revRes = VecInit(Seq(io.revb, io.rev8, io.pack, io.orh48))(io.func(1, 0)) 116675acc68SYinan Xu val customRes = VecInit(Seq( 117675acc68SYinan Xu Cat(0.U(31.W), io.src(31, 0), 0.U(1.W)), 118675acc68SYinan Xu Cat(0.U(30.W), io.src(31, 0), 0.U(2.W)), 119675acc68SYinan Xu Cat(0.U(29.W), io.src(31, 0), 0.U(3.W)), 120675acc68SYinan Xu Cat(0.U(56.W), io.src(15, 8))))(io.func(1, 0)) 121675acc68SYinan Xu val logicAdv = Mux(io.func(3), customRes, revRes) 122ee8ff153Szfw 123675acc68SYinan Xu val mask = Cat(Fill(15, io.func(0)), 1.U(1.W)) 124675acc68SYinan Xu val maskedLogicRes = mask & logicRes 125675acc68SYinan Xu 126675acc68SYinan Xu io.miscRes := Mux(io.func(5), maskedLogicRes, Mux(io.func(4), logicAdv, logicBase)) 12731ea8750SLinJiawei} 12831ea8750SLinJiawei 129ee8ff153Szfwclass ShiftResultSelect(implicit p: Parameters) extends XSModule { 130ee8ff153Szfw val io = IO(new Bundle() { 131675acc68SYinan Xu val func = Input(UInt(4.W)) 13228c18878Szfw val sll, srl, sra, rol, ror, bclr, bset, binv, bext = Input(UInt(XLEN.W)) 133ee8ff153Szfw val shiftRes = Output(UInt(XLEN.W)) 134ee8ff153Szfw }) 135ee8ff153Szfw 136675acc68SYinan Xu // val leftBit = Mux(io.func(1), io.binv, Mux(io.func(0), io.bset, io.bclr)) 137675acc68SYinan Xu // val leftRes = Mux(io.func(2), leftBit, io.sll) 138675acc68SYinan Xu // val rightRes = Mux(io.func(1) && io.func(0), io.sra, Mux(io.func(1), io.bext, io.srl)) 139675acc68SYinan Xu val resultSource = VecInit(Seq( 140675acc68SYinan Xu io.sll, 141675acc68SYinan Xu io.sll, 142675acc68SYinan Xu io.bclr, 143675acc68SYinan Xu io.bset, 144675acc68SYinan Xu io.binv, 145675acc68SYinan Xu io.srl, 146675acc68SYinan Xu io.bext, 147675acc68SYinan Xu io.sra 148675acc68SYinan Xu )) 149675acc68SYinan Xu val simple = resultSource(io.func(2, 0)) 150ee8ff153Szfw 1517b441e5eSYinan Xu io.shiftRes := Mux(io.func(3), Mux(io.func(1), io.ror, io.rol), simple) 152184a1958Szfw} 153ee8ff153Szfw 154184a1958Szfwclass WordResultSelect(implicit p: Parameters) extends XSModule { 155184a1958Szfw val io = IO(new Bundle() { 156184a1958Szfw val func = Input(UInt()) 15728c18878Szfw val sllw, srlw, sraw, rolw, rorw, addw, subw = Input(UInt((XLEN/2).W)) 158184a1958Szfw val wordRes = Output(UInt(XLEN.W)) 159184a1958Szfw }) 160ee8ff153Szfw 161675acc68SYinan Xu val addsubRes = Mux(!io.func(2) && io.func(1), io.subw, io.addw) 162675acc68SYinan Xu val shiftRes = Mux(io.func(2), Mux(io.func(0), io.rorw, io.rolw), 163675acc68SYinan Xu Mux(io.func(1), io.sraw, Mux(io.func(0), io.srlw, io.sllw))) 164675acc68SYinan Xu val wordRes = Mux(io.func(3), shiftRes, addsubRes) 165184a1958Szfw io.wordRes := SignExt(wordRes, XLEN) 166ee8ff153Szfw} 167ee8ff153Szfw 168ee8ff153Szfw 1692225d46eSJiawei Linclass AluResSel(implicit p: Parameters) extends XSModule { 17031ea8750SLinJiawei val io = IO(new Bundle() { 171edace9bfSxiwenx val func = Input(UInt(3.W)) 172edace9bfSxiwenx val addRes, shiftRes, miscRes, compareRes, wordRes = Input(UInt(XLEN.W)) 17331ea8750SLinJiawei val aluRes = Output(UInt(XLEN.W)) 17431ea8750SLinJiawei }) 175ee8ff153Szfw 176edace9bfSxiwenx val res = Mux(io.func(2, 1) === 0.U, Mux(io.func(0), io.wordRes, io.shiftRes), 177edace9bfSxiwenx Mux(!io.func(2), Mux(io.func(0), io.compareRes, io.addRes), io.miscRes)) 178184a1958Szfw io.aluRes := res 17931ea8750SLinJiawei} 18031ea8750SLinJiawei 1812225d46eSJiawei Linclass AluDataModule(implicit p: Parameters) extends XSModule { 182e2203130SLinJiawei val io = IO(new Bundle() { 1832bd5334dSYinan Xu val src = Vec(2, Input(UInt(XLEN.W))) 184e2203130SLinJiawei val func = Input(FuOpType()) 185e2203130SLinJiawei val result = Output(UInt(XLEN.W)) 186e2203130SLinJiawei }) 1872bd5334dSYinan Xu val (src1, src2, func) = (io.src(0), io.src(1), io.func) 188e18c367fSLinJiawei 189675acc68SYinan Xu val shamt = src2(5, 0) 190675acc68SYinan Xu val revShamt = ~src2(5,0) + 1.U 191675acc68SYinan Xu 192675acc68SYinan Xu // slliuw, sll 193675acc68SYinan Xu val leftShiftModule = Module(new LeftShiftModule) 194675acc68SYinan Xu val sll = leftShiftModule.io.sll 195675acc68SYinan Xu val revSll = leftShiftModule.io.revSll 196675acc68SYinan Xu leftShiftModule.io.sllSrc := Cat(Fill(32, func(0)), Fill(32, 1.U)) & src1 197675acc68SYinan Xu leftShiftModule.io.shamt := shamt 198675acc68SYinan Xu leftShiftModule.io.revShamt := revShamt 199675acc68SYinan Xu 200675acc68SYinan Xu // bclr, bset, binv 201675acc68SYinan Xu val bitShift = 1.U << src2(5, 0) 202675acc68SYinan Xu val bclr = src1 & ~bitShift 203675acc68SYinan Xu val bset = src1 | bitShift 204675acc68SYinan Xu val binv = src1 ^ bitShift 205675acc68SYinan Xu 206675acc68SYinan Xu // srl, sra, bext 207675acc68SYinan Xu val rightShiftModule = Module(new RightShiftModule) 208675acc68SYinan Xu val srl = rightShiftModule.io.srl 209675acc68SYinan Xu val revSrl = rightShiftModule.io.revSrl 210675acc68SYinan Xu val sra = rightShiftModule.io.sra 211675acc68SYinan Xu rightShiftModule.io.shamt := shamt 212675acc68SYinan Xu rightShiftModule.io.revShamt := revShamt 213675acc68SYinan Xu rightShiftModule.io.srlSrc := src1 214675acc68SYinan Xu rightShiftModule.io.sraSrc := src1 215675acc68SYinan Xu val bext = srl(0) 216675acc68SYinan Xu 217675acc68SYinan Xu val rol = revSrl | sll 218675acc68SYinan Xu val ror = srl | revSll 219675acc68SYinan Xu 220675acc68SYinan Xu // addw 221184a1958Szfw val addModule = Module(new AddModule) 222675acc68SYinan Xu addModule.io.srcw := Mux(!func(2) && func(0), ZeroExt(src1(0), XLEN), src1(31, 0)) 223675acc68SYinan Xu val addwResultAll = VecInit(Seq( 224675acc68SYinan Xu ZeroExt(addModule.io.addw(0), XLEN), 225675acc68SYinan Xu ZeroExt(addModule.io.addw(7, 0), XLEN), 226675acc68SYinan Xu ZeroExt(addModule.io.addw(15, 0), XLEN), 227675acc68SYinan Xu SignExt(addModule.io.addw(15, 0), XLEN) 228675acc68SYinan Xu )) 229675acc68SYinan Xu val addw = Mux(func(2), addwResultAll(func(1, 0)), addModule.io.addw) 230675acc68SYinan Xu 231675acc68SYinan Xu // subw 232675acc68SYinan Xu val subModule = Module(new SubModule) 233675acc68SYinan Xu val subw = subModule.io.sub 234675acc68SYinan Xu 235675acc68SYinan Xu // sllw 236675acc68SYinan Xu val leftShiftWordModule = Module(new LeftShiftWordModule) 237675acc68SYinan Xu val sllw = leftShiftWordModule.io.sllw 238675acc68SYinan Xu val revSllw = leftShiftWordModule.io.revSllw 239675acc68SYinan Xu leftShiftWordModule.io.sllSrc := src1 240675acc68SYinan Xu leftShiftWordModule.io.shamt := shamt 241675acc68SYinan Xu leftShiftWordModule.io.revShamt := revShamt 242675acc68SYinan Xu 243675acc68SYinan Xu val rightShiftWordModule = Module(new RightShiftWordModule) 244675acc68SYinan Xu val srlw = rightShiftWordModule.io.srlw 245675acc68SYinan Xu val revSrlw = rightShiftWordModule.io.revSrlw 246675acc68SYinan Xu val sraw = rightShiftWordModule.io.sraw 247675acc68SYinan Xu rightShiftWordModule.io.shamt := shamt 248675acc68SYinan Xu rightShiftWordModule.io.revShamt := revShamt 249675acc68SYinan Xu rightShiftWordModule.io.srlSrc := src1 250675acc68SYinan Xu rightShiftWordModule.io.sraSrc := src1 251675acc68SYinan Xu 252675acc68SYinan Xu val rolw = revSrlw | sllw 253675acc68SYinan Xu val rorw = srlw | revSllw 254675acc68SYinan Xu 255675acc68SYinan Xu // add 256a792bcf1SYinan Xu val wordMaskAddSource = Cat(Fill(32, func(0)), Fill(32, 1.U)) & src1 257a792bcf1SYinan Xu val shaddSource = VecInit(Seq( 258a792bcf1SYinan Xu Cat(wordMaskAddSource(62, 0), 0.U(1.W)), 259a792bcf1SYinan Xu Cat(wordMaskAddSource(61, 0), 0.U(2.W)), 260a792bcf1SYinan Xu Cat(wordMaskAddSource(60, 0), 0.U(3.W)), 261a792bcf1SYinan Xu Cat(wordMaskAddSource(59, 0), 0.U(4.W)) 262a792bcf1SYinan Xu )) 263a792bcf1SYinan Xu val sraddSource = VecInit(Seq( 264a792bcf1SYinan Xu ZeroExt(src1(63, 29), XLEN), 26588825c5cSYinan Xu ZeroExt(src1(63, 30), XLEN), 26688825c5cSYinan Xu ZeroExt(src1(63, 31), XLEN), 26788825c5cSYinan Xu ZeroExt(src1(63, 32), XLEN) 26888825c5cSYinan Xu )) 269a792bcf1SYinan Xu // TODO: use decoder or other libraries to optimize timing 270a792bcf1SYinan Xu // Now we assume shadd has the worst timing. 271675acc68SYinan Xu addModule.io.src(0) := Mux(func(3), shaddSource(func(2, 1)), 272675acc68SYinan Xu Mux(func(2), sraddSource(func(1, 0)), 273*fe528fd6Ssinsanction Mux(func(1), Mux(func(0), SignExt(src2(11, 0), XLEN), ZeroExt(src1(0), XLEN)), wordMaskAddSource)) 274a792bcf1SYinan Xu ) 275*fe528fd6Ssinsanction addModule.io.src(1) := Mux(func(3, 0) === "b0011".U, Cat(src2(63, 12), 0.U(12.W)), src2) 27688825c5cSYinan Xu val add = addModule.io.add 277ee8ff153Szfw 278675acc68SYinan Xu // sub 279184a1958Szfw val sub = subModule.io.sub 2802bd5334dSYinan Xu subModule.io.src(0) := src1 2812bd5334dSYinan Xu subModule.io.src(1) := src2 2827b441e5eSYinan Xu val sltu = !sub(XLEN) 283675acc68SYinan Xu val slt = src1(XLEN - 1) ^ src2(XLEN - 1) ^ sltu 284ee8ff153Szfw val maxMin = Mux(slt ^ func(0), src2, src1) 2857b441e5eSYinan Xu val maxMinU = Mux(sltu ^ func(0), src2, src1) 286675acc68SYinan Xu val compareRes = Mux(func(2), Mux(func(1), maxMin, maxMinU), Mux(func(1), slt, Mux(func(0), sltu, sub))) 287ee8ff153Szfw 288675acc68SYinan Xu // logic 289675acc68SYinan Xu val logicSrc2 = Mux(!func(5) && func(0), ~src2, src2) 290675acc68SYinan Xu val and = src1 & logicSrc2 291675acc68SYinan Xu val or = src1 | logicSrc2 292675acc68SYinan Xu val xor = src1 ^ logicSrc2 29373be64b3SJiawei Lin val orcb = Cat((0 until 8).map(i => Fill(8, src1(i * 8 + 7, i * 8).orR)).reverse) 294675acc68SYinan Xu val orh48 = Cat(src1(63, 8), 0.U(8.W)) | src2 295675acc68SYinan Xu 296675acc68SYinan Xu val sextb = SignExt(src1(7, 0), XLEN) 297675acc68SYinan Xu val packh = Cat(src2(7,0), src1(7,0)) 298675acc68SYinan Xu val sexth = SignExt(src1(15, 0), XLEN) 299675acc68SYinan Xu val packw = SignExt(Cat(src2(15, 0), src1(15, 0)), XLEN) 300675acc68SYinan Xu 30173be64b3SJiawei Lin val revb = Cat((0 until 8).map(i => Reverse(src1(8 * i + 7, 8 * i))).reverse) 302675acc68SYinan Xu val pack = Cat(src2(31, 0), src1(31, 0)) 303675acc68SYinan Xu val rev8 = Cat((0 until 8).map(i => src1(8 * i + 7, 8 * i))) 304675acc68SYinan Xu 305ee8ff153Szfw 306184a1958Szfw // Result Select 307184a1958Szfw val shiftResSel = Module(new ShiftResultSelect) 308675acc68SYinan Xu shiftResSel.io.func := func(3, 0) 309184a1958Szfw shiftResSel.io.sll := sll 310184a1958Szfw shiftResSel.io.srl := srl 311184a1958Szfw shiftResSel.io.sra := sra 31228c18878Szfw shiftResSel.io.rol := rol 31328c18878Szfw shiftResSel.io.ror := ror 314184a1958Szfw shiftResSel.io.bclr := bclr 315184a1958Szfw shiftResSel.io.binv := binv 316184a1958Szfw shiftResSel.io.bset := bset 317184a1958Szfw shiftResSel.io.bext := bext 318184a1958Szfw val shiftRes = shiftResSel.io.shiftRes 31931ea8750SLinJiawei 32031ea8750SLinJiawei val miscResSel = Module(new MiscResultSelect) 321675acc68SYinan Xu miscResSel.io.func := func(5, 0) 322ee8ff153Szfw miscResSel.io.and := and 323ee8ff153Szfw miscResSel.io.or := or 324ee8ff153Szfw miscResSel.io.xor := xor 325675acc68SYinan Xu miscResSel.io.orcb := orcb 32688825c5cSYinan Xu miscResSel.io.orh48 := orh48 327ee8ff153Szfw miscResSel.io.sextb := sextb 328675acc68SYinan Xu miscResSel.io.packh := packh 329ee8ff153Szfw miscResSel.io.sexth := sexth 330675acc68SYinan Xu miscResSel.io.packw := packw 331675acc68SYinan Xu miscResSel.io.revb := revb 332ee8ff153Szfw miscResSel.io.rev8 := rev8 333675acc68SYinan Xu miscResSel.io.pack := pack 33488825c5cSYinan Xu miscResSel.io.src := src1 33531ea8750SLinJiawei val miscRes = miscResSel.io.miscRes 33631ea8750SLinJiawei 337184a1958Szfw val wordResSel = Module(new WordResultSelect) 338184a1958Szfw wordResSel.io.func := func 339184a1958Szfw wordResSel.io.addw := addw 340184a1958Szfw wordResSel.io.subw := subw 341184a1958Szfw wordResSel.io.sllw := sllw 342184a1958Szfw wordResSel.io.srlw := srlw 343184a1958Szfw wordResSel.io.sraw := sraw 34428c18878Szfw wordResSel.io.rolw := rolw 34528c18878Szfw wordResSel.io.rorw := rorw 346184a1958Szfw val wordRes = wordResSel.io.wordRes 347ee8ff153Szfw 34831ea8750SLinJiawei val aluResSel = Module(new AluResSel) 349edace9bfSxiwenx aluResSel.io.func := func(6, 4) 350184a1958Szfw aluResSel.io.addRes := add 351184a1958Szfw aluResSel.io.compareRes := compareRes 352ee8ff153Szfw aluResSel.io.shiftRes := shiftRes 35331ea8750SLinJiawei aluResSel.io.miscRes := miscRes 354184a1958Szfw aluResSel.io.wordRes := wordRes 35531ea8750SLinJiawei val aluRes = aluResSel.io.aluRes 356e18c367fSLinJiawei 357e2203130SLinJiawei io.result := aluRes 358*fe528fd6Ssinsanction 359*fe528fd6Ssinsanction XSDebug(func === ALUOpType.lui32add, p"[alu] func lui32: src1=${Hexadecimal(src1)} src2=${Hexadecimal(src2)} alures=${Hexadecimal(aluRes)}\n") 360*fe528fd6Ssinsanction XSDebug(func === ALUOpType.lui32add, p"[alu] func lui32: add_src1=${Hexadecimal(addModule.io.src(0))} add_src2=${Hexadecimal(addModule.io.src(1))} addres=${Hexadecimal(add)}\n") 361e2203130SLinJiawei} 362