Commented sha instructions

This commit is contained in:
David Harris 2024-05-23 22:06:37 -07:00
parent ac153bc4ed
commit b0d1344121
3 changed files with 47 additions and 46 deletions

View File

@ -37,29 +37,29 @@ module sha256 (
// sha256{sig0/sig1/sum0/sum1} select shifted operands for 32-bit xor3 and then sign-extend
// sha256sig0
assign x[0][0] = {A[6:0], A[31:7]};
assign x[0][1] = {A[17:0], A[31:18]};
assign x[0][2] = {3'b0, A[31:3]};
assign x[0][0] = {A[6:0], A[31:7]}; // ror 7
assign x[0][1] = {A[17:0], A[31:18]}; // ror 18
assign x[0][2] = {3'b0, A[31:3]}; // >> 3
// sha256sig1
assign x[1][0] = {A[16:0], A[31:17]};
assign x[1][1] = {A[18:0], A[31:19]};
assign x[1][2] = {10'b0, A[31:10]};
assign x[1][0] = {A[16:0], A[31:17]}; // ror 17
assign x[1][1] = {A[18:0], A[31:19]}; // ror 19
assign x[1][2] = {10'b0, A[31:10]}; // >> 10
// sha256sum0
assign x[2][0] = {A[1:0], A[31:2]};
assign x[2][1] = {A[12:0], A[31:13]};
assign x[2][2] = {A[21:0], A[31:22]};
assign x[2][0] = {A[1:0], A[31:2]}; // ror 2
assign x[2][1] = {A[12:0], A[31:13]}; // ror 13
assign x[2][2] = {A[21:0], A[31:22]}; // ror 22
// sha256sum1
assign x[3][0] = {A[5:0], A[31:6]};
assign x[3][1] ={A[10:0], A[31:11]};
assign x[3][2] = {A[24:0], A[31:25]};
assign x[3][0] = {A[5:0], A[31:6]}; // ror 6
assign x[3][1] ={ A[10:0], A[31:11]}; // ror 11
assign x[3][2] = {A[24:0], A[31:25]}; // ror 25
// 32-bit muxes to select inputs to xor3 for sha256
assign y[0] = x[ZKNHSelect[1:0]][0];
assign y[1] = x[ZKNHSelect[1:0]][1];
assign y[2] = x[ZKNHSelect[1:0]][2];
assign y[0] = x[ZKNHSelect[1:0]][0];
assign y[1] = x[ZKNHSelect[1:0]][1];
assign y[2] = x[ZKNHSelect[1:0]][2];
// sha256 32-bit xor3
assign result = y[0] ^ y[1] ^ y[2];

View File

@ -34,33 +34,34 @@ module sha512_32 (
logic [31:0] x[4][3];
logic [31:0] y[3];
// rotate/shift a 64-bit value contained in {B, A} and select 32 bits
// sha512{sig0h/sig0l/sig1h/sig1l/sum0r/sum1r} select shifted operands for 32-bit xor
// The l flavors differ from h by using low bits of B instead of zeros in x[0/1][2]
// sha512sig0h/l
assign x[0][0] = {B[0], A[31:1]};
assign x[0][1] = {B[7:0], A[31:8]};
assign x[0][2] = {B[6:0] & {7{ZKNHSelect[0]}}, A[31:7]};
assign x[0][0] = {B[0], A[31:1]}; // ror 1
assign x[0][1] = {B[7:0], A[31:8]}; // ror 8
assign x[0][2] = {B[6:0] & {7{ZKNHSelect[0]}}, A[31:7]}; // ror/srl 7
// sha512sig1h/l
assign x[1][0] = {A[28:0], B[31:29]};
assign x[1][1] = {B[18:0], A[31:19]};
assign x[1][2] = {B[5:0] & {6{ZKNHSelect[0]}}, A[31:6]};
assign x[1][0] = {A[28:0], B[31:29]}; // ror 61
assign x[1][1] = {B[18:0], A[31:19]}; // ror 19
assign x[1][2] = {B[5:0] & {6{ZKNHSelect[0]}}, A[31:6]}; // ror/srl 6
// sha512sum0r
assign x[2][0] = {A[6:0], B[31:7]};
assign x[2][1] = {A[1:0], B[31:2]};
assign x[2][2] = {B[27:0], A[31:28]};
assign x[2][0] = {A[6:0], B[31:7]}; // ror 39
assign x[2][1] = {A[1:0], B[31:2]}; // ror 34
assign x[2][2] = {B[27:0], A[31:28]}; // ror 28
// sha512sum1r
assign x[3][0] = {A[8:0], B[31:9]};
assign x[3][1] = {B[13:0], A[31:14]};
assign x[3][2] = {B[17:0], A[31:18]};
assign x[3][0] = {A[8:0], B[31:9]}; // ror 41
assign x[3][1] = {B[13:0], A[31:14]}; // ror 14
assign x[3][2] = {B[17:0], A[31:18]}; // ror 18
// 32-bit muxes to select inputs to xor6 for sha512
assign y[0] = x[ZKNHSelect[2:1]][0];
assign y[1] = x[ZKNHSelect[2:1]][1];
assign y[0] = x[ZKNHSelect[2:1]][0];
assign y[1] = x[ZKNHSelect[2:1]][1];
assign y[2] = x[ZKNHSelect[2:1]][2];
// sha512 32-bit xor6

View File

@ -33,33 +33,33 @@ module sha512_64 (
logic [63:0] x[4][3];
logic [63:0] y[3];
// sha512{sig0/sig1/sum0/sum1} select shifted operands for 64-bit xor3
// sha512{sig0/sig1/sum0/sum1} select rotated/shifted operands for 64-bit xor3
// sha512sig0
assign x[0][0] = {A[0], A[63:1]};
assign x[0][1] = {A[7:0], A[63:8]};
assign x[0][2] = A >> 7;
assign x[0][0] = {A[0], A[63:1]}; // ror 1
assign x[0][1] = {A[7:0], A[63:8]}; // ror 8
assign x[0][2] = {7'b0, A[63:7]}; // >> 7
// sha512sig1
assign x[1][0] = {A[18:0], A[63:19]};
assign x[1][1] = {A[60:0], A[63:61]};
assign x[1][2] = A >> 6;
assign x[1][0] = {A[18:0], A[63:19]}; // ror 19
assign x[1][1] = {A[60:0], A[63:61]}; // ror 61
assign x[1][2] = {6'b0, A[63:6]}; // >> 6
// sha512sum0
assign x[2][0] = {A[27:0], A[63:28]};
assign x[2][1] = {A[33:0], A[63:34]};
assign x[2][2] = {A[38:0], A[63:39]};
assign x[2][0] = {A[27:0], A[63:28]}; // ror 28
assign x[2][1] = {A[33:0], A[63:34]}; // ror 34
assign x[2][2] = {A[38:0], A[63:39]}; // ror 39
// sha512sum1
assign x[3][0] = {A[13:0], A[63:14]};
assign x[3][1] = {A[17:0], A[63:18]};
assign x[3][2] = {A[40:0], A[63:41]};
assign x[3][0] = {A[13:0], A[63:14]}; // ror 14
assign x[3][1] = {A[17:0], A[63:18]}; // ror 18
assign x[3][2] = {A[40:0], A[63:41]}; // ror 41
// 64-bit muxes to select inputs to xor3 for sha512
assign y[0] = x[ZKNHSelect[1:0]][0];
assign y[1] = x[ZKNHSelect[1:0]][1];
assign y[2] = x[ZKNHSelect[1:0]][2];
assign y[0] = x[ZKNHSelect[1:0]][0];
assign y[1] = x[ZKNHSelect[1:0]][1];
assign y[2] = x[ZKNHSelect[1:0]][2];
// sha512 64-bit xor3
assign result = y[0] ^ y[1] ^ y[2];