mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
ZK simplification
This commit is contained in:
parent
955c131bd9
commit
d0dd30822e
@ -115,32 +115,20 @@ module bitmanipalu import cvw::*; #(parameter cvw_t P) (
|
||||
|
||||
// ZKND Unit
|
||||
if (P.ZKND_SUPPORTED) begin: zknd
|
||||
if (P.XLEN == 32) begin
|
||||
zknd32 #(P.XLEN) ZKND32(.A(ABMU), .B(BBMU), .Funct7, .ZKNDSelect(ZBBSelect[2:0]), .ZKNDResult);
|
||||
end
|
||||
else begin
|
||||
zknd64 #(P.XLEN) ZKND64(.A(ABMU), .B(BBMU), .Funct7, .RNUM(Rs2E[3:0]), .ZKNDSelect(ZBBSelect[2:0]), .ZKNDResult);
|
||||
end
|
||||
if (P.XLEN == 32) zknd32 #(P.XLEN) ZKND32(.A(ABMU), .B(BBMU), .Funct7, .ZKNDSelect(ZBBSelect[2:0]), .ZKNDResult);
|
||||
else zknd64 #(P.XLEN) ZKND64(.A(ABMU), .B(BBMU), .Funct7, .RNUM(Rs2E[3:0]), .ZKNDSelect(ZBBSelect[2:0]), .ZKNDResult);
|
||||
end else assign ZKNDResult = 0;
|
||||
|
||||
// ZKNE Unit
|
||||
if (P.ZKNE_SUPPORTED) begin: zkne
|
||||
if (P.XLEN == 32) begin
|
||||
zkne32 #(P.XLEN) ZKNE32(.A(ABMU), .B(BBMU), .Funct7, .ZKNESelect(ZBBSelect[2:0]), .ZKNEResult);
|
||||
end
|
||||
else begin
|
||||
zkne64 #(P.XLEN) ZKNE64(.A(ABMU), .B(BBMU), .Funct7, .RNUM(Rs2E[3:0]), .ZKNESelect(ZBBSelect[2:0]), .ZKNEResult);
|
||||
end
|
||||
if (P.XLEN == 32) zkne32 #(P.XLEN) ZKNE32(.A(ABMU), .B(BBMU), .Funct7, .ZKNESelect(ZBBSelect[2:0]), .ZKNEResult);
|
||||
else zkne64 #(P.XLEN) ZKNE64(.A(ABMU), .B(BBMU), .Funct7, .RNUM(Rs2E[3:0]), .ZKNESelect(ZBBSelect[2:0]), .ZKNEResult);
|
||||
end else assign ZKNEResult = 0;
|
||||
|
||||
// ZKNH Unit
|
||||
if (P.ZKNH_SUPPORTED) begin: zknh
|
||||
if (P.XLEN == 32) begin
|
||||
zknh32 ZKNH32(.A(ABMU), .B(BBMU), .ZKNHSelect(ZBBSelect), .ZKNHResult(ZKNHResult));
|
||||
end
|
||||
else begin
|
||||
zknh64 ZKNH64(.A(ABMU), .B(BBMU), .ZKNHSelect(ZBBSelect), .ZKNHResult(ZKNHResult));
|
||||
end
|
||||
if (P.XLEN == 32) zknh32 ZKNH32(.A(ABMU), .B(BBMU), .ZKNHSelect(ZBBSelect), .ZKNHResult(ZKNHResult));
|
||||
else zknh64 ZKNH64(.A(ABMU), .B(BBMU), .ZKNHSelect(ZBBSelect), .ZKNHResult(ZKNHResult));
|
||||
end else assign ZKNHResult = 0;
|
||||
|
||||
// Result Select Mux
|
||||
|
@ -37,11 +37,11 @@ module packer #(parameter WIDTH=32) (
|
||||
|
||||
logic [WIDTH-1:0] Pack, PackH, PackW;
|
||||
|
||||
assign lowhalf = A[WIDTH/2-1:0];
|
||||
assign highhalf = B[WIDTH/2-1:0];
|
||||
assign lowhalfh = A[7:0];
|
||||
assign lowhalf = A[WIDTH/2-1:0];
|
||||
assign highhalf = B[WIDTH/2-1:0];
|
||||
assign lowhalfh = A[7:0];
|
||||
assign highhalfh = B[7:0];
|
||||
assign lowhalfw = A[15:0];
|
||||
assign lowhalfw = A[15:0];
|
||||
assign highhalfw = B[15:0];
|
||||
|
||||
assign Pack = {highhalf, lowhalf};
|
||||
|
@ -32,20 +32,17 @@ module zbkx #(parameter WIDTH=32) (
|
||||
);
|
||||
|
||||
logic [WIDTH-1:0] xpermlookup;
|
||||
integer i;
|
||||
int i;
|
||||
|
||||
always_comb begin
|
||||
if (ZBKXSelect[0] == 1'b0) begin
|
||||
for(i=0; i<WIDTH; i=i+8) begin: xperm8
|
||||
xpermlookup = A >> {B[i+:8], 3'b0};
|
||||
ZBKXResult[i+:8] = xpermlookup[7:0];
|
||||
end
|
||||
end
|
||||
else begin
|
||||
always_comb
|
||||
if (ZBKXSelect[0])
|
||||
for(i=0; i<WIDTH; i=i+4) begin: xperm4
|
||||
xpermlookup = A >> {B[i+:4], 2'b0};
|
||||
ZBKXResult[i+:4] = xpermlookup[3:0];
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
for(i=0; i<WIDTH; i=i+8) begin: xperm8
|
||||
xpermlookup = A >> {B[i+:8], 3'b0};
|
||||
ZBKXResult[i+:8] = xpermlookup[7:0];
|
||||
end
|
||||
endmodule
|
||||
|
Loading…
Reference in New Issue
Block a user