diff --git a/src/ieu/alu.sv b/src/ieu/alu.sv index e1cae73a6..74eb6f7f6 100644 --- a/src/ieu/alu.sv +++ b/src/ieu/alu.sv @@ -109,7 +109,9 @@ module alu import cvw::*; #(parameter cvw_t P) ( else assign PreALUResult = FullResult; // Bit manipulation muxing - if (P.ZBC_SUPPORTED | P.ZBS_SUPPORTED | P.ZBA_SUPPORTED | P.ZBB_SUPPORTED | P.ZBKB_SUPPORTED | P.ZBKC_SUPPORTED | P.ZBKX_SUPPORTED | P.ZKND_SUPPORTED | P.ZKNE_SUPPORTED | P.ZKNH_SUPPORTED) begin : bitmanipalu + if (P.ZBC_SUPPORTED | P.ZBS_SUPPORTED | P.ZBA_SUPPORTED | P.ZBB_SUPPORTED | + P.ZBKB_SUPPORTED | P.ZBKC_SUPPORTED | P.ZBKX_SUPPORTED | + P.ZKND_SUPPORTED | P.ZKNE_SUPPORTED | P.ZKNH_SUPPORTED) begin : bitmanipalu bitmanipalu #(P) balu( .A, .B, .W64, .BSelect, .ZBBSelect, .BMUActive, .Funct3, .Funct7, .Rs2E, .LT,.LTU, .BALUControl, .PreALUResult, .FullResult, diff --git a/src/ieu/bmu/bitmanipalu.sv b/src/ieu/bmu/bitmanipalu.sv index 36feff63e..cd6bc1993 100644 --- a/src/ieu/bmu/bitmanipalu.sv +++ b/src/ieu/bmu/bitmanipalu.sv @@ -87,7 +87,7 @@ module bitmanipalu import cvw::*; #(parameter cvw_t P) ( end // Bit reverse needed for some ZBB, ZBC instructions - if (P.ZBC_SUPPORTED | P.ZBB_SUPPORTED) begin: bitreverse + if (P.ZBC_SUPPORTED | P.ZBKC_SUPPORTED | P.ZBB_SUPPORTED) begin: bitreverse bitreverse #(P.XLEN) brA(.A(ABMU), .RevA); end @@ -99,6 +99,11 @@ module bitmanipalu import cvw::*; #(parameter cvw_t P) ( // ZBB Unit if (P.ZBB_SUPPORTED) begin: zbb zbb #(P.XLEN) ZBB(.A(ABMU), .RevA, .B(BBMU), .W64, .LT, .LTU, .BUnsigned(Funct3[0]), .ZBBSelect(ZBBSelect[2:0]), .ZBBResult); + end else if (P.ZBKB_SUPPORTED) begin: zbkbonly // only needs rev8 portion + genvar i; + for (i=0;i