Improved simulation speed by gating bitmanip zbc's clmul's X and Y inputs with BSelect != 11. Reduced simulation time from 3m45s to 2m35s.

This commit is contained in:
Ross Thompson 2023-06-14 15:28:58 -05:00
parent 8f09e17dc7
commit 60e87b08c4
2 changed files with 10 additions and 5 deletions

View file

@ -80,7 +80,10 @@ module bitmanipalu #(parameter WIDTH=32) (
// ZBC Unit
if (`ZBC_SUPPORTED) begin: zbc
zbc #(WIDTH) ZBC(.A, .RevA, .B, .Funct3, .ZBCResult);
logic ZBCSelect; // ZBC instruction
assign ZBCSelect = BSelect == 2'b11;
//assign ZBCSelect = 1'b0;
zbc #(WIDTH) ZBC(.A, .RevA, .B, .ZBCSelect, .Funct3, .ZBCResult);
end else assign ZBCResult = 0;
// ZBB Unit

View file

@ -31,21 +31,23 @@
module zbc #(parameter WIDTH=32) (
input logic [WIDTH-1:0] A, RevA, B, // Operands
input logic ZBCSelect, // ZBC instruction
input logic [2:0] Funct3, // Indicates operation to perform
output logic [WIDTH-1:0] ZBCResult); // ZBC result
logic [WIDTH-1:0] ClmulResult, RevClmulResult;
logic [WIDTH-1:0] RevB;
logic [WIDTH-1:0] X, Y;
logic [WIDTH-1:0] X, Y, X1;
bitreverse #(WIDTH) brB(B, RevB);
mux3 #(WIDTH) xmux({RevA[WIDTH-2:0], {1'b0}}, RevA, A, ~Funct3[1:0], X);
mux2 #(WIDTH) ymux(RevB, B, ~Funct3[1], Y);
mux3 #(WIDTH) xmux1({RevA[WIDTH-2:0], {1'b0}}, RevA, A, ~Funct3[1:0], X1);
mux2 #(WIDTH) xmux(X1, '0, ~ZBCSelect, X);
mux3 #(WIDTH) ymux(RevB, B, '0, {~ZBCSelect, ~Funct3[1]}, Y);
clmul #(WIDTH) clm(.X, .Y, .ClmulResult);
bitreverse #(WIDTH) brClmulResult(ClmulResult, RevClmulResult);
mux2 #(WIDTH) zbcresultmux(ClmulResult, RevClmulResult, Funct3[1], ZBCResult);
endmodule
endmodule