diff --git a/pipelined/src/ieu/clmul.sv b/pipelined/src/ieu/clmul.sv index 4fa8dda5a..5557283f9 100644 --- a/pipelined/src/ieu/clmul.sv +++ b/pipelined/src/ieu/clmul.sv @@ -31,23 +31,22 @@ module clmul #(parameter WIDTH=32) ( input logic [WIDTH-1:0] A, B, // Operands - output logic [WIDTH-1:0] Result); // ZBS result + output logic [WIDTH-1:0] ClmulResult); // ZBS result logic [WIDTH-1:0] pp [WIDTH-1:0]; //partial AND products - logic [WIDTH-1:0] sop; //sum of partial products genvar i,j; - for (i=1; i CLMUL -> MUX -> RESULT + //alternate could have CLMUL * 3 -> MUX -> MUX + always_comb begin + casez (Funct3) + 3'b001: begin //clmul + X = A; + Y = B; + end + 3'b011: begin //clmulh + X = {RevA[WIDTH-2:0], {1'b0}}; + Y = {{1'b0}, RevB[WIDTH-2:0]}; + end + 3'b010: begin //clmulr + X = {A[WIDTH-2:0], {1'b0}}; + Y = B; + end + default: begin + X = 0; + Y = 0; + end + endcase + + end + clmul clm(.A(X), .B(Y), .ClmulResult(ClmulResult)); + bitreverse brClmulResult(.a(ClmulResult), .b(RevClmulResult)); + + assign ZBCResult = (Funct3 == 3'b011) ? RevClmulResult : ClmulResult; endmodule \ No newline at end of file