mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
zbc input mux structural
This commit is contained in:
parent
869e812aa8
commit
3656d42ac0
@ -30,39 +30,22 @@
|
||||
`include "wally-config.vh"
|
||||
|
||||
module zbc #(parameter WIDTH=32) (
|
||||
input logic [WIDTH-1:0] A, B, // Operands
|
||||
input logic [2:0] Funct3, // Indicates operation to perform
|
||||
output logic [WIDTH-1:0] ZBCResult); // ZBC result
|
||||
input logic [WIDTH-1:0] A, RevA, B, // Operands
|
||||
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] RevA, RevB;
|
||||
logic [WIDTH-1:0] RevB;
|
||||
logic [WIDTH-1:0] x,y;
|
||||
logic [1:0] select;
|
||||
|
||||
assign select = ~Funct3[1:0];
|
||||
|
||||
bitreverse #(WIDTH) brA(.a(A), .b(RevA));
|
||||
bitreverse #(WIDTH) brB(.a(B), .b(RevB));
|
||||
|
||||
// zbc input select mux
|
||||
always_comb begin
|
||||
casez (Funct3[1:0])
|
||||
2'b01: begin //clmul
|
||||
x = A;
|
||||
y = B;
|
||||
end
|
||||
2'b11: begin //clmulh
|
||||
x = {RevA[WIDTH-2:0], {1'b0}};
|
||||
y = {{1'b0}, RevB[WIDTH-2:0]};
|
||||
end
|
||||
2'b10: begin //clmulr
|
||||
x = RevA;
|
||||
y = RevB;
|
||||
end
|
||||
default: begin
|
||||
x = 0;
|
||||
y = 0;
|
||||
end
|
||||
endcase
|
||||
|
||||
end
|
||||
|
||||
mux3 #(WIDTH) xmux({RevA[WIDTH-2:0], {1'b0}}, RevA, A, select, x);
|
||||
mux3 #(WIDTH) ymux({{1'b0},RevB[WIDTH-2:0]}, RevB, B, select, y);
|
||||
clmul #(WIDTH) clm(.A(x), .B(y), .ClmulResult(ClmulResult));
|
||||
bitreverse #(WIDTH) brClmulResult(.a(ClmulResult), .b(RevClmulResult));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user