mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-03 18:25:27 +00:00
Commented sha instructions
This commit is contained in:
parent
ac153bc4ed
commit
b0d1344121
@ -37,29 +37,29 @@ module sha256 (
|
|||||||
// sha256{sig0/sig1/sum0/sum1} select shifted operands for 32-bit xor3 and then sign-extend
|
// sha256{sig0/sig1/sum0/sum1} select shifted operands for 32-bit xor3 and then sign-extend
|
||||||
|
|
||||||
// sha256sig0
|
// sha256sig0
|
||||||
assign x[0][0] = {A[6:0], A[31:7]};
|
assign x[0][0] = {A[6:0], A[31:7]}; // ror 7
|
||||||
assign x[0][1] = {A[17:0], A[31:18]};
|
assign x[0][1] = {A[17:0], A[31:18]}; // ror 18
|
||||||
assign x[0][2] = {3'b0, A[31:3]};
|
assign x[0][2] = {3'b0, A[31:3]}; // >> 3
|
||||||
|
|
||||||
// sha256sig1
|
// sha256sig1
|
||||||
assign x[1][0] = {A[16:0], A[31:17]};
|
assign x[1][0] = {A[16:0], A[31:17]}; // ror 17
|
||||||
assign x[1][1] = {A[18:0], A[31:19]};
|
assign x[1][1] = {A[18:0], A[31:19]}; // ror 19
|
||||||
assign x[1][2] = {10'b0, A[31:10]};
|
assign x[1][2] = {10'b0, A[31:10]}; // >> 10
|
||||||
|
|
||||||
// sha256sum0
|
// sha256sum0
|
||||||
assign x[2][0] = {A[1:0], A[31:2]};
|
assign x[2][0] = {A[1:0], A[31:2]}; // ror 2
|
||||||
assign x[2][1] = {A[12:0], A[31:13]};
|
assign x[2][1] = {A[12:0], A[31:13]}; // ror 13
|
||||||
assign x[2][2] = {A[21:0], A[31:22]};
|
assign x[2][2] = {A[21:0], A[31:22]}; // ror 22
|
||||||
|
|
||||||
// sha256sum1
|
// sha256sum1
|
||||||
assign x[3][0] = {A[5:0], A[31:6]};
|
assign x[3][0] = {A[5:0], A[31:6]}; // ror 6
|
||||||
assign x[3][1] ={A[10:0], A[31:11]};
|
assign x[3][1] ={ A[10:0], A[31:11]}; // ror 11
|
||||||
assign x[3][2] = {A[24:0], A[31:25]};
|
assign x[3][2] = {A[24:0], A[31:25]}; // ror 25
|
||||||
|
|
||||||
// 32-bit muxes to select inputs to xor3 for sha256
|
// 32-bit muxes to select inputs to xor3 for sha256
|
||||||
assign y[0] = x[ZKNHSelect[1:0]][0];
|
assign y[0] = x[ZKNHSelect[1:0]][0];
|
||||||
assign y[1] = x[ZKNHSelect[1:0]][1];
|
assign y[1] = x[ZKNHSelect[1:0]][1];
|
||||||
assign y[2] = x[ZKNHSelect[1:0]][2];
|
assign y[2] = x[ZKNHSelect[1:0]][2];
|
||||||
|
|
||||||
// sha256 32-bit xor3
|
// sha256 32-bit xor3
|
||||||
assign result = y[0] ^ y[1] ^ y[2];
|
assign result = y[0] ^ y[1] ^ y[2];
|
||||||
|
@ -34,33 +34,34 @@ module sha512_32 (
|
|||||||
logic [31:0] x[4][3];
|
logic [31:0] x[4][3];
|
||||||
logic [31:0] y[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
|
// 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]
|
// The l flavors differ from h by using low bits of B instead of zeros in x[0/1][2]
|
||||||
|
|
||||||
// sha512sig0h/l
|
// sha512sig0h/l
|
||||||
assign x[0][0] = {B[0], A[31:1]};
|
assign x[0][0] = {B[0], A[31:1]}; // ror 1
|
||||||
assign x[0][1] = {B[7:0], A[31:8]};
|
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]};
|
assign x[0][2] = {B[6:0] & {7{ZKNHSelect[0]}}, A[31:7]}; // ror/srl 7
|
||||||
|
|
||||||
// sha512sig1h/l
|
// sha512sig1h/l
|
||||||
assign x[1][0] = {A[28:0], B[31:29]};
|
assign x[1][0] = {A[28:0], B[31:29]}; // ror 61
|
||||||
assign x[1][1] = {B[18:0], A[31:19]};
|
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]};
|
assign x[1][2] = {B[5:0] & {6{ZKNHSelect[0]}}, A[31:6]}; // ror/srl 6
|
||||||
|
|
||||||
// sha512sum0r
|
// sha512sum0r
|
||||||
assign x[2][0] = {A[6:0], B[31:7]};
|
assign x[2][0] = {A[6:0], B[31:7]}; // ror 39
|
||||||
assign x[2][1] = {A[1:0], B[31:2]};
|
assign x[2][1] = {A[1:0], B[31:2]}; // ror 34
|
||||||
assign x[2][2] = {B[27:0], A[31:28]};
|
assign x[2][2] = {B[27:0], A[31:28]}; // ror 28
|
||||||
|
|
||||||
// sha512sum1r
|
// sha512sum1r
|
||||||
assign x[3][0] = {A[8:0], B[31:9]};
|
assign x[3][0] = {A[8:0], B[31:9]}; // ror 41
|
||||||
assign x[3][1] = {B[13:0], A[31:14]};
|
assign x[3][1] = {B[13:0], A[31:14]}; // ror 14
|
||||||
assign x[3][2] = {B[17:0], A[31:18]};
|
assign x[3][2] = {B[17:0], A[31:18]}; // ror 18
|
||||||
|
|
||||||
// 32-bit muxes to select inputs to xor6 for sha512
|
// 32-bit muxes to select inputs to xor6 for sha512
|
||||||
assign y[0] = x[ZKNHSelect[2:1]][0];
|
assign y[0] = x[ZKNHSelect[2:1]][0];
|
||||||
assign y[1] = x[ZKNHSelect[2:1]][1];
|
assign y[1] = x[ZKNHSelect[2:1]][1];
|
||||||
assign y[2] = x[ZKNHSelect[2:1]][2];
|
assign y[2] = x[ZKNHSelect[2:1]][2];
|
||||||
|
|
||||||
// sha512 32-bit xor6
|
// sha512 32-bit xor6
|
||||||
|
@ -33,33 +33,33 @@ module sha512_64 (
|
|||||||
|
|
||||||
logic [63:0] x[4][3];
|
logic [63:0] x[4][3];
|
||||||
logic [63:0] y[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
|
// sha512sig0
|
||||||
assign x[0][0] = {A[0], A[63:1]};
|
assign x[0][0] = {A[0], A[63:1]}; // ror 1
|
||||||
assign x[0][1] = {A[7:0], A[63:8]};
|
assign x[0][1] = {A[7:0], A[63:8]}; // ror 8
|
||||||
assign x[0][2] = A >> 7;
|
assign x[0][2] = {7'b0, A[63:7]}; // >> 7
|
||||||
|
|
||||||
// sha512sig1
|
// sha512sig1
|
||||||
assign x[1][0] = {A[18:0], A[63:19]};
|
assign x[1][0] = {A[18:0], A[63:19]}; // ror 19
|
||||||
assign x[1][1] = {A[60:0], A[63:61]};
|
assign x[1][1] = {A[60:0], A[63:61]}; // ror 61
|
||||||
assign x[1][2] = A >> 6;
|
assign x[1][2] = {6'b0, A[63:6]}; // >> 6
|
||||||
|
|
||||||
// sha512sum0
|
// sha512sum0
|
||||||
assign x[2][0] = {A[27:0], A[63:28]};
|
assign x[2][0] = {A[27:0], A[63:28]}; // ror 28
|
||||||
assign x[2][1] = {A[33:0], A[63:34]};
|
assign x[2][1] = {A[33:0], A[63:34]}; // ror 34
|
||||||
assign x[2][2] = {A[38:0], A[63:39]};
|
assign x[2][2] = {A[38:0], A[63:39]}; // ror 39
|
||||||
|
|
||||||
// sha512sum1
|
// sha512sum1
|
||||||
assign x[3][0] = {A[13:0], A[63:14]};
|
assign x[3][0] = {A[13:0], A[63:14]}; // ror 14
|
||||||
assign x[3][1] = {A[17:0], A[63:18]};
|
assign x[3][1] = {A[17:0], A[63:18]}; // ror 18
|
||||||
assign x[3][2] = {A[40:0], A[63:41]};
|
assign x[3][2] = {A[40:0], A[63:41]}; // ror 41
|
||||||
|
|
||||||
// 64-bit muxes to select inputs to xor3 for sha512
|
// 64-bit muxes to select inputs to xor3 for sha512
|
||||||
assign y[0] = x[ZKNHSelect[1:0]][0];
|
assign y[0] = x[ZKNHSelect[1:0]][0];
|
||||||
assign y[1] = x[ZKNHSelect[1:0]][1];
|
assign y[1] = x[ZKNHSelect[1:0]][1];
|
||||||
assign y[2] = x[ZKNHSelect[1:0]][2];
|
assign y[2] = x[ZKNHSelect[1:0]][2];
|
||||||
|
|
||||||
// sha512 64-bit xor3
|
// sha512 64-bit xor3
|
||||||
assign result = y[0] ^ y[1] ^ y[2];
|
assign result = y[0] ^ y[1] ^ y[2];
|
||||||
|
Loading…
Reference in New Issue
Block a user