mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
AES64 cleanup
This commit is contained in:
parent
7ee3145fc1
commit
5257d3d8fd
@ -28,10 +28,10 @@
|
||||
module aes64ks1i(
|
||||
input logic [3:0] roundnum,
|
||||
input logic [63:0] rs1,
|
||||
output logic [63:0] rd
|
||||
output logic [63:0] result
|
||||
);
|
||||
|
||||
logic lastRoundFlag;
|
||||
logic finalround;
|
||||
logic [7:0] rcon8;
|
||||
logic [31:0] rcon, rs1Rotate, tmp2, SboxOut;
|
||||
|
||||
@ -39,10 +39,10 @@ module aes64ks1i(
|
||||
rconlut128 rc(roundnum, rcon8); // Get rcon value from lookup table
|
||||
assign rcon = {24'b0, rcon8}; // Zero-pad RCON
|
||||
assign rs1Rotate = {rs1[39:32], rs1[63:40]}; // Get rotated value fo ruse in tmp2
|
||||
assign lastRoundFlag = (roundnum == 4'b1010); // round 10 is the last one
|
||||
assign tmp2 = lastRoundFlag ? rs1[63:32] : rs1Rotate; // Don't rotate on the last round
|
||||
assign finalround = (roundnum == 4'b1010); // round 10 is the last one
|
||||
assign tmp2 = finalround ? rs1[63:32] : rs1Rotate; // Don't rotate on the last round
|
||||
aessboxword sbox(tmp2, SboxOut); // Substitute bytes of value obtained for tmp2 using Rijndael sbox
|
||||
assign rd[31:0] = SboxOut ^ rcon;
|
||||
assign rd[63:32] = SboxOut ^ rcon;
|
||||
assign result[31:0] = SboxOut ^ rcon;
|
||||
assign result[63:32] = SboxOut ^ rcon;
|
||||
endmodule
|
||||
|
||||
|
@ -28,12 +28,12 @@
|
||||
module aes64ks2(
|
||||
input logic [63:0] rs2,
|
||||
input logic [63:0] rs1,
|
||||
output logic [63:0] rd
|
||||
output logic [63:0] result
|
||||
);
|
||||
|
||||
logic [31:0] w0, w1;
|
||||
|
||||
assign w0 = rs1[63:32] ^ rs2[31:0];
|
||||
assign w1 = w0 ^ rs2[63:32];
|
||||
assign rd = {w1, w0};
|
||||
assign result = {w1, w0};
|
||||
endmodule
|
||||
|
@ -39,8 +39,8 @@ module zknd64 #(parameter WIDTH=32) (
|
||||
// RV64
|
||||
aes64d aes64d(.rs1(A), .rs2(B), .finalround(ZKNDSelect[2]), .result(aes64dRes)); // decode AES
|
||||
aes64im aes64im(.rs1(A), .DataOut(aes64imRes));
|
||||
aes64ks1i aes64ks1i(.roundnum(RNUM), .rs1(A), .rd(aes64ks1iRes));
|
||||
aes64ks2 aes64ks2(.rs2(B), .rs1(A), .rd(aes64ks2Res));
|
||||
aes64ks1i aes64ks1i(.roundnum(RNUM), .rs1(A), .result(aes64ks1iRes));
|
||||
aes64ks2 aes64ks2(.rs2(B), .rs1(A), .result(aes64ks2Res));
|
||||
|
||||
mux4 #(WIDTH) zkndmux(aes64dRes, aes64ks1iRes, aes64ks2Res, aes64imRes, ZKNDSelect[1:0], ZKNDResult);
|
||||
endmodule
|
||||
|
@ -38,8 +38,8 @@ module zkne64 #(parameter WIDTH=32) (
|
||||
|
||||
// RV64
|
||||
aes64e aes64e(.rs1(A), .rs2(B), .finalround(ZKNESelect[2]), .result(aes64eRes));
|
||||
aes64ks1i aes64ks1i(.roundnum(RNUM), .rs1(A), .rd(aes64ks1iRes));
|
||||
aes64ks2 aes64ks2(.rs2(B), .rs1(A), .rd(aes64ks2Res));
|
||||
aes64ks1i aes64ks1i(.roundnum(RNUM), .rs1(A), .result(aes64ks1iRes));
|
||||
aes64ks2 aes64ks2(.rs2(B), .rs1(A), .result(aes64ks2Res));
|
||||
|
||||
// 010 is a placeholder to match the select of ZKND's AES64KS1I since they share some instruction
|
||||
mux3 #(WIDTH) zknemux(aes64eRes, aes64ks1iRes, aes64ks2Res, ZKNESelect[1:0], ZKNEResult);
|
||||
|
Loading…
Reference in New Issue
Block a user