| ///////////////////////////////////////////////////////////////////// |
| //// //// |
| //// SHA-160 //// |
| //// Secure Hash Algorithm (SHA-160) //// |
| //// //// |
| //// Author: marsgod //// |
| //// marsgod@opencores.org //// |
| //// //// |
| //// //// |
| //// Downloaded from: http://www.opencores.org/cores/sha_core/ //// |
| //// //// |
| ///////////////////////////////////////////////////////////////////// |
| //// //// |
| //// Copyright (C) 2002-2004 marsgod //// |
| //// marsgod@opencores.org //// |
| //// //// |
| //// //// |
| //// This source file may be used and distributed without //// |
| //// restriction provided that this copyright statement is not //// |
| //// removed from the file and that any derivative work contains //// |
| //// the original copyright notice and the associated disclaimer.//// |
| //// //// |
| //// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// |
| //// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// |
| //// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// |
| //// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// |
| //// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //// |
| //// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES //// |
| //// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE //// |
| //// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR //// |
| //// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF //// |
| //// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT //// |
| //// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT //// |
| //// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //// |
| //// POSSIBILITY OF SUCH DAMAGE. //// |
| //// //// |
| ///////////////////////////////////////////////////////////////////// |
| |
| `define SHA1_H0 32'h67452301 |
| `define SHA1_H1 32'hefcdab89 |
| `define SHA1_H2 32'h98badcfe |
| `define SHA1_H3 32'h10325476 |
| `define SHA1_H4 32'hc3d2e1f0 |
| |
| `define SHA1_K0 32'h5a827999 |
| `define SHA1_K1 32'h6ed9eba1 |
| `define SHA1_K2 32'h8f1bbcdc |
| `define SHA1_K3 32'hca62c1d6 |
| |
| module sha1 (clk_i, rst_i, text_i, text_o, cmd_i, cmd_w_i, cmd_o); |
| |
| input clk_i; // global clock input |
| input rst_i; // global reset input , active high |
| |
| input [31:0] text_i; // text input 32bit |
| output [31:0] text_o; // text output 32bit |
| |
| input [2:0] cmd_i; // command input |
| input cmd_w_i;// command input write enable |
| output [3:0] cmd_o; // command output(status) |
| |
| /* |
| cmd |
| Busy Round W R |
| |
| bit3 bit2 bit1 bit0 |
| Busy Round W R |
| |
| Busy: |
| 0 idle |
| 1 busy |
| |
| Round: |
| 0 first round |
| 1 internal round |
| |
| W: |
| 0 No-op |
| 1 write data |
| |
| R: |
| 0 No-op |
| 1 read data |
| |
| */ |
| |
| |
| reg [3:0] cmd; |
| wire [3:0] cmd_o; |
| |
| reg [31:0] text_o; |
| |
| reg [6:0] round; |
| wire [6:0] round_plus_1; |
| |
| reg [2:0] read_counter; |
| |
| reg [31:0] H0,H1,H2,H3,H4; |
| reg [31:0] W0,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14; |
| reg [31:0] Wt,Kt; |
| reg [31:0] A,B,C,D,E; |
| |
| reg busy; |
| |
| assign cmd_o = cmd; |
| always @ (posedge clk_i) |
| begin |
| if (rst_i) |
| cmd <= 4'b0000; |
| else |
| if (cmd_w_i) |
| cmd[2:0] <= cmd_i[2:0]; // busy bit can't write |
| else |
| begin |
| cmd[3] <= busy; // update busy bit |
| if (~busy) |
| cmd[1:0] <= 2'b00; // hardware auto clean R/W bits |
| end |
| end |
| |
| // Hash functions |
| wire [31:0] SHA1_f1_BCD,SHA1_f2_BCD,SHA1_f3_BCD,SHA1_Wt_1; |
| wire [31:0] SHA1_ft_BCD; |
| wire [31:0] next_Wt,next_A,next_C; |
| wire [159:0] SHA1_result; |
| |
| assign SHA1_f1_BCD = (B & C) ^ (~B & D); |
| assign SHA1_f2_BCD = B ^ C ^ D; |
| assign SHA1_f3_BCD = (B & C) ^ (C & D) ^ (B & D); |
| |
| assign SHA1_ft_BCD = (round < 7'b0100101) ? SHA1_f1_BCD : (round < 7'b101001) ? SHA1_f2_BCD : (round < 7'b1111101) ? SHA1_f3_BCD : SHA1_f2_BCD; |
| |
| // Odin II doesn't support binary operations inside concatenations presently. |
| //assign SHA1_Wt_1 = {W13 ^ W8 ^ W2 ^ W0}; |
| assign SHA1_Wt_1 = W13 ^ W8 ^ W2 ^ W0; |
| |
| assign next_Wt = {SHA1_Wt_1[30:0],SHA1_Wt_1[31]}; // NSA fix added |
| assign next_A = {A[26:0],A[31:27]} + SHA1_ft_BCD + E + Kt + Wt; |
| assign next_C = {B[1:0],B[31:2]}; |
| |
| assign SHA1_result = {A,B,C,D,E}; |
| |
| assign round_plus_1 = round + 1; |
| |
| //------------------------------------------------------------------ |
| // SHA round |
| //------------------------------------------------------------------ |
| always @(posedge clk_i) |
| begin |
| if (rst_i) |
| begin |
| round <= 7'b0000000; |
| busy <= 1'b0; |
| |
| W0 <= 32'b00000000000000000000000000000000; |
| W1 <= 32'b00000000000000000000000000000000; |
| W2 <= 32'b00000000000000000000000000000000; |
| W3 <= 32'b00000000000000000000000000000000; |
| W4 <= 32'b00000000000000000000000000000000; |
| W5 <= 32'b00000000000000000000000000000000; |
| W6 <= 32'b00000000000000000000000000000000; |
| W7 <= 32'b00000000000000000000000000000000; |
| W8 <= 32'b00000000000000000000000000000000; |
| W9 <= 32'b00000000000000000000000000000000; |
| W10 <= 32'b00000000000000000000000000000000; |
| W11 <= 32'b00000000000000000000000000000000; |
| W12 <= 32'b00000000000000000000000000000000; |
| W13 <= 32'b00000000000000000000000000000000; |
| W14 <= 32'b00000000000000000000000000000000; |
| Wt <= 32'b00000000000000000000000000000000; |
| |
| A <= 32'b00000000000000000000000000000000; |
| B <= 32'b00000000000000000000000000000000; |
| C <= 32'b00000000000000000000000000000000; |
| D <= 32'b00000000000000000000000000000000; |
| E <= 32'b00000000000000000000000000000000; |
| |
| H0 <= 32'b00000000000000000000000000000000; |
| H1 <= 32'b00000000000000000000000000000000; |
| H2 <= 32'b00000000000000000000000000000000; |
| H3 <= 32'b00000000000000000000000000000000; |
| H4 <= 32'b00000000000000000000000000000000; |
| |
| end |
| else |
| begin |
| case (round) |
| |
| 7'b0000000: |
| begin |
| if (cmd[1]) |
| begin |
| W0 <= text_i; |
| Wt <= text_i; |
| busy <= 1'b1; |
| round <= round_plus_1; |
| |
| case (cmd[2]) |
| 1'b0: // sha-1 first message |
| begin |
| A <= `SHA1_H0; |
| B <= `SHA1_H1; |
| C <= `SHA1_H2; |
| D <= `SHA1_H3; |
| E <= `SHA1_H4; |
| |
| H0 <= `SHA1_H0; |
| H1 <= `SHA1_H1; |
| H2 <= `SHA1_H2; |
| H3 <= `SHA1_H3; |
| H4 <= `SHA1_H4; |
| end |
| 1'b1: // sha-1 internal message |
| begin |
| H0 <= A; |
| H1 <= B; |
| H2 <= C; |
| H3 <= D; |
| H4 <= E; |
| end |
| endcase |
| end |
| else |
| begin // IDLE |
| round <= 7'b0000000; |
| end |
| end |
| 7'b0000001: |
| begin |
| W1 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0000010: |
| begin |
| W2 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0000011: |
| begin |
| W3 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0000100: |
| begin |
| W4 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0000101: |
| begin |
| W5 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0000110: |
| begin |
| W6 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0000111: |
| begin |
| W7 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001000: |
| begin |
| W8 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001001: |
| begin |
| W9 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001010: |
| begin |
| W10 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001011: |
| begin |
| W11 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001100: |
| begin |
| W12 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001101: |
| begin |
| W13 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001110: |
| begin |
| W14 <= text_i; |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0001111: |
| begin |
| Wt <= text_i; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0010111:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0011111:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0100111:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0101111:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0110111:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b0111111:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1000111:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001000:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001001:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001010:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001011:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001100:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001101:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001110:begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1001111: |
| begin |
| W0 <= W1; |
| W1 <= W2; |
| W2 <= W3; |
| W3 <= W4; |
| W4 <= W5; |
| W5 <= W6; |
| W6 <= W7; |
| W7 <= W8; |
| W8 <= W9; |
| W9 <= W10; |
| W10 <= W11; |
| W11 <= W12; |
| W12 <= W13; |
| W13 <= W14; |
| W14 <= Wt; |
| Wt <= next_Wt; |
| |
| E <= D; |
| D <= C; |
| C <= next_C; |
| B <= A; |
| A <= next_A; |
| |
| round <= round_plus_1; |
| end |
| 7'b1010000: |
| begin |
| A <= next_A + H0; |
| B <= A + H1; |
| C <= next_C + H2; |
| D <= C + H3; |
| E <= D + H4; |
| round <= 7'b0000000; |
| busy <= 1'b0; |
| end |
| default: |
| begin |
| round <= 7'b0000000; |
| busy <= 1'b0; |
| end |
| endcase |
| end |
| end |
| |
| |
| //------------------------------------------------------------------ |
| // Kt generator |
| //------------------------------------------------------------------ |
| always @ (posedge clk_i) |
| begin |
| if (rst_i) |
| begin |
| Kt <= 32'b00000000000000000000000000000000; |
| end |
| else |
| begin |
| if (round < 7'b0100000) |
| Kt <= `SHA1_K0; |
| else |
| if (round < 7'b1010000) |
| Kt <= `SHA1_K1; |
| else |
| if (round < 7'b1111100) |
| Kt <= `SHA1_K2; |
| else |
| Kt <= `SHA1_K3; |
| end |
| end |
| |
| //------------------------------------------------------------------ |
| // read result |
| //------------------------------------------------------------------ |
| always @ (posedge clk_i) |
| begin |
| if (rst_i) |
| begin |
| text_o <= 32'b00000000000000000000000000000000; |
| read_counter <= 3'b000; |
| end |
| else |
| begin |
| if (cmd[0]) |
| begin |
| read_counter <= 3'b100; // sha-1 160/32=5 |
| end |
| else |
| begin |
| if (~busy) |
| begin |
| case (read_counter) |
| 3'b100: text_o <= SHA1_result[5*32-1:4*32]; |
| 3'b011: text_o <= SHA1_result[4*32-1:3*32]; |
| 3'b010: text_o <= SHA1_result[3*32-1:2*32]; |
| 3'b001: text_o <= SHA1_result[2*32-1:1*32]; |
| 3'b000: text_o <= SHA1_result[1*32-1:0*32]; |
| default:text_o <= 3'b000; |
| endcase |
| if (|read_counter) |
| read_counter <= read_counter - 7'b0000001; |
| end |
| else |
| begin |
| text_o <= 32'b00000000000000000000000000000000; |
| end |
| end |
| end |
| end |
| |
| endmodule |
| |