Delete Verilog_Code directory
diff --git a/Verilog_Code/REadme.md b/Verilog_Code/REadme.md
deleted file mode 100644
index 3cd0758..0000000
--- a/Verilog_Code/REadme.md
+++ /dev/null
@@ -1,2 +0,0 @@
-The verilog code for the project.
-Due credits to the respective authors have been given
diff --git a/Verilog_Code/clock_mux.v b/Verilog_Code/clock_mux.v
deleted file mode 100644
index 20ca430..0000000
--- a/Verilog_Code/clock_mux.v
+++ /dev/null
@@ -1,83 +0,0 @@
-//

-// Switch between two clock sources.

-// In this design the output clock stays LOW between switching clocks.

-// After a reset clk1 is selected.

-// sel_clk2 is assumed to have a high/low duration of at least 2 clock

-// periods of the slowest of clk1 or clk2.

-// (If the above rule is not followed, certain pathological patterns of

-//  sel_clk2 against the input clocks will produce low period violations)

-//

-

-// 

-// Design by G.J. van Loo, FenLogic Ltd, 3-January-2017.

-//

-// This program is free software. It comes without any guarantees or

-// warranty to the extent permitted by applicable law. Although the

-// author has attempted to find and correct any bugs in this free software

-// program, the author is not responsible for any damage or losses of any

-// kind caused by the use or misuse of the program. You can redistribute

-// the program and or modify it in any form without obligations, but the

-// author would appreciated if the credits stays in.

-// 

-

-

-module clock_mux

-   (

-   input    clk1,      // Clock 1 supposed to be faster

-   input    clk2,      // Clock 2  supposed to be slower

-   input    reset_n,   // System reset

-   input    sel_clk2,  // Select clock2 when high

-   output   clk1or2    // Selected clock

-   );

-

-reg [1:0] meta1_off,sync1_off;

-reg [1:0] meta1_on, sync1_on;

-reg [1:0] meta2_off,sync2_off;

-reg [1:0] meta2_on, sync2_on;

-

-

-   always @(posedge clk1 or negedge reset_n)

-   begin

-      if (!reset_n)

-      begin

-         meta1_off <= 1'b0;

-         sync1_off <= 1'b0;

-         meta1_on  <= 1'b1;

-         sync1_on  <= 1'b1;

-      end

-      else

-      begin

-         // Switch off when not selected

-         meta1_off <= sel_clk2;

-         sync1_off <= meta1_off;

-         // Switch on when other clock (clk2) is off 

-         meta1_on  <= sync2_off;

-         sync1_on  <= meta1_on;

-      end

-   end

-

-   always @(posedge clk2 or negedge reset_n)

-   begin

-      if (!reset_n)

-      begin

-         meta2_off <= 1'b1;

-         sync2_off <= 1'b1;

-         meta2_on  <= 1'b0;

-         sync2_on  <= 1'b0;

-      end

-      else

-      begin

-         // Switch off when not selected

-         meta2_off <= ~sel_clk2;

-         sync2_off <= meta2_off;

-         // Switch on when other clock (clk1) is off 

-         meta2_on  <= sync1_off;

-         sync2_on  <= meta2_on;

-      end

-   end

-

-   assign clk1or2 = (clk1 & ~sync1_off & sync1_on  ) | 

-                    (clk2 & ~sync2_off & sync2_on  );

-

-endmodule // clock_rnux

-

diff --git a/Verilog_Code/sha256.v b/Verilog_Code/sha256.v
deleted file mode 100644
index c47500c..0000000
--- a/Verilog_Code/sha256.v
+++ /dev/null
@@ -1,265 +0,0 @@
-//======================================================================
-//
-// sha256.v
-// --------
-// Top level wrapper for the SHA-256 hash function providing
-// a simple memory like interface with 32 bit data access.
-//
-//
-// Author: Joachim Strombergson
-// Copyright (c) 2013, 201, Secworks Sweden AB
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or
-// without modification, are permitted provided that the following
-// conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in
-//    the documentation and/or other materials provided with the
-//    distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT OWNER 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.
-//
-//======================================================================
-
-`default_nettype none
-
-module sha256(
-              // Clock and reset.
-              input wire           clk,
-              input wire           reset_n,
-
-              // Control.
-              input wire           cs,
-              input wire           we,
-
-              // Data ports.
-              input wire  [7 : 0]  address,
-              input wire  [31 : 0] write_data,
-              output wire [31 : 0] read_data,
-              output wire          error
-             );
-
-  //----------------------------------------------------------------
-  // Internal constant and parameter definitions.
-  //----------------------------------------------------------------
-  localparam ADDR_NAME0       = 8'h00;
-  localparam ADDR_NAME1       = 8'h01;
-  localparam ADDR_VERSION     = 8'h02;
-
-  localparam ADDR_CTRL        = 8'h08;
-  localparam CTRL_INIT_BIT    = 0;
-  localparam CTRL_NEXT_BIT    = 1;
-  localparam CTRL_MODE_BIT    = 2;
-
-  localparam ADDR_STATUS      = 8'h09;
-  localparam STATUS_READY_BIT = 0;
-  localparam STATUS_VALID_BIT = 1;
-
-  localparam ADDR_BLOCK0    = 8'h10;
-  localparam ADDR_BLOCK15   = 8'h1f;
-
-  localparam ADDR_DIGEST0   = 8'h20;
-  localparam ADDR_DIGEST7   = 8'h27;
-
-  localparam CORE_NAME0     = 32'h73686132; // "sha2"
-  localparam CORE_NAME1     = 32'h2d323536; // "-256"
-  localparam CORE_VERSION   = 32'h312e3830; // "1.80"
-
-  localparam MODE_SHA_224   = 1'h0;
-  localparam MODE_SHA_256   = 1'h1;
-
-
-  //----------------------------------------------------------------
-  // Registers including update variables and write enable.
-  //----------------------------------------------------------------
-  reg init_reg;
-  reg init_new;
-
-  reg next_reg;
-  reg next_new;
-
-  reg mode_reg;
-  reg mode_new;
-  reg mode_we;
-
-  reg ready_reg;
-
-  reg [31 : 0] block_reg [0 : 15];
-  reg          block_we;
-
-  reg [255 : 0] digest_reg;
-
-  reg digest_valid_reg;
-
-
-  //----------------------------------------------------------------
-  // Wires.
-  //----------------------------------------------------------------
-  wire           core_ready;
-  wire [511 : 0] core_block;
-  wire [255 : 0] core_digest;
-  wire           core_digest_valid;
-
-  reg [31 : 0]   tmp_read_data;
-  reg            tmp_error;
-
-
-  //----------------------------------------------------------------
-  // Concurrent connectivity for ports etc.
-  //----------------------------------------------------------------
-  assign core_block = {block_reg[00], block_reg[01], block_reg[02], block_reg[03],
-                       block_reg[04], block_reg[05], block_reg[06], block_reg[07],
-                       block_reg[08], block_reg[09], block_reg[10], block_reg[11],
-                       block_reg[12], block_reg[13], block_reg[14], block_reg[15]};
-
-  assign read_data = tmp_read_data;
-  assign error     = tmp_error;
-
-
-  //----------------------------------------------------------------
-  // core instantiation.
-  //----------------------------------------------------------------
-  sha256_core core(
-                   .clk(clk),
-                   .reset_n(reset_n),
-
-                   .init(init_reg),
-                   .next(next_reg),
-                   .mode(mode_reg),
-
-                   .block(core_block),
-
-                   .ready(core_ready),
-
-                   .digest(core_digest),
-                   .digest_valid(core_digest_valid)
-                  );
-
-
-  //----------------------------------------------------------------
-  // reg_update
-  //
-  // Update functionality for all registers in the core.
-  // All registers are positive edge triggered with asynchronous
-  // active low reset. All registers have write enable.
-  //----------------------------------------------------------------
-  always @ (posedge clk or negedge reset_n)
-    begin : reg_update
-      integer i;
-
-      if (!reset_n)
-        begin
-          for (i = 0 ; i < 16 ; i = i + 1)
-            block_reg[i] <= 32'h0;
-
-          init_reg         <= 0;
-          next_reg         <= 0;
-          ready_reg        <= 0;
-          mode_reg         <= MODE_SHA_256;
-          digest_reg       <= 256'h0;
-          digest_valid_reg <= 0;
-        end
-      else
-        begin
-          ready_reg        <= core_ready;
-          digest_valid_reg <= core_digest_valid;
-          init_reg         <= init_new;
-          next_reg         <= next_new;
-
-          if (mode_we)
-            mode_reg <= mode_new;
-
-          if (core_digest_valid)
-            digest_reg <= core_digest;
-
-          if (block_we)
-            block_reg[address[3 : 0]] <= write_data;
-        end
-    end // reg_update
-
-
-  //----------------------------------------------------------------
-  // api_logic
-  //
-  // Implementation of the api logic. If cs is enabled will either
-  // try to write to or read from the internal registers.
-  //----------------------------------------------------------------
-  always @*
-    begin : api_logic
-      init_new      = 0;
-      next_new      = 0;
-      mode_new      = 0;
-      mode_we       = 0;
-      block_we      = 0;
-      tmp_read_data = 32'h0;
-      tmp_error     = 0;
-
-      if (cs)
-        begin
-          if (we)
-            begin
-              if (address == ADDR_CTRL)
-                begin
-                  init_new = write_data[CTRL_INIT_BIT];
-                  next_new = write_data[CTRL_NEXT_BIT];
-                  mode_new = write_data[CTRL_MODE_BIT];
-                  mode_we  = 1;
-                end
-
-              if ((address >= ADDR_BLOCK0) && (address <= ADDR_BLOCK15))
-                block_we = 1;
-            end // if (we)
-
-          else
-            begin
-              if ((address >= ADDR_BLOCK0) && (address <= ADDR_BLOCK15))
-                tmp_read_data = block_reg[address[3 : 0]];
-
-              if ((address >= ADDR_DIGEST0) && (address <= ADDR_DIGEST7))
-                tmp_read_data = digest_reg[(7 - (address - ADDR_DIGEST0)) * 32 +: 32];
-
-              case (address)
-                // Read operations.
-                ADDR_NAME0:
-                  tmp_read_data = CORE_NAME0;
-
-                ADDR_NAME1:
-                  tmp_read_data = CORE_NAME1;
-
-                ADDR_VERSION:
-                  tmp_read_data = CORE_VERSION;
-
-                ADDR_CTRL:
-                  tmp_read_data = {29'h0, mode_reg, next_reg, init_reg};
-
-                ADDR_STATUS:
-                  tmp_read_data = {30'h0, digest_valid_reg, ready_reg};
-
-                default:
-                  begin
-                  end
-              endcase // case (address)
-            end
-        end
-    end // addr_decoder
-endmodule // sha256
-
-//======================================================================
-// EOF sha256.v
-//======================================================================
diff --git a/Verilog_Code/sha256_core.v b/Verilog_Code/sha256_core.v
deleted file mode 100644
index b2c880e..0000000
--- a/Verilog_Code/sha256_core.v
+++ /dev/null
@@ -1,552 +0,0 @@
-//======================================================================
-//
-// sha256_core.v
-// -------------
-// Verilog 2001 implementation of the SHA-256 hash function.
-// This is the internal core with wide interfaces.
-//
-//
-// Author: Joachim Strombergson
-// Copyright (c) 2013, Secworks Sweden AB
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or
-// without modification, are permitted provided that the following
-// conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in
-//    the documentation and/or other materials provided with the
-//    distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT OWNER 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.
-//
-//======================================================================
-
-`default_nettype none
-
-module sha256_core(
-                   input wire            clk,
-                   input wire            reset_n,
-
-                   input wire            init,
-                   input wire            next,
-                   input wire            mode,
-
-                   input wire [511 : 0]  block,
-
-                   output wire           ready,
-                   output wire [255 : 0] digest,
-                   output wire           digest_valid
-                  );
-
-
-  //----------------------------------------------------------------
-  // Internal constant and parameter definitions.
-  //----------------------------------------------------------------
-  localparam SHA224_H0_0 = 32'hc1059ed8;
-  localparam SHA224_H0_1 = 32'h367cd507;
-  localparam SHA224_H0_2 = 32'h3070dd17;
-  localparam SHA224_H0_3 = 32'hf70e5939;
-  localparam SHA224_H0_4 = 32'hffc00b31;
-  localparam SHA224_H0_5 = 32'h68581511;
-  localparam SHA224_H0_6 = 32'h64f98fa7;
-  localparam SHA224_H0_7 = 32'hbefa4fa4;
-
-  localparam SHA256_H0_0 = 32'h6a09e667;
-  localparam SHA256_H0_1 = 32'hbb67ae85;
-  localparam SHA256_H0_2 = 32'h3c6ef372;
-  localparam SHA256_H0_3 = 32'ha54ff53a;
-  localparam SHA256_H0_4 = 32'h510e527f;
-  localparam SHA256_H0_5 = 32'h9b05688c;
-  localparam SHA256_H0_6 = 32'h1f83d9ab;
-  localparam SHA256_H0_7 = 32'h5be0cd19;
-
-  localparam SHA256_ROUNDS = 63;
-
-  localparam CTRL_IDLE   = 0;
-  localparam CTRL_ROUNDS = 1;
-  localparam CTRL_DONE   = 2;
-
-
-  //----------------------------------------------------------------
-  // Registers including update variables and write enable.
-  //----------------------------------------------------------------
-  reg [31 : 0] a_reg;
-  reg [31 : 0] a_new;
-  reg [31 : 0] b_reg;
-  reg [31 : 0] b_new;
-  reg [31 : 0] c_reg;
-  reg [31 : 0] c_new;
-  reg [31 : 0] d_reg;
-  reg [31 : 0] d_new;
-  reg [31 : 0] e_reg;
-  reg [31 : 0] e_new;
-  reg [31 : 0] f_reg;
-  reg [31 : 0] f_new;
-  reg [31 : 0] g_reg;
-  reg [31 : 0] g_new;
-  reg [31 : 0] h_reg;
-  reg [31 : 0] h_new;
-  reg          a_h_we;
-
-  reg [31 : 0] H0_reg;
-  reg [31 : 0] H0_new;
-  reg [31 : 0] H1_reg;
-  reg [31 : 0] H1_new;
-  reg [31 : 0] H2_reg;
-  reg [31 : 0] H2_new;
-  reg [31 : 0] H3_reg;
-  reg [31 : 0] H3_new;
-  reg [31 : 0] H4_reg;
-  reg [31 : 0] H4_new;
-  reg [31 : 0] H5_reg;
-  reg [31 : 0] H5_new;
-  reg [31 : 0] H6_reg;
-  reg [31 : 0] H6_new;
-  reg [31 : 0] H7_reg;
-  reg [31 : 0] H7_new;
-  reg          H_we;
-
-  reg [5 : 0] t_ctr_reg;
-  reg [5 : 0] t_ctr_new;
-  reg         t_ctr_we;
-  reg         t_ctr_inc;
-  reg         t_ctr_rst;
-
-  reg digest_valid_reg;
-  reg digest_valid_new;
-  reg digest_valid_we;
-
-  reg [1 : 0] sha256_ctrl_reg;
-  reg [1 : 0] sha256_ctrl_new;
-  reg         sha256_ctrl_we;
-
-
-  //----------------------------------------------------------------
-  // Wires.
-  //----------------------------------------------------------------
-  reg digest_init;
-  reg digest_update;
-
-  reg state_init;
-  reg state_update;
-
-  reg first_block;
-
-  reg ready_flag;
-
-  reg [31 : 0] t1;
-  reg [31 : 0] t2;
-
-  wire [31 : 0] k_data;
-
-  reg           w_init;
-  reg           w_next;
-  wire [31 : 0] w_data;
-
-
-  //----------------------------------------------------------------
-  // Module instantiantions.
-  //----------------------------------------------------------------
-  sha256_k_constants k_constants_inst(
-                                      .round(t_ctr_reg),
-                                      .K(k_data)
-                                     );
-
-
-  sha256_w_mem w_mem_inst(
-                          .clk(clk),
-                          .reset_n(reset_n),
-
-                          .block(block),
-
-                          .init(w_init),
-                          .next(w_next),
-                          .w(w_data)
-                         );
-
-
-  //----------------------------------------------------------------
-  // Concurrent connectivity for ports etc.
-  //----------------------------------------------------------------
-  assign ready = ready_flag;
-
-  assign digest = {H0_reg, H1_reg, H2_reg, H3_reg,
-                   H4_reg, H5_reg, H6_reg, H7_reg};
-
-  assign digest_valid = digest_valid_reg;
-
-
-  //----------------------------------------------------------------
-  // reg_update
-  // Update functionality for all registers in the core.
-  // All registers are positive edge triggered with asynchronous
-  // active low reset. All registers have write enable.
-  //----------------------------------------------------------------
-  always @ (posedge clk or negedge reset_n)
-    begin : reg_update
-      if (!reset_n)
-        begin
-          a_reg            <= 32'h0;
-          b_reg            <= 32'h0;
-          c_reg            <= 32'h0;
-          d_reg            <= 32'h0;
-          e_reg            <= 32'h0;
-          f_reg            <= 32'h0;
-          g_reg            <= 32'h0;
-          h_reg            <= 32'h0;
-          H0_reg           <= 32'h0;
-          H1_reg           <= 32'h0;
-          H2_reg           <= 32'h0;
-          H3_reg           <= 32'h0;
-          H4_reg           <= 32'h0;
-          H5_reg           <= 32'h0;
-          H6_reg           <= 32'h0;
-          H7_reg           <= 32'h0;
-          digest_valid_reg <= 0;
-          t_ctr_reg        <= 6'h0;
-          sha256_ctrl_reg  <= CTRL_IDLE;
-        end
-      else
-        begin
-
-          if (a_h_we)
-            begin
-              a_reg <= a_new;
-              b_reg <= b_new;
-              c_reg <= c_new;
-              d_reg <= d_new;
-              e_reg <= e_new;
-              f_reg <= f_new;
-              g_reg <= g_new;
-              h_reg <= h_new;
-            end
-
-          if (H_we)
-            begin
-              H0_reg <= H0_new;
-              H1_reg <= H1_new;
-              H2_reg <= H2_new;
-              H3_reg <= H3_new;
-              H4_reg <= H4_new;
-              H5_reg <= H5_new;
-              H6_reg <= H6_new;
-              H7_reg <= H7_new;
-            end
-
-          if (t_ctr_we)
-            t_ctr_reg <= t_ctr_new;
-
-          if (digest_valid_we)
-            digest_valid_reg <= digest_valid_new;
-
-          if (sha256_ctrl_we)
-            sha256_ctrl_reg <= sha256_ctrl_new;
-        end
-    end // reg_update
-
-
-  //----------------------------------------------------------------
-  // digest_logic
-  //
-  // The logic needed to init as well as update the digest.
-  //----------------------------------------------------------------
-  always @*
-    begin : digest_logic
-      H0_new = 32'h0;
-      H1_new = 32'h0;
-      H2_new = 32'h0;
-      H3_new = 32'h0;
-      H4_new = 32'h0;
-      H5_new = 32'h0;
-      H6_new = 32'h0;
-      H7_new = 32'h0;
-      H_we = 0;
-
-      if (digest_init)
-        begin
-          H_we = 1;
-          if (mode)
-            begin
-              H0_new = SHA256_H0_0;
-              H1_new = SHA256_H0_1;
-              H2_new = SHA256_H0_2;
-              H3_new = SHA256_H0_3;
-              H4_new = SHA256_H0_4;
-              H5_new = SHA256_H0_5;
-              H6_new = SHA256_H0_6;
-              H7_new = SHA256_H0_7;
-            end
-          else
-            begin
-              H0_new = SHA224_H0_0;
-              H1_new = SHA224_H0_1;
-              H2_new = SHA224_H0_2;
-              H3_new = SHA224_H0_3;
-              H4_new = SHA224_H0_4;
-              H5_new = SHA224_H0_5;
-              H6_new = SHA224_H0_6;
-              H7_new = SHA224_H0_7;
-            end
-        end
-
-      if (digest_update)
-        begin
-          H0_new = H0_reg + a_reg;
-          H1_new = H1_reg + b_reg;
-          H2_new = H2_reg + c_reg;
-          H3_new = H3_reg + d_reg;
-          H4_new = H4_reg + e_reg;
-          H5_new = H5_reg + f_reg;
-          H6_new = H6_reg + g_reg;
-          H7_new = H7_reg + h_reg;
-          H_we = 1;
-        end
-    end // digest_logic
-
-
-  //----------------------------------------------------------------
-  // t1_logic
-  //
-  // The logic for the T1 function.
-  //----------------------------------------------------------------
-  always @*
-    begin : t1_logic
-      reg [31 : 0] sum1;
-      reg [31 : 0] ch;
-
-      sum1 = {e_reg[5  : 0], e_reg[31 :  6]} ^
-             {e_reg[10 : 0], e_reg[31 : 11]} ^
-             {e_reg[24 : 0], e_reg[31 : 25]};
-
-      ch = (e_reg & f_reg) ^ ((~e_reg) & g_reg);
-
-      t1 = h_reg + sum1 + ch + w_data + k_data;
-    end // t1_logic
-
-
-  //----------------------------------------------------------------
-  // t2_logic
-  //
-  // The logic for the T2 function
-  //----------------------------------------------------------------
-  always @*
-    begin : t2_logic
-      reg [31 : 0] sum0;
-      reg [31 : 0] maj;
-
-      sum0 = {a_reg[1  : 0], a_reg[31 :  2]} ^
-             {a_reg[12 : 0], a_reg[31 : 13]} ^
-             {a_reg[21 : 0], a_reg[31 : 22]};
-
-      maj = (a_reg & b_reg) ^ (a_reg & c_reg) ^ (b_reg & c_reg);
-
-      t2 = sum0 + maj;
-    end // t2_logic
-
-
-  //----------------------------------------------------------------
-  // state_logic
-  //
-  // The logic needed to init as well as update the state during
-  // round processing.
-  //----------------------------------------------------------------
-  always @*
-    begin : state_logic
-      a_new  = 32'h0;
-      b_new  = 32'h0;
-      c_new  = 32'h0;
-      d_new  = 32'h0;
-      e_new  = 32'h0;
-      f_new  = 32'h0;
-      g_new  = 32'h0;
-      h_new  = 32'h0;
-      a_h_we = 0;
-
-      if (state_init)
-        begin
-          a_h_we = 1;
-          if (first_block)
-            begin
-              if (mode)
-                begin
-                  a_new  = SHA256_H0_0;
-                  b_new  = SHA256_H0_1;
-                  c_new  = SHA256_H0_2;
-                  d_new  = SHA256_H0_3;
-                  e_new  = SHA256_H0_4;
-                  f_new  = SHA256_H0_5;
-                  g_new  = SHA256_H0_6;
-                  h_new  = SHA256_H0_7;
-                end
-              else
-                begin
-                  a_new  = SHA224_H0_0;
-                  b_new  = SHA224_H0_1;
-                  c_new  = SHA224_H0_2;
-                  d_new  = SHA224_H0_3;
-                  e_new  = SHA224_H0_4;
-                  f_new  = SHA224_H0_5;
-                  g_new  = SHA224_H0_6;
-                  h_new  = SHA224_H0_7;
-                end
-            end
-          else
-            begin
-              a_new  = H0_reg;
-              b_new  = H1_reg;
-              c_new  = H2_reg;
-              d_new  = H3_reg;
-              e_new  = H4_reg;
-              f_new  = H5_reg;
-              g_new  = H6_reg;
-              h_new  = H7_reg;
-            end
-        end
-
-      if (state_update)
-        begin
-          a_new  = t1 + t2;
-          b_new  = a_reg;
-          c_new  = b_reg;
-          d_new  = c_reg;
-          e_new  = d_reg + t1;
-          f_new  = e_reg;
-          g_new  = f_reg;
-          h_new  = g_reg;
-          a_h_we = 1;
-        end
-    end // state_logic
-
-
-  //----------------------------------------------------------------
-  // t_ctr
-  //
-  // Update logic for the round counter, a monotonically
-  // increasing counter with reset.
-  //----------------------------------------------------------------
-  always @*
-    begin : t_ctr
-      t_ctr_new = 0;
-      t_ctr_we  = 0;
-
-      if (t_ctr_rst)
-        begin
-          t_ctr_new = 0;
-          t_ctr_we  = 1;
-        end
-
-      if (t_ctr_inc)
-        begin
-          t_ctr_new = t_ctr_reg + 1'b1;
-          t_ctr_we  = 1;
-        end
-    end // t_ctr
-
-
-  //----------------------------------------------------------------
-  // sha256_ctrl_fsm
-  //
-  // Logic for the state machine controlling the core behaviour.
-  //----------------------------------------------------------------
-  always @*
-    begin : sha256_ctrl_fsm
-      digest_init      = 0;
-      digest_update    = 0;
-
-      state_init       = 0;
-      state_update     = 0;
-
-      first_block      = 0;
-      ready_flag       = 0;
-
-      w_init           = 0;
-      w_next           = 0;
-
-      t_ctr_inc        = 0;
-      t_ctr_rst        = 0;
-
-      digest_valid_new = 0;
-      digest_valid_we  = 0;
-
-      sha256_ctrl_new  = CTRL_IDLE;
-      sha256_ctrl_we   = 0;
-
-
-      case (sha256_ctrl_reg)
-        CTRL_IDLE:
-          begin
-            ready_flag = 1;
-
-            if (init)
-              begin
-                digest_init      = 1;
-                w_init           = 1;
-                state_init       = 1;
-                first_block      = 1;
-                t_ctr_rst        = 1;
-                digest_valid_new = 0;
-                digest_valid_we  = 1;
-                sha256_ctrl_new  = CTRL_ROUNDS;
-                sha256_ctrl_we   = 1;
-              end
-
-            if (next)
-              begin
-                t_ctr_rst        = 1;
-                w_init           = 1;
-                state_init       = 1;
-                digest_valid_new = 0;
-                digest_valid_we  = 1;
-                sha256_ctrl_new  = CTRL_ROUNDS;
-                sha256_ctrl_we   = 1;
-              end
-          end
-
-
-        CTRL_ROUNDS:
-          begin
-            w_next       = 1;
-            state_update = 1;
-            t_ctr_inc    = 1;
-
-            if (t_ctr_reg == SHA256_ROUNDS)
-              begin
-                sha256_ctrl_new = CTRL_DONE;
-                sha256_ctrl_we  = 1;
-              end
-          end
-
-
-        CTRL_DONE:
-          begin
-            digest_update    = 1;
-            digest_valid_new = 1;
-            digest_valid_we  = 1;
-
-            sha256_ctrl_new  = CTRL_IDLE;
-            sha256_ctrl_we   = 1;
-          end
-      endcase // case (sha256_ctrl_reg)
-    end // sha256_ctrl_fsm
-
-endmodule // sha256_core
-
-//======================================================================
-// EOF sha256_core.v
-//======================================================================
diff --git a/Verilog_Code/sha256_k_constants.v b/Verilog_Code/sha256_k_constants.v
deleted file mode 100644
index bae748e..0000000
--- a/Verilog_Code/sha256_k_constants.v
+++ /dev/null
@@ -1,134 +0,0 @@
-//======================================================================
-//
-// sha256_k_constants.v
-// --------------------
-// The table K with constants in the SHA-256 hash function.
-//
-//
-// Author: Joachim Strombergson
-// Copyright (c) 2013, Secworks Sweden AB
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or
-// without modification, are permitted provided that the following
-// conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in
-//    the documentation and/or other materials provided with the
-//    distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT OWNER 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.
-//
-//======================================================================
-
-`default_nettype none
-
-module sha256_k_constants(
-                          input wire  [5 : 0] round,
-                          output wire [31 : 0] K
-                         );
-
-  //----------------------------------------------------------------
-  // Wires.
-  //----------------------------------------------------------------
-  reg [31 : 0] tmp_K;
-
-
-  //----------------------------------------------------------------
-  // Concurrent connectivity for ports etc.
-  //----------------------------------------------------------------
-  assign K = tmp_K;
-
-
-  //----------------------------------------------------------------
-  // round_mux
-  //----------------------------------------------------------------
-  always @*
-    begin : round_mux
-      case(round)
-        00: tmp_K = 32'h428a2f98;
-        01: tmp_K = 32'h71374491;
-        02: tmp_K = 32'hb5c0fbcf;
-        03: tmp_K = 32'he9b5dba5;
-        04: tmp_K = 32'h3956c25b;
-        05: tmp_K = 32'h59f111f1;
-        06: tmp_K = 32'h923f82a4;
-        07: tmp_K = 32'hab1c5ed5;
-        08: tmp_K = 32'hd807aa98;
-        09: tmp_K = 32'h12835b01;
-        10: tmp_K = 32'h243185be;
-        11: tmp_K = 32'h550c7dc3;
-        12: tmp_K = 32'h72be5d74;
-        13: tmp_K = 32'h80deb1fe;
-        14: tmp_K = 32'h9bdc06a7;
-        15: tmp_K = 32'hc19bf174;
-        16: tmp_K = 32'he49b69c1;
-        17: tmp_K = 32'hefbe4786;
-        18: tmp_K = 32'h0fc19dc6;
-        19: tmp_K = 32'h240ca1cc;
-        20: tmp_K = 32'h2de92c6f;
-        21: tmp_K = 32'h4a7484aa;
-        22: tmp_K = 32'h5cb0a9dc;
-        23: tmp_K = 32'h76f988da;
-        24: tmp_K = 32'h983e5152;
-        25: tmp_K = 32'ha831c66d;
-        26: tmp_K = 32'hb00327c8;
-        27: tmp_K = 32'hbf597fc7;
-        28: tmp_K = 32'hc6e00bf3;
-        29: tmp_K = 32'hd5a79147;
-        30: tmp_K = 32'h06ca6351;
-        31: tmp_K = 32'h14292967;
-        32: tmp_K = 32'h27b70a85;
-        33: tmp_K = 32'h2e1b2138;
-        34: tmp_K = 32'h4d2c6dfc;
-        35: tmp_K = 32'h53380d13;
-        36: tmp_K = 32'h650a7354;
-        37: tmp_K = 32'h766a0abb;
-        38: tmp_K = 32'h81c2c92e;
-        39: tmp_K = 32'h92722c85;
-        40: tmp_K = 32'ha2bfe8a1;
-        41: tmp_K = 32'ha81a664b;
-        42: tmp_K = 32'hc24b8b70;
-        43: tmp_K = 32'hc76c51a3;
-        44: tmp_K = 32'hd192e819;
-        45: tmp_K = 32'hd6990624;
-        46: tmp_K = 32'hf40e3585;
-        47: tmp_K = 32'h106aa070;
-        48: tmp_K = 32'h19a4c116;
-        49: tmp_K = 32'h1e376c08;
-        50: tmp_K = 32'h2748774c;
-        51: tmp_K = 32'h34b0bcb5;
-        52: tmp_K = 32'h391c0cb3;
-        53: tmp_K = 32'h4ed8aa4a;
-        54: tmp_K = 32'h5b9cca4f;
-        55: tmp_K = 32'h682e6ff3;
-        56: tmp_K = 32'h748f82ee;
-        57: tmp_K = 32'h78a5636f;
-        58: tmp_K = 32'h84c87814;
-        59: tmp_K = 32'h8cc70208;
-        60: tmp_K = 32'h90befffa;
-        61: tmp_K = 32'ha4506ceb;
-        62: tmp_K = 32'hbef9a3f7;
-        63: tmp_K = 32'hc67178f2;
-      endcase // case (round)
-    end // block: round_mux
-endmodule // sha256_k_constants
-
-//======================================================================
-// sha256_k_constants.v
-//======================================================================
diff --git a/Verilog_Code/sha256_w_mem.v b/Verilog_Code/sha256_w_mem.v
deleted file mode 100644
index 06f4d46..0000000
--- a/Verilog_Code/sha256_w_mem.v
+++ /dev/null
@@ -1,272 +0,0 @@
-//======================================================================
-//
-// sha256_w_mem_regs.v
-// -------------------
-// The W memory. This version uses 16 32-bit registers as a sliding
-// window to generate the 64 words.
-//
-//
-// Author: Joachim Strombergson
-// Copyright (c) 2013, Secworks Sweden AB
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or
-// without modification, are permitted provided that the following
-// conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in
-//    the documentation and/or other materials provided with the
-//    distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT OWNER 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.
-//
-//======================================================================
-
-`default_nettype none
-
-module sha256_w_mem(
-                    input wire           clk,
-                    input wire           reset_n,
-
-                    input wire [511 : 0] block,
-
-                    input wire           init,
-                    input wire           next,
-                    output wire [31 : 0] w
-                   );
-
-
-  //----------------------------------------------------------------
-  // Registers including update variables and write enable.
-  //----------------------------------------------------------------
-  reg [31 : 0] w_mem [0 : 15];
-  reg [31 : 0] w_mem00_new;
-  reg [31 : 0] w_mem01_new;
-  reg [31 : 0] w_mem02_new;
-  reg [31 : 0] w_mem03_new;
-  reg [31 : 0] w_mem04_new;
-  reg [31 : 0] w_mem05_new;
-  reg [31 : 0] w_mem06_new;
-  reg [31 : 0] w_mem07_new;
-  reg [31 : 0] w_mem08_new;
-  reg [31 : 0] w_mem09_new;
-  reg [31 : 0] w_mem10_new;
-  reg [31 : 0] w_mem11_new;
-  reg [31 : 0] w_mem12_new;
-  reg [31 : 0] w_mem13_new;
-  reg [31 : 0] w_mem14_new;
-  reg [31 : 0] w_mem15_new;
-  reg          w_mem_we;
-
-  reg [5 : 0] w_ctr_reg;
-  reg [5 : 0] w_ctr_new;
-  reg         w_ctr_we;
-
-
-  //----------------------------------------------------------------
-  // Wires.
-  //----------------------------------------------------------------
-  reg [31 : 0] w_tmp;
-  reg [31 : 0] w_new;
-
-
-  //----------------------------------------------------------------
-  // Concurrent connectivity for ports etc.
-  //----------------------------------------------------------------
-  assign w = w_tmp;
-
-
-  //----------------------------------------------------------------
-  // reg_update
-  // Update functionality for all registers in the core.
-  // All registers are positive edge triggered with synchronous
-  // active low reset. All registers have write enable.
-  //----------------------------------------------------------------
-  always @ (posedge clk or negedge reset_n)
-    begin : reg_update
-      integer i;
-
-      if (!reset_n)
-        begin
-          for (i = 0 ; i < 16 ; i = i + 1)
-            w_mem[i] <= 32'h0;
-
-          w_ctr_reg <= 6'h0;
-        end
-      else
-        begin
-          if (w_mem_we)
-            begin
-              w_mem[00] <= w_mem00_new;
-              w_mem[01] <= w_mem01_new;
-              w_mem[02] <= w_mem02_new;
-              w_mem[03] <= w_mem03_new;
-              w_mem[04] <= w_mem04_new;
-              w_mem[05] <= w_mem05_new;
-              w_mem[06] <= w_mem06_new;
-              w_mem[07] <= w_mem07_new;
-              w_mem[08] <= w_mem08_new;
-              w_mem[09] <= w_mem09_new;
-              w_mem[10] <= w_mem10_new;
-              w_mem[11] <= w_mem11_new;
-              w_mem[12] <= w_mem12_new;
-              w_mem[13] <= w_mem13_new;
-              w_mem[14] <= w_mem14_new;
-              w_mem[15] <= w_mem15_new;
-            end
-
-          if (w_ctr_we)
-            w_ctr_reg <= w_ctr_new;
-        end
-    end // reg_update
-
-
-  //----------------------------------------------------------------
-  // select_w
-  //
-  // Mux for the external read operation. This is where we exract
-  // the W variable.
-  //----------------------------------------------------------------
-  always @*
-    begin : select_w
-      if (w_ctr_reg < 16)
-        w_tmp = w_mem[w_ctr_reg[3 : 0]];
-      else
-        w_tmp = w_new;
-    end // select_w
-
-
-  //----------------------------------------------------------------
-  // w_new_logic
-  //
-  // Logic that calculates the next value to be inserted into
-  // the sliding window of the memory.
-  //----------------------------------------------------------------
-  always @*
-    begin : w_mem_update_logic
-      reg [31 : 0] w_0;
-      reg [31 : 0] w_1;
-      reg [31 : 0] w_9;
-      reg [31 : 0] w_14;
-      reg [31 : 0] d0;
-      reg [31 : 0] d1;
-
-      w_mem00_new = 32'h0;
-      w_mem01_new = 32'h0;
-      w_mem02_new = 32'h0;
-      w_mem03_new = 32'h0;
-      w_mem04_new = 32'h0;
-      w_mem05_new = 32'h0;
-      w_mem06_new = 32'h0;
-      w_mem07_new = 32'h0;
-      w_mem08_new = 32'h0;
-      w_mem09_new = 32'h0;
-      w_mem10_new = 32'h0;
-      w_mem11_new = 32'h0;
-      w_mem12_new = 32'h0;
-      w_mem13_new = 32'h0;
-      w_mem14_new = 32'h0;
-      w_mem15_new = 32'h0;
-      w_mem_we    = 0;
-
-      w_0  = w_mem[0];
-      w_1  = w_mem[1];
-      w_9  = w_mem[9];
-      w_14 = w_mem[14];
-
-      d0 = {w_1[6  : 0], w_1[31 :  7]} ^
-           {w_1[17 : 0], w_1[31 : 18]} ^
-           {3'b000, w_1[31 : 3]};
-
-      d1 = {w_14[16 : 0], w_14[31 : 17]} ^
-           {w_14[18 : 0], w_14[31 : 19]} ^
-           {10'b0000000000, w_14[31 : 10]};
-
-      w_new = d1 + w_9 + d0 + w_0;
-
-      if (init)
-        begin
-          w_mem00_new = block[511 : 480];
-          w_mem01_new = block[479 : 448];
-          w_mem02_new = block[447 : 416];
-          w_mem03_new = block[415 : 384];
-          w_mem04_new = block[383 : 352];
-          w_mem05_new = block[351 : 320];
-          w_mem06_new = block[319 : 288];
-          w_mem07_new = block[287 : 256];
-          w_mem08_new = block[255 : 224];
-          w_mem09_new = block[223 : 192];
-          w_mem10_new = block[191 : 160];
-          w_mem11_new = block[159 : 128];
-          w_mem12_new = block[127 :  96];
-          w_mem13_new = block[95  :  64];
-          w_mem14_new = block[63  :  32];
-          w_mem15_new = block[31  :   0];
-          w_mem_we    = 1;
-        end
-
-      if (next && (w_ctr_reg > 15))
-        begin
-          w_mem00_new = w_mem[01];
-          w_mem01_new = w_mem[02];
-          w_mem02_new = w_mem[03];
-          w_mem03_new = w_mem[04];
-          w_mem04_new = w_mem[05];
-          w_mem05_new = w_mem[06];
-          w_mem06_new = w_mem[07];
-          w_mem07_new = w_mem[08];
-          w_mem08_new = w_mem[09];
-          w_mem09_new = w_mem[10];
-          w_mem10_new = w_mem[11];
-          w_mem11_new = w_mem[12];
-          w_mem12_new = w_mem[13];
-          w_mem13_new = w_mem[14];
-          w_mem14_new = w_mem[15];
-          w_mem15_new = w_new;
-          w_mem_we    = 1;
-        end
-    end // w_mem_update_logic
-
-
-  //----------------------------------------------------------------
-  // w_ctr
-  // W schedule adress counter. Counts from 0x10 to 0x3f and
-  // is used to expand the block into words.
-  //----------------------------------------------------------------
-  always @*
-    begin : w_ctr
-      w_ctr_new = 6'h0;
-      w_ctr_we  = 1'h0;
-
-      if (init)
-        begin
-          w_ctr_new = 6'h0;
-          w_ctr_we  = 1'h1;
-        end
-
-      if (next)
-        begin
-          w_ctr_new = w_ctr_reg + 6'h01;
-          w_ctr_we  = 1'h1;
-        end
-    end // w_ctr
-endmodule // sha256_w_mem
-
-//======================================================================
-// sha256_w_mem.v
-//======================================================================
diff --git a/Verilog_Code/tb_clock_mux.v b/Verilog_Code/tb_clock_mux.v
deleted file mode 100644
index cf112a8..0000000
--- a/Verilog_Code/tb_clock_mux.v
+++ /dev/null
@@ -1,142 +0,0 @@
-//

-// Switch between two clock sources testbench.

-//

-

-// 

-// Design by G.J. van Loo, FenLogic Ltd, 15-January-2017.

-// 

-// This program is free software. It comes without any guarantees or

-// warranty to the extent permitted by applicable law. Although the

-// author has attempted to find and correct any bugs in this free software

-// program, the author is not responsible for any damage or losses of any

-// kind caused by the use or misuse of the program. You can redistribute

-// the program and or modify it in any form without obligations, but the

-// author would appreciated if the credits stays in.

-// 

-module clock_mux_test;

-

-// For specify to work CLK1PERIOD must be <= CLK2PERIOD !!

-localparam CLK1PERIOD = 8,

-           CLK2PERIOD = 10;

-

-reg    clk1;      // Clock 1

-reg    clk2;      // Clock 2

-reg    reset_n;   // System reset

-reg    sel_clk2;  // Select clock2 when high

-wire   clk1or2;   // Selected clock

-

-integer l,r1,r2;

-

-initial

-begin

-   sel_clk2 = 1'b0;

-   reset_n  = 1'b0;

-   #50;

-   reset_n  = 1'b1;

-   #250;

-   sel_clk2 = 1'b1;

-   #250;

-   sel_clk2 = 1'b0;

-   #1000;

-

-   // Test reset release with sel2 high

-   reset_n  = 1'b0;

-   #50;

-   sel_clk2 = 1'b1;

-   #50;

-   reset_n  = 1'b1;

-   #250;

-   // Test reset release and sel2 high at the same time

-   reset_n  = 1'b0;

-   #50;

-   sel_clk2 = 1'b1;

-   reset_n  = 1'b1;

-   #250;

-   

-   #1000;

-   

-      

-   //

-   // Test clock not present

-   //

-   force clk2 = 1'b0;

-   #250;

-   // switch to not running clk2

-   sel_clk2 = 1'b1;

-   #250;

-   // switch back to clk1 

-   sel_clk2 = 1'b0;

-   #250;

-   // switch to not running clk2

-   sel_clk2 = 1'b1;

-   #250;

-   // now clock2 comes on again

-   // whilst it is selected 

-   release clk2;

-   #250;

-   // switch back to clk1 

-   sel_clk2 = 1'b0;

-   #250;

-      

-   // Switch often but never faster then 2xslowest input clock period

-   for (l=0; l<10000; l=l+1)

-   begin

-      r1 = (($random>>3)&32'h1F)+2*CLK2PERIOD;

-      r2 = (($random>>4)&32'h1F)+2*CLK2PERIOD;

-      sel_clk2 = 1'b1;

-      #r1;

-      sel_clk2 = 1'b0;

-      #r2;

-   end

-   #1000;

-   

-   // Really nasty and illegal clock switching.

-   // Causes low period violations.

-	// This gives more confidence that the testbench seems to work.

-   $display("@%0t Illegal 'sel_clk2' pattern hereafter",$time);

-   $display("      gives rise to low period violations.");

-   $display("      Ignore all warnings from here.");   

-   for (l=0; l<500; l=l+1)

-   begin

-      r1 = ($random>>3)&32'h1F+CLK2PERIOD;

-      r2 = ($random>>4)&32'h1F+CLK2PERIOD;

-      sel_clk2 = 1'b1;

-      #r1;

-      sel_clk2 = 1'b0;

-      #r2;

-   end

-   $stop;

-end

-

-initial

-begin

-   clk1 = 1'b0;

-   forever

-      #(CLK1PERIOD/2) clk1 <= ~clk1;

-end

-

-initial

-begin

-   clk2 = 1'b0;

-   forever

-      #(CLK2PERIOD/2) clk2 <= ~clk2;

-end

-

-clock_mux clock_mux0 

-   (

-   .clk1    (clk1),     // Clock 1

-   .clk2    (clk2),     // Clock 2

-   .reset_n (reset_n),  // System reset

-   .sel_clk2(sel_clk2), // Select clock2 when high

-   .clk1or2 (clk1or2)   // Selected clock

-   );

-

-// Now check if time high or low is ever smaller than CLK1PERIOD/2

-// (This is why CLK1PERIOD <= CLK2PERIOD)

-specify

-$width(posedge clk1or2, CLK1PERIOD/2);

-$width(negedge clk1or2, CLK1PERIOD/2);

-endspecify

-

-endmodule // clock_mux_test

-

diff --git a/Verilog_Code/tb_sha256.v b/Verilog_Code/tb_sha256.v
deleted file mode 100644
index 3796e73..0000000
--- a/Verilog_Code/tb_sha256.v
+++ /dev/null
@@ -1,718 +0,0 @@
-//======================================================================

-//

-// tb_sha256.v

-// -----------

-// Testbench for the SHA-256 top level wrapper.

-//

-//

-// Author: Joachim Strombergson

-// Copyright (c) 2013, Secworks Sweden AB

-// All rights reserved.

-//

-// Redistribution and use in source and binary forms, with or

-// without modification, are permitted provided that the following

-// conditions are met:

-//

-// 1. Redistributions of source code must retain the above copyright

-//    notice, this list of conditions and the following disclaimer.

-//

-// 2. Redistributions in binary form must reproduce the above copyright

-//    notice, this list of conditions and the following disclaimer in

-//    the documentation and/or other materials provided with the

-//    distribution.

-//

-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS

-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE

-// COPYRIGHT OWNER 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.

-//

-//======================================================================

-

-`default_nettype none

-

-module tb_sha256();

-

-  //----------------------------------------------------------------

-  // Internal constant and parameter definitions.

-  //----------------------------------------------------------------

-  parameter DEBUG = 0;

-

-  parameter CLK_HALF_PERIOD = 2;

-  parameter CLK_PERIOD = 2 * CLK_HALF_PERIOD;

-

-  // The address map.

-  parameter ADDR_NAME0       = 8'h00;

-  parameter ADDR_NAME1       = 8'h01;

-  parameter ADDR_VERSION     = 8'h02;

-

-  parameter ADDR_CTRL        = 8'h08;

-  parameter CTRL_INIT_VALUE  = 8'h01;

-  parameter CTRL_NEXT_VALUE  = 8'h02;

-  parameter CTRL_MODE_VALUE  = 8'h04;

-

-  parameter ADDR_STATUS      = 8'h09;

-  parameter STATUS_READY_BIT = 0;

-  parameter STATUS_VALID_BIT = 1;

-

-  parameter ADDR_BLOCK0    = 8'h10;

-  parameter ADDR_BLOCK1    = 8'h11;

-  parameter ADDR_BLOCK2    = 8'h12;

-  parameter ADDR_BLOCK3    = 8'h13;

-  parameter ADDR_BLOCK4    = 8'h14;

-  parameter ADDR_BLOCK5    = 8'h15;

-  parameter ADDR_BLOCK6    = 8'h16;

-  parameter ADDR_BLOCK7    = 8'h17;

-  parameter ADDR_BLOCK8    = 8'h18;

-  parameter ADDR_BLOCK9    = 8'h19;

-  parameter ADDR_BLOCK10   = 8'h1a;

-  parameter ADDR_BLOCK11   = 8'h1b;

-  parameter ADDR_BLOCK12   = 8'h1c;

-  parameter ADDR_BLOCK13   = 8'h1d;

-  parameter ADDR_BLOCK14   = 8'h1e;

-  parameter ADDR_BLOCK15   = 8'h1f;

-

-  parameter ADDR_DIGEST0   = 8'h20;

-  parameter ADDR_DIGEST1   = 8'h21;

-  parameter ADDR_DIGEST2   = 8'h22;

-  parameter ADDR_DIGEST3   = 8'h23;

-  parameter ADDR_DIGEST4   = 8'h24;

-  parameter ADDR_DIGEST5   = 8'h25;

-  parameter ADDR_DIGEST6   = 8'h26;

-  parameter ADDR_DIGEST7   = 8'h27;

-

-  parameter SHA224_MODE    = 0;

-  parameter SHA256_MODE    = 1;

-

-

-  //----------------------------------------------------------------

-  // Register and Wire declarations.

-  //----------------------------------------------------------------

-  reg [31 : 0] cycle_ctr;

-  reg [31 : 0] error_ctr;

-  reg [31 : 0] tc_ctr;

-

-  reg           tb_clk;

-  reg           tb_reset_n;

-  reg           tb_cs;

-  reg           tb_we;

-  reg [7 : 0]   tb_address;

-  reg [31 : 0]  tb_write_data;

-  wire [31 : 0] tb_read_data;

-  wire          tb_error;

-

-  reg [31 : 0]  read_data;

-  reg [255 : 0] digest_data;

-

-

-  //----------------------------------------------------------------

-  // Device Under Test.

-  //----------------------------------------------------------------

-  sha256 dut(

-             .clk(tb_clk),

-             .reset_n(tb_reset_n),

-

-             .cs(tb_cs),

-             .we(tb_we),

-

-

-             .address(tb_address),

-             .write_data(tb_write_data),

-             .read_data(tb_read_data),

-             .error(tb_error)

-            );

-

-

-  //----------------------------------------------------------------

-  // clk_gen

-  //

-  // Clock generator process.

-  //----------------------------------------------------------------

-  always

-    begin : clk_gen

-      #CLK_HALF_PERIOD tb_clk = !tb_clk;

-    end // clk_gen

-

-

-  //----------------------------------------------------------------

-  // sys_monitor

-  //

-  // Generates a cycle counter and displays information about

-  // the dut as needed.

-  //----------------------------------------------------------------

-  always

-    begin : sys_monitor

-      #(2 * CLK_HALF_PERIOD);

-      cycle_ctr = cycle_ctr + 1;

-    end

-

-

-  //----------------------------------------------------------------

-  // dump_dut_state()

-  //

-  // Dump the state of the dump when needed.

-  //----------------------------------------------------------------

-  task dump_dut_state;

-    begin

-      $display("State of DUT");

-      $display("------------");

-      $display("Inputs and outputs:");

-      $display("cs = 0x%01x, we = 0x%01x",

-               dut.cs, dut.we);

-      $display("address = 0x%02x", dut.address);

-      $display("write_data = 0x%08x, read_data = 0x%08x",

-               dut.write_data, dut.read_data);

-      $display("tmp_read_data = 0x%08x", dut.tmp_read_data);

-      $display("");

-

-      $display("Control and status:");

-      $display("ctrl = 0x%02x, status = 0x%02x",

-               {dut.next_reg, dut.init_reg},

-               {dut.digest_valid_reg, dut.ready_reg});

-      $display("");

-

-      $display("Message block:");

-      $display("block0  = 0x%08x, block1  = 0x%08x, block2  = 0x%08x,  block3  = 0x%08x",

-               dut.block_reg[00], dut.block_reg[01], dut.block_reg[02], dut.block_reg[03]);

-//      $display("block4  = 0x%08x, block5  = 0x%08x, block6  = 0x%08x,  block7  = 0x%08x",

-//               dut.block_reg[04], dut.block_reg[05], dut.block_reg[06], dut.block_reg[07]);

-

-      $display("block8  = 0x%08x, block9  = 0x%08x, block10 = 0x%08x,  block11 = 0x%08x",

-               dut.block_reg[08], dut.block_reg[09], dut.block_reg[10], dut.block_reg[11]);

-      $display("block12 = 0x%08x, block13 = 0x%08x, block14 = 0x%08x,  block15 = 0x%08x",

-               dut.block_reg[12], dut.block_reg[13], dut.block_reg[14], dut.block_reg[15]);

-      $display("");

-

-      $display("Digest:");

-      $display("digest = 0x%064x", dut.digest_reg);

-      $display("");

-

-    end

-  endtask // dump_dut_state

-

-

-  //----------------------------------------------------------------

-  // reset_dut()

-  //

-  // Toggles reset to force the DUT into a well defined state.

-  //----------------------------------------------------------------

-  task reset_dut;

-    begin

-      $display("*** Toggle reset.");

-      tb_reset_n = 0;

-      #(4 * CLK_HALF_PERIOD);

-      tb_reset_n = 1;

-    end

-  endtask // reset_dut

-

-

-  //----------------------------------------------------------------

-  // init_sim()

-  //

-  // Initialize all counters and testbed functionality as well

-  // as setting the DUT inputs to defined values.

-  //----------------------------------------------------------------

-  task init_sim;

-    begin

-      cycle_ctr = 32'h0;

-      error_ctr = 32'h0;

-      tc_ctr = 32'h0;

-

-      tb_clk = 0;

-      tb_reset_n = 0;

-      tb_cs = 0;

-      tb_we = 0;

-      tb_address = 6'h0;

-      tb_write_data = 32'h0;

-    end

-  endtask // init_dut

-

-

-  //----------------------------------------------------------------

-  // display_test_result()

-  //

-  // Display the accumulated test results.

-  //----------------------------------------------------------------

-  task display_test_result;

-    begin

-      if (error_ctr == 0)

-        begin

-          $display("*** All %02d test cases completed successfully.", tc_ctr);

-        end

-      else

-        begin

-          $display("*** %02d test cases completed.", tc_ctr);

-          $display("*** %02d errors detected during testing.", error_ctr);

-        end

-    end

-  endtask // display_test_result

-

-

-  //----------------------------------------------------------------

-  // wait_ready()

-  //

-  // Wait for the ready flag in the dut to be set.

-  // (Actually we wait for either ready or valid to be set.)

-  //

-  // Note: It is the callers responsibility to call the function

-  // when the dut is actively processing and will in fact at some

-  // point set the flag.

-  //----------------------------------------------------------------

-  task wait_ready;

-    begin

-      read_data = 0;

-

-      while (read_data == 0)

-        begin

-          read_word(ADDR_STATUS);

-        end

-    end

-  endtask // wait_ready

-

-

-  //----------------------------------------------------------------

-  // write_word()

-  //

-  // Write the given word to the DUT using the DUT interface.

-  //----------------------------------------------------------------

-  task write_word(input [7 : 0]  address,

-                  input [31 : 0] word);

-    begin

-      if (DEBUG)

-        begin

-          $display("*** Writing 0x%08x to 0x%02x.", word, address);

-          $display("");

-        end

-

-      tb_address = address;

-      tb_write_data = word;

-      tb_cs = 1;

-      tb_we = 1;

-      #(CLK_PERIOD);

-      tb_cs = 0;

-      tb_we = 0;

-    end

-  endtask // write_word

-

-

-  //----------------------------------------------------------------

-  // write_block()

-  //

-  // Write the given block to the dut.

-  //----------------------------------------------------------------

-  task write_block(input [511 : 0] block);

-    begin

-      write_word(ADDR_BLOCK0,  block[511 : 480]);

-      write_word(ADDR_BLOCK1,  block[479 : 448]);

-      write_word(ADDR_BLOCK2,  block[447 : 416]);

-      write_word(ADDR_BLOCK3,  block[415 : 384]);

-      write_word(ADDR_BLOCK4,  block[383 : 352]);

-      write_word(ADDR_BLOCK5,  block[351 : 320]);

-      write_word(ADDR_BLOCK6,  block[319 : 288]);

-      write_word(ADDR_BLOCK7,  block[287 : 256]);

-      write_word(ADDR_BLOCK8,  block[255 : 224]);

-      write_word(ADDR_BLOCK9,  block[223 : 192]);

-      write_word(ADDR_BLOCK10, block[191 : 160]);

-      write_word(ADDR_BLOCK11, block[159 : 128]);

-      write_word(ADDR_BLOCK12, block[127 :  96]);

-      write_word(ADDR_BLOCK13, block[95  :  64]);

-      write_word(ADDR_BLOCK14, block[63  :  32]);

-      write_word(ADDR_BLOCK15, block[31  :   0]);

-    end

-  endtask // write_block

-

-

-  //----------------------------------------------------------------

-  // read_word()

-  //

-  // Read a data word from the given address in the DUT.

-  // the word read will be available in the global variable

-  // read_data.

-  //----------------------------------------------------------------

-  task read_word(input [7 : 0]  address);

-    begin

-      tb_address = address;

-      tb_cs = 1;

-      tb_we = 0;

-      #(CLK_PERIOD);

-      read_data = tb_read_data;

-      tb_cs = 0;

-

-      if (DEBUG)

-        begin

-          $display("*** Reading 0x%08x from 0x%02x.", read_data, address);

-          $display("");

-        end

-    end

-  endtask // read_word

-

-

-  //----------------------------------------------------------------

-  // check_name_version()

-  //

-  // Read the name and version from the DUT.

-  //----------------------------------------------------------------

-  task check_name_version;

-    reg [31 : 0] name0;

-    reg [31 : 0] name1;

-    reg [31 : 0] version;

-    begin

-

-      read_word(ADDR_NAME0);

-      name0 = read_data;

-      read_word(ADDR_NAME1);

-      name1 = read_data;

-      read_word(ADDR_VERSION);

-      version = read_data;

-

-      $display("DUT name: %c%c%c%c%c%c%c%c",

-               name0[31 : 24], name0[23 : 16], name0[15 : 8], name0[7 : 0],

-               name1[31 : 24], name1[23 : 16], name1[15 : 8], name1[7 : 0]);

-      $display("DUT version: %c%c%c%c",

-               version[31 : 24], version[23 : 16], version[15 : 8], version[7 : 0]);

-    end

-  endtask // check_name_version

-

-

-  //----------------------------------------------------------------

-  // read_digest()

-  //

-  // Read the digest in the dut. The resulting digest will be

-  // available in the global variable digest_data.

-  //----------------------------------------------------------------

-  task read_digest;

-    begin

-      read_word(ADDR_DIGEST0);

-      digest_data[255 : 224] = read_data;

-      read_word(ADDR_DIGEST1);

-      digest_data[223 : 192] = read_data;

-      read_word(ADDR_DIGEST2);

-      digest_data[191 : 160] = read_data;

-      read_word(ADDR_DIGEST3);

-      digest_data[159 : 128] = read_data;

-      read_word(ADDR_DIGEST4);

-      digest_data[127 :  96] = read_data;

-      read_word(ADDR_DIGEST5);

-      digest_data[95  :  64] = read_data;

-      read_word(ADDR_DIGEST6);

-      digest_data[63  :  32] = read_data;

-      read_word(ADDR_DIGEST7);

-      digest_data[31  :   0] = read_data;

-    end

-  endtask // read_digest

-

-

-  //----------------------------------------------------------------

-  // single_block_test()

-  //

-  //

-  // Perform test of a single block digest.

-  //----------------------------------------------------------------

-  task single_block_test(input           mode,

-                         input [511 : 0] block,

-                         input [255 : 0] expected);

-    begin

-      $display("*** TC%01d - Single block test started.", tc_ctr);

-

-      write_block(block);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_INIT_VALUE);

-

-      #(CLK_PERIOD);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected)

-        begin

-          $display("TC%01d: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR.", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-      $display("*** TC%01d - Single block test done.", tc_ctr);

-      tc_ctr = tc_ctr + 1;

-    end

-  endtask // single_block_test

-

-

-  //----------------------------------------------------------------

-  // double_block_test()

-  //

-  //

-  // Perform test of a double block digest. Note that we check

-  // the digests for both the first and final block.

-  //----------------------------------------------------------------

-  task double_block_test(input           mode,

-                         input [511 : 0] block0,

-                         input [255 : 0] expected0,

-                         input [511 : 0] block1,

-                         input [255 : 0] expected1

-                        );

-    begin

-      $display("*** TC%01d - Double block test started.", tc_ctr);

-

-      // First block

-      write_block(block0);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_INIT_VALUE);

-

-      #(CLK_PERIOD);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected0)

-        begin

-          $display("TC%01d first block: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR in first digest", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected0);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-

-      // Final block

-      write_block(block1);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_NEXT_VALUE);

-

-      #(CLK_PERIOD);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected1)

-        begin

-          $display("TC%01d final block: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR in final digest", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected1);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-

-      $display("*** TC%01d - Double block test done.", tc_ctr);

-      tc_ctr = tc_ctr + 1;

-    end

-  endtask // double_block_test

-

-

-  //----------------------------------------------------------------

-  // sha224_tests()

-  //

-  // Run test cases for sha224.

-  // Test cases taken from:

-  // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA224.pdf

-  //----------------------------------------------------------------

-  task sha224_tests;

-    begin : sha224_tests_block

-      reg [511 : 0] tc0;

-      reg [255 : 0] res0;

-

-      reg [511 : 0] tc1_0;

-      reg [255 : 0] res1_0;

-      reg [511 : 0] tc1_1;

-      reg [255 : 0] res1_1;

-

-      $display("*** Testcases for sha224 functionality started.");

-

-      tc0 = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;

-

-      res0 = 256'h23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA700000000;

-      single_block_test(SHA224_MODE, tc0, res0);

-

-      tc1_0 = 512'h6162636462636465636465666465666765666768666768696768696A68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F70718000000000000000;

-      res1_0 = 256'h8250e65dbcf62f8466659c3333e5e91a10c8b7b0953927691f1419c200000000;

-      tc1_1 = 512'h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C0;

-      res1_1 = 256'h75388b16512776cc5dba5da1fd890150b0c6455cb4f58b195252252500000000;

-      double_block_test(SHA224_MODE, tc1_0, res1_0, tc1_1, res1_1);

-

-      $display("*** Testcases for sha224 functionality completed.");

-    end

-  endtask // sha224_tests

-

-

-  //----------------------------------------------------------------

-  // sha256_tests()

-  //

-  // Run test cases for sha256.

-  // Test cases taken from:

-  // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA256.pdf

-  //----------------------------------------------------------------

-  task sha256_tests;

-    begin : sha256_tests_block

-      reg [511 : 0] tc0;

-      reg [255 : 0] res0;

-

-      reg [511 : 0] tc1_0;

-      reg [255 : 0] res1_0;

-      reg [511 : 0] tc1_1;

-      reg [255 : 0] res1_1;

-

-      $display("*** Testcases for sha256 functionality started.");

-

-      tc0 = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;

-      res0 = 256'hBA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD;

-      single_block_test(SHA256_MODE, tc0, res0);

-

-      tc1_0 = 512'h6162636462636465636465666465666765666768666768696768696A68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F70718000000000000000;

-      res1_0 = 256'h85E655D6417A17953363376A624CDE5C76E09589CAC5F811CC4B32C1F20E533A;

-      tc1_1 = 512'h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C0;

-      res1_1 = 256'h248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1;

-      double_block_test(SHA256_MODE, tc1_0, res1_0, tc1_1, res1_1);

-

-      $display("*** Testcases for sha256 functionality completed.");

-    end

-  endtask // sha256_tests

-

-

-

-  //----------------------------------------------------------------

-  // issue_test()

-  //----------------------------------------------------------------

-  task issue_test;

-    reg [511 : 0] block0;

-    reg [511 : 0] block1;

-    reg [511 : 0] block2;

-    reg [511 : 0] block3;

-    reg [511 : 0] block4;

-    reg [511 : 0] block5;

-    reg [511 : 0] block6;

-    reg [511 : 0] block7;

-    reg [511 : 0] block8;

-    reg [255 : 0] expected;

-    begin : issue_test

-      block0 = 512'h6b900001_496e2074_68652061_72656120_6f662049_6f542028_496e7465_726e6574_206f6620_5468696e_6773292c_206d6f72_6520616e_64206d6f_7265626f_6f6d2c20;

-      block1 = 512'h69742068_61732062_65656e20_6120756e_69766572_73616c20_636f6e73_656e7375_73207468_61742064_61746120_69732074_69732061_206e6577_20746563_686e6f6c;

-      block2 = 512'h6f677920_74686174_20696e74_65677261_74657320_64656365_6e747261_6c697a61_74696f6e_2c496e20_74686520_61726561_206f6620_496f5420_28496e74_65726e65;

-      block3 = 512'h74206f66_20546869_6e677329_2c206d6f_72652061_6e64206d_6f726562_6f6f6d2c_20697420_68617320_6265656e_20612075_6e697665_7273616c_20636f6e_73656e73;

-      block4 = 512'h75732074_68617420_64617461_20697320_74697320_61206e65_77207465_63686e6f_6c6f6779_20746861_7420696e_74656772_61746573_20646563_656e7472_616c697a;

-      block5 = 512'h6174696f_6e2c496e_20746865_20617265_61206f66_20496f54_2028496e_7465726e_6574206f_66205468_696e6773_292c206d_6f726520_616e6420_6d6f7265_626f6f6d;

-      block6 = 512'h2c206974_20686173_20626565_6e206120_756e6976_65727361_6c20636f_6e73656e_73757320_74686174_20646174_61206973_20746973_2061206e_65772074_6563686e;

-      block7 = 512'h6f6c6f67_79207468_61742069_6e746567_72617465_73206465_63656e74_72616c69_7a617469_6f6e2c49_6e207468_65206172_6561206f_6620496f_54202849_6e746572;

-      block8 = 512'h6e657420_6f662054_68696e67_73292c20_6d6f7265_20616e64_206d6f72_65800000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_000010e8;

-

-      expected = 256'h7758a30bbdfc9cd92b284b05e9be9ca3d269d3d149e7e82ab4a9ed5e81fbcf9d;

-

-      $display("Running test for 9 block issue.");

-      tc_ctr = tc_ctr + 1;

-      write_block(block0);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block1);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block2);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block3);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block4);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block5);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block6);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block7);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block8);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      read_digest();

-      if (digest_data == expected)

-        begin

-          $display("Digest ok.");

-        end

-      else

-        begin

-          $display("ERROR in digest");

-          $display("Expected: 0x%064x", expected);

-          $display("Got:      0x%064x", digest_data);

-          error_ctr = error_ctr + 1;

-        end

-    end

-  endtask // issue_test

-

-

-  //----------------------------------------------------------------

-  // The main test functionality.

-  //----------------------------------------------------------------

-  initial

-    begin : main

-      $display("   -- Testbench for sha256 started --");

-

-      init_sim();

-      reset_dut();

-

-      check_name_version();

-      sha224_tests();

-      sha256_tests();

-      issue_test();

-

-      display_test_result();

-

-      $display("   -- Testbench for sha256 done. --");

-      $finish;

-    end // main

-endmodule // tb_sha256

-

-//======================================================================

-// EOF tb_sha256.v

-//======================================================================

diff --git a/Verilog_Code/tb_sha256.v.bak b/Verilog_Code/tb_sha256.v.bak
deleted file mode 100644
index 79765b3..0000000
--- a/Verilog_Code/tb_sha256.v.bak
+++ /dev/null
@@ -1,718 +0,0 @@
-//======================================================================

-//

-// tb_sha256.v

-// -----------

-// Testbench for the SHA-256 top level wrapper.

-//

-//

-// Author: Joachim Strombergson

-// Copyright (c) 2013, Secworks Sweden AB

-// All rights reserved.

-//

-// Redistribution and use in source and binary forms, with or

-// without modification, are permitted provided that the following

-// conditions are met:

-//

-// 1. Redistributions of source code must retain the above copyright

-//    notice, this list of conditions and the following disclaimer.

-//

-// 2. Redistributions in binary form must reproduce the above copyright

-//    notice, this list of conditions and the following disclaimer in

-//    the documentation and/or other materials provided with the

-//    distribution.

-//

-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS

-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE

-// COPYRIGHT OWNER 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.

-//

-//======================================================================

-

-`default_nettype none

-

-module tb_sha256();

-

-  //----------------------------------------------------------------

-  // Internal constant and parameter definitions.

-  //----------------------------------------------------------------

-  parameter DEBUG = 0;

-

-  parameter CLK_HALF_PERIOD = 2;

-  parameter CLK_PERIOD = 2 * CLK_HALF_PERIOD;

-

-  // The address map.

-  parameter ADDR_NAME0       = 8'h00;

-  parameter ADDR_NAME1       = 8'h01;

-  parameter ADDR_VERSION     = 8'h02;

-

-  parameter ADDR_CTRL        = 8'h08;

-  parameter CTRL_INIT_VALUE  = 8'h01;

-  parameter CTRL_NEXT_VALUE  = 8'h02;

-  parameter CTRL_MODE_VALUE  = 8'h04;

-

-  parameter ADDR_STATUS      = 8'h09;

-  parameter STATUS_READY_BIT = 0;

-  parameter STATUS_VALID_BIT = 1;

-

-  parameter ADDR_BLOCK0    = 8'h10;

-  parameter ADDR_BLOCK1    = 8'h11;

-  parameter ADDR_BLOCK2    = 8'h12;

-  parameter ADDR_BLOCK3    = 8'h13;

-  parameter ADDR_BLOCK4    = 8'h14;

-  parameter ADDR_BLOCK5    = 8'h15;

-  parameter ADDR_BLOCK6    = 8'h16;

-  parameter ADDR_BLOCK7    = 8'h17;

-  parameter ADDR_BLOCK8    = 8'h18;

-  parameter ADDR_BLOCK9    = 8'h19;

-  parameter ADDR_BLOCK10   = 8'h1a;

-  parameter ADDR_BLOCK11   = 8'h1b;

-  parameter ADDR_BLOCK12   = 8'h1c;

-  parameter ADDR_BLOCK13   = 8'h1d;

-  parameter ADDR_BLOCK14   = 8'h1e;

-  parameter ADDR_BLOCK15   = 8'h1f;

-

-  parameter ADDR_DIGEST0   = 8'h20;

-  parameter ADDR_DIGEST1   = 8'h21;

-  parameter ADDR_DIGEST2   = 8'h22;

-  parameter ADDR_DIGEST3   = 8'h23;

-  parameter ADDR_DIGEST4   = 8'h24;

-  parameter ADDR_DIGEST5   = 8'h25;

-  parameter ADDR_DIGEST6   = 8'h26;

-  parameter ADDR_DIGEST7   = 8'h27;

-

-  parameter SHA224_MODE    = 0;

-  parameter SHA256_MODE    = 1;

-

-

-  //----------------------------------------------------------------

-  // Register and Wire declarations.

-  //----------------------------------------------------------------

-  reg [31 : 0] cycle_ctr;

-  reg [31 : 0] error_ctr;

-  reg [31 : 0] tc_ctr;

-

-  reg           tb_clk;

-  reg           tb_reset_n;

-  reg           tb_cs;

-  reg           tb_we;

-  reg [7 : 0]   tb_address;

-  reg [31 : 0]  tb_write_data;

-  wire [31 : 0] tb_read_data;

-  wire          tb_error;

-

-  reg [31 : 0]  read_data;

-  reg [255 : 0] digest_data;

-

-

-  //----------------------------------------------------------------

-  // Device Under Test.

-  //----------------------------------------------------------------

-  sha256 dut(

-             .clk(tb_clk),

-             .reset_n(tb_reset_n),

-

-             .cs(tb_cs),

-             .we(tb_we),

-

-

-             .address(tb_address),

-             .write_data(tb_write_data),

-             .read_data(tb_read_data),

-             .error(tb_error)

-            );

-

-

-  //----------------------------------------------------------------

-  // clk_gen

-  //

-  // Clock generator process.

-  //----------------------------------------------------------------

-  always

-    begin : clk_gen

-      #CLK_HALF_PERIOD tb_clk = !tb_clk;

-    end // clk_gen

-

-

-  //----------------------------------------------------------------

-  // sys_monitor

-  //

-  // Generates a cycle counter and displays information about

-  // the dut as needed.

-  //----------------------------------------------------------------

-  always

-    begin : sys_monitor

-      #(2 * CLK_HALF_PERIOD);

-      cycle_ctr = cycle_ctr + 1;

-    end

-

-

-  //----------------------------------------------------------------

-  // dump_dut_state()

-  //

-  // Dump the state of the dump when needed.

-  //----------------------------------------------------------------

-  task dump_dut_state;

-    begin

-      $display("State of DUT");

-      $display("------------");

-      $display("Inputs and outputs:");

-      $display("cs = 0x%01x, we = 0x%01x",

-               dut.cs, dut.we);

-      $display("address = 0x%02x", dut.address);

-      $display("write_data = 0x%08x, read_data = 0x%08x",

-               dut.write_data, dut.read_data);

-      $display("tmp_read_data = 0x%08x", dut.tmp_read_data);

-      $display("");

-

-      $display("Control and status:");

-      $display("ctrl = 0x%02x, status = 0x%02x",

-               {dut.next_reg, dut.init_reg},

-               {dut.digest_valid_reg, dut.ready_reg});

-      $display("");

-

-      $display("Message block:");

-      $display("block0  = 0x%08x, block1  = 0x%08x, block2  = 0x%08x,  block3  = 0x%08x",

-               dut.block_reg[00], dut.block_reg[01], dut.block_reg[02], dut.block_reg[03]);

-//      $display("block4  = 0x%08x, block5  = 0x%08x, block6  = 0x%08x,  block7  = 0x%08x",

-//               dut.block_reg[04], dut.block_reg[05], dut.block_reg[06], dut.block_reg[07]);

-

-      $display("block8  = 0x%08x, block9  = 0x%08x, block10 = 0x%08x,  block11 = 0x%08x",

-               dut.block_reg[08], dut.block_reg[09], dut.block_reg[10], dut.block_reg[11]);

-      $display("block12 = 0x%08x, block13 = 0x%08x, block14 = 0x%08x,  block15 = 0x%08x",

-               dut.block_reg[12], dut.block_reg[13], dut.block_reg[14], dut.block_reg[15]);

-      $display("");

-

-      $display("Digest:");

-      $display("digest = 0x%064x", dut.digest_reg);

-      $display("");

-

-    end

-  endtask // dump_dut_state

-

-

-  //----------------------------------------------------------------

-  // reset_dut()

-  //

-  // Toggles reset to force the DUT into a well defined state.

-  //----------------------------------------------------------------

-  task reset_dut;

-    begin

-      $display("*** Toggle reset.");

-      tb_reset_n = 0;

-      #(4 * CLK_HALF_PERIOD);

-      tb_reset_n = 1;

-    end

-  endtask // reset_dut

-

-

-  //----------------------------------------------------------------

-  // init_sim()

-  //

-  // Initialize all counters and testbed functionality as well

-  // as setting the DUT inputs to defined values.

-  //----------------------------------------------------------------

-  task init_sim;

-    begin

-      cycle_ctr = 32'h0;

-      error_ctr = 32'h0;

-      tc_ctr = 32'h0;

-

-      tb_clk = 0;

-      tb_reset_n = 0;

-      tb_cs = 0;

-      tb_we = 0;

-      tb_address = 6'h0;

-      tb_write_data = 32'h0;

-    end

-  endtask // init_dut

-

-

-  //----------------------------------------------------------------

-  // display_test_result()

-  //

-  // Display the accumulated test results.

-  //----------------------------------------------------------------

-  task display_test_result;

-    begin

-      if (error_ctr == 0)

-        begin

-          $display("*** All %02d test cases completed successfully.", tc_ctr);

-        end

-      else

-        begin

-          $display("*** %02d test cases completed.", tc_ctr);

-          $display("*** %02d errors detected during testing.", error_ctr);

-        end

-    end

-  endtask // display_test_result

-

-

-  //----------------------------------------------------------------

-  // wait_ready()

-  //

-  // Wait for the ready flag in the dut to be set.

-  // (Actually we wait for either ready or valid to be set.)

-  //

-  // Note: It is the callers responsibility to call the function

-  // when the dut is actively processing and will in fact at some

-  // point set the flag.

-  //----------------------------------------------------------------

-  task wait_ready;

-    begin

-      read_data = 0;

-

-      while (read_data == 0)

-        begin

-          read_word(ADDR_STATUS);

-        end

-    end

-  endtask // wait_ready

-

-

-  //----------------------------------------------------------------

-  // write_word()

-  //

-  // Write the given word to the DUT using the DUT interface.

-  //----------------------------------------------------------------

-  task write_word(input [7 : 0]  address,

-                  input [31 : 0] word);

-    begin

-      if (DEBUG)

-        begin

-          $display("*** Writing 0x%08x to 0x%02x.", word, address);

-          $display("");

-        end

-

-      tb_address = address;

-      tb_write_data = word;

-      tb_cs = 1;

-      tb_we = 1;

-      #(CLK_PERIOD);

-      tb_cs = 0;

-      tb_we = 0;

-    end

-  endtask // write_word

-

-

-  //----------------------------------------------------------------

-  // write_block()

-  //

-  // Write the given block to the dut.

-  //----------------------------------------------------------------

-  task write_block(input [511 : 0] block);

-    begin

-      write_word(ADDR_BLOCK0,  block[511 : 480]);

-      write_word(ADDR_BLOCK1,  block[479 : 448]);

-      write_word(ADDR_BLOCK2,  block[447 : 416]);

-      write_word(ADDR_BLOCK3,  block[415 : 384]);

-      write_word(ADDR_BLOCK4,  block[383 : 352]);

-      write_word(ADDR_BLOCK5,  block[351 : 320]);

-      write_word(ADDR_BLOCK6,  block[319 : 288]);

-      write_word(ADDR_BLOCK7,  block[287 : 256]);

-      write_word(ADDR_BLOCK8,  block[255 : 224]);

-      write_word(ADDR_BLOCK9,  block[223 : 192]);

-      write_word(ADDR_BLOCK10, block[191 : 160]);

-      write_word(ADDR_BLOCK11, block[159 : 128]);

-      write_word(ADDR_BLOCK12, block[127 :  96]);

-      write_word(ADDR_BLOCK13, block[95  :  64]);

-      write_word(ADDR_BLOCK14, block[63  :  32]);

-      write_word(ADDR_BLOCK15, block[31  :   0]);

-    end

-  endtask // write_block

-

-

-  //----------------------------------------------------------------

-  // read_word()

-  //

-  // Read a data word from the given address in the DUT.

-  // the word read will be available in the global variable

-  // read_data.

-  //----------------------------------------------------------------

-  task read_word(input [7 : 0]  address);

-    begin

-      tb_address = address;

-      tb_cs = 1;

-      tb_we = 0;

-      #(CLK_PERIOD);

-      read_data = tb_read_data;

-      tb_cs = 0;

-

-      if (DEBUG)

-        begin

-          $display("*** Reading 0x%08x from 0x%02x.", read_data, address);

-          $display("");

-        end

-    end

-  endtask // read_word

-

-

-  //----------------------------------------------------------------

-  // check_name_version()

-  //

-  // Read the name and version from the DUT.

-  //----------------------------------------------------------------

-  task check_name_version;

-    reg [31 : 0] name0;

-    reg [31 : 0] name1;

-    reg [31 : 0] version;

-    begin

-

-      read_word(ADDR_NAME0);

-      name0 = read_data;

-      read_word(ADDR_NAME1);

-      name1 = read_data;

-      read_word(ADDR_VERSION);

-      version = read_data;

-

-      $display("DUT name: %c%c%c%c%c%c%c%c",

-               name0[31 : 24], name0[23 : 16], name0[15 : 8], name0[7 : 0],

-               name1[31 : 24], name1[23 : 16], name1[15 : 8], name1[7 : 0]);

-      $display("DUT version: %c%c%c%c",

-               version[31 : 24], version[23 : 16], version[15 : 8], version[7 : 0]);

-    end

-  endtask // check_name_version

-

-

-  //----------------------------------------------------------------

-  // read_digest()

-  //

-  // Read the digest in the dut. The resulting digest will be

-  // available in the global variable digest_data.

-  //----------------------------------------------------------------

-  task read_digest;

-    begin

-      read_word(ADDR_DIGEST0);

-      digest_data[255 : 224] = read_data;

-      read_word(ADDR_DIGEST1);

-      digest_data[223 : 192] = read_data;

-      read_word(ADDR_DIGEST2);

-      digest_data[191 : 160] = read_data;

-      read_word(ADDR_DIGEST3);

-      digest_data[159 : 128] = read_data;

-      read_word(ADDR_DIGEST4);

-      digest_data[127 :  96] = read_data;

-      read_word(ADDR_DIGEST5);

-      digest_data[95  :  64] = read_data;

-      read_word(ADDR_DIGEST6);

-      digest_data[63  :  32] = read_data;

-      read_word(ADDR_DIGEST7);

-      digest_data[31  :   0] = read_data;

-    end

-  endtask // read_digest

-

-

-  //----------------------------------------------------------------

-  // single_block_test()

-  //

-  //

-  // Perform test of a single block digest.

-  //----------------------------------------------------------------

-  task single_block_test(input           mode,

-                         input [511 : 0] block,

-                         input [255 : 0] expected);

-    begin

-      $display("*** TC%01d - Single block test started.", tc_ctr);

-

-      write_block(block);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_INIT_VALUE);

-

-      #(CLK_PERIOD);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected)

-        begin

-          $display("TC%01d: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR.", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-      $display("*** TC%01d - Single block test done.", tc_ctr);

-      tc_ctr = tc_ctr + 1;

-    end

-  endtask // single_block_test

-

-

-  //----------------------------------------------------------------

-  // double_block_test()

-  //

-  //

-  // Perform test of a double block digest. Note that we check

-  // the digests for both the first and final block.

-  //----------------------------------------------------------------

-  task double_block_test(input           mode,

-                         input [511 : 0] block0,

-                         input [255 : 0] expected0,

-                         input [511 : 0] block1,

-                         input [255 : 0] expected1

-                        );

-    begin

-      $display("*** TC%01d - Double block test started.", tc_ctr);

-

-      // First block

-      write_block(block0);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_INIT_VALUE);

-

-      #(CLK_PERIOD);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected0)

-        begin

-          $display("TC%01d first block: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR in first digest", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected0);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-

-      // Final block

-      write_block(block1);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_NEXT_VALUE);

-

-      #(CLK_PERIOD);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected1)

-        begin

-          $display("TC%01d final block: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR in final digest", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected1);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-

-      $display("*** TC%01d - Double block test done.", tc_ctr);

-      tc_ctr = tc_ctr + 1;

-    end

-  endtask // double_block_test

-

-

-  //----------------------------------------------------------------

-  // sha224_tests()

-  //

-  // Run test cases for sha224.

-  // Test cases taken from:

-  // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA224.pdf

-  //----------------------------------------------------------------

-  task sha224_tests;

-    begin : sha224_tests_block

-      reg [511 : 0] tc0;

-      reg [255 : 0] res0;

-

-      reg [511 : 0] tc1_0;

-      reg [255 : 0] res1_0;

-      reg [511 : 0] tc1_1;

-      reg [255 : 0] res1_1;

-

-      $display("*** Testcases for sha224 functionality started.");

-

-      tc0 = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;

-

-      res0 = 256'h23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA700000000;

-      single_block_test(SHA224_MODE, tc0, res0);

-

-      tc1_0 = 512'h6162636462636465636465666465666765666768666768696768696A68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F70718000000000000000;

-      res1_0 = 256'h8250e65dbcf62f8466659c3333e5e91a10c8b7b0953927691f1419c200000000;

-      tc1_1 = 512'h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C0;

-      res1_1 = 256'h75388b16512776cc5dba5da1fd890150b0c6455cb4f58b195252252500000000;

-      double_block_test(SHA224_MODE, tc1_0, res1_0, tc1_1, res1_1);

-

-      $display("*** Testcases for sha224 functionality completed.");

-    end

-  endtask // sha224_tests

-

-

-  //----------------------------------------------------------------

-  // sha256_tests()

-  //

-  // Run test cases for sha256.

-  // Test cases taken from:

-  // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA256.pdf

-  //----------------------------------------------------------------

-  task sha256_tests;

-    begin : sha256_tests_block

-      reg [511 : 0] tc0;

-      reg [255 : 0] res0;

-

-      reg [511 : 0] tc1_0;

-      reg [255 : 0] res1_0;

-      reg [511 : 0] tc1_1;

-      reg [255 : 0] res1_1;

-

-      $display("*** Testcases for sha256 functionality started.");

-

-      tc0 = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;

-      res0 = 256'hBA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD;

-      single_block_test(SHA256_MODE, tc0, res0);

-

-      tc1_0 = 512'h6162636462636465636465666465666765666768666768696768696A68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F70718000000000000000;

-      res1_0 = 256'h85E655D6417A17953363376A624CDE5C76E09589CAC5F811CC4B32C1F20E533A;

-      tc1_1 = 512'h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C0;

-      res1_1 = 256'h248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1;

-      double_block_test(SHA256_MODE, tc1_0, res1_0, tc1_1, res1_1);

-

-      $display("*** Testcases for sha256 functionality completed.");

-    end

-  endtask // sha256_tests

-

-

-

-  //----------------------------------------------------------------

-  // issue_test()

-  //----------------------------------------------------------------

-  task issue_test

-    reg [511 : 0] block0;

-    reg [511 : 0] block1;

-    reg [511 : 0] block2;

-    reg [511 : 0] block3;

-    reg [511 : 0] block4;

-    reg [511 : 0] block5;

-    reg [511 : 0] block6;

-    reg [511 : 0] block7;

-    reg [511 : 0] block8;

-    reg [255 : 0] expected;

-    begin : issue_test;

-      block0 = 512'h6b900001_496e2074_68652061_72656120_6f662049_6f542028_496e7465_726e6574_206f6620_5468696e_6773292c_206d6f72_6520616e_64206d6f_7265626f_6f6d2c20;

-      block1 = 512'h69742068_61732062_65656e20_6120756e_69766572_73616c20_636f6e73_656e7375_73207468_61742064_61746120_69732074_69732061_206e6577_20746563_686e6f6c;

-      block2 = 512'h6f677920_74686174_20696e74_65677261_74657320_64656365_6e747261_6c697a61_74696f6e_2c496e20_74686520_61726561_206f6620_496f5420_28496e74_65726e65;

-      block3 = 512'h74206f66_20546869_6e677329_2c206d6f_72652061_6e64206d_6f726562_6f6f6d2c_20697420_68617320_6265656e_20612075_6e697665_7273616c_20636f6e_73656e73;

-      block4 = 512'h75732074_68617420_64617461_20697320_74697320_61206e65_77207465_63686e6f_6c6f6779_20746861_7420696e_74656772_61746573_20646563_656e7472_616c697a;

-      block5 = 512'h6174696f_6e2c496e_20746865_20617265_61206f66_20496f54_2028496e_7465726e_6574206f_66205468_696e6773_292c206d_6f726520_616e6420_6d6f7265_626f6f6d;

-      block6 = 512'h2c206974_20686173_20626565_6e206120_756e6976_65727361_6c20636f_6e73656e_73757320_74686174_20646174_61206973_20746973_2061206e_65772074_6563686e;

-      block7 = 512'h6f6c6f67_79207468_61742069_6e746567_72617465_73206465_63656e74_72616c69_7a617469_6f6e2c49_6e207468_65206172_6561206f_6620496f_54202849_6e746572;

-      block8 = 512'h6e657420_6f662054_68696e67_73292c20_6d6f7265_20616e64_206d6f72_65800000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_000010e8;

-

-      expected = 256'h7758a30bbdfc9cd92b284b05e9be9ca3d269d3d149e7e82ab4a9ed5e81fbcf9d;

-

-      $display("Running test for 9 block issue.");

-      tc_ctr = tc_ctr + 1;

-      write_block(block0);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block1);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block2);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block3);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block4);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block5);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block6);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block7);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      write_block(block8);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(CLK_PERIOD);

-      wait_ready();

-

-      read_digest();

-      if (digest_data == expected)

-        begin

-          $display("Digest ok.");

-        end

-      else

-        begin

-          $display("ERROR in digest");

-          $display("Expected: 0x%064x", expected);

-          $display("Got:      0x%064x", digest_data);

-          error_ctr = error_ctr + 1;

-        end

-    end

-  endtask // issue_test

-

-

-  //----------------------------------------------------------------

-  // The main test functionality.

-  //----------------------------------------------------------------

-  initial

-    begin : main

-      $display("   -- Testbench for sha256 started --");

-

-      init_sim();

-      reset_dut();

-

-      check_name_version();

-      sha224_tests();

-      sha256_tests();

-      issue_test();

-

-      display_test_result();

-

-      $display("   -- Testbench for sha256 done. --");

-      $finish;

-    end // main

-endmodule // tb_sha256

-

-//======================================================================

-// EOF tb_sha256.v

-//======================================================================

diff --git a/Verilog_Code/tb_sha256_core.v b/Verilog_Code/tb_sha256_core.v
deleted file mode 100644
index acf3867..0000000
--- a/Verilog_Code/tb_sha256_core.v
+++ /dev/null
@@ -1,521 +0,0 @@
-//======================================================================

-//

-// tb_sha256_core.v

-// ----------------

-// Testbench for the SHA-256 core.

-//

-//

-// Author: Joachim Strombergson

-// Copyright (c) 2013, Secworks Sweden AB

-// All rights reserved.

-//

-// Redistribution and use in source and binary forms, with or

-// without modification, are permitted provided that the following

-// conditions are met:

-//

-// 1. Redistributions of source code must retain the above copyright

-//    notice, this list of conditions and the following disclaimer.

-//

-// 2. Redistributions in binary form must reproduce the above copyright

-//    notice, this list of conditions and the following disclaimer in

-//    the documentation and/or other materials provided with the

-//    distribution.

-//

-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS

-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE

-// COPYRIGHT OWNER 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.

-//

-//======================================================================

-

-`default_nettype none

-

-module tb_sha256_core();

-

-  //----------------------------------------------------------------

-  // Internal constant and parameter definitions.

-  //----------------------------------------------------------------

-  parameter DEBUG = 0;

-

-  parameter CLK_HALF_PERIOD = 2;

-  parameter CLK_PERIOD = 2 * CLK_HALF_PERIOD;

-

-

-  //----------------------------------------------------------------

-  // Register and Wire declarations.

-  //----------------------------------------------------------------

-  reg [31 : 0] cycle_ctr;

-  reg [31 : 0] error_ctr;

-  reg [31 : 0] tc_ctr;

-

-  reg            tb_clk;

-  reg            tb_reset_n;

-  reg            tb_init;

-  reg            tb_next;

-  reg            tb_mode;

-  reg [511 : 0]  tb_block;

-  wire           tb_ready;

-  wire [255 : 0] tb_digest;

-  wire           tb_digest_valid;

-

-

-  //----------------------------------------------------------------

-  // Device Under Test.

-  //----------------------------------------------------------------

-  sha256_core dut(

-                  .clk(tb_clk),

-                  .reset_n(tb_reset_n),

-

-                  .init(tb_init),

-                  .next(tb_next),

-                  .mode(tb_mode),

-

-                  .block(tb_block),

-

-                  .ready(tb_ready),

-

-                  .digest(tb_digest),

-                  .digest_valid(tb_digest_valid)

-                 );

-

-

-  //----------------------------------------------------------------

-  // clk_gen

-  //

-  // Always running clock generator process.

-  //----------------------------------------------------------------

-  always

-    begin : clk_gen

-      #CLK_HALF_PERIOD;

-      tb_clk = !tb_clk;

-    end // clk_gen

-

-

-  //----------------------------------------------------------------

-  // sys_monitor()

-  //

-  // An always running process that creates a cycle counter and

-  // conditionally displays information about the DUT.

-  //----------------------------------------------------------------

-  always

-    begin : sys_monitor

-      cycle_ctr = cycle_ctr + 1;

-      #(2 * CLK_HALF_PERIOD);

-      if (DEBUG)

-        begin

-          dump_dut_state();

-        end

-    end

-

-

-  //----------------------------------------------------------------

-  // dump_dut_state()

-  //

-  // Dump the state of the dump when needed.

-  //----------------------------------------------------------------

-  task dump_dut_state;

-    begin

-      $display("State of DUT");

-      $display("------------");

-      $display("Inputs and outputs:");

-      $display("init   = 0x%01x, next  = 0x%01x",

-               dut.init, dut.next);

-      $display("block  = 0x%0128x", dut.block);

-

-      $display("ready  = 0x%01x, valid = 0x%01x",

-               dut.ready, dut.digest_valid);

-      $display("digest = 0x%064x", dut.digest);

-      $display("H0_reg = 0x%08x, H1_reg = 0x%08x, H2_reg = 0x%08x, H3_reg = 0x%08x",

-               dut.H0_reg, dut.H1_reg, dut.H2_reg, dut.H3_reg);

-      $display("H4_reg = 0x%08x, H5_reg = 0x%08x, H6_reg = 0x%08x, H7_reg = 0x%08x",

-               dut.H4_reg, dut.H5_reg, dut.H6_reg, dut.H7_reg);

-      $display("");

-

-      $display("Control signals and counter:");

-      $display("sha256_ctrl_reg = 0x%02x", dut.sha256_ctrl_reg);

-      $display("digest_init     = 0x%01x, digest_update = 0x%01x",

-               dut.digest_init, dut.digest_update);

-      $display("state_init      = 0x%01x, state_update  = 0x%01x",

-               dut.state_init, dut.state_update);

-      $display("first_block     = 0x%01x, ready_flag    = 0x%01x, w_init    = 0x%01x",

-               dut.first_block, dut.ready_flag, dut.w_init);

-      $display("t_ctr_inc       = 0x%01x, t_ctr_rst     = 0x%01x, t_ctr_reg = 0x%02x",

-               dut.t_ctr_inc, dut.t_ctr_rst, dut.t_ctr_reg);

-      $display("");

-

-      $display("State registers:");

-      $display("a_reg = 0x%08x, b_reg = 0x%08x, c_reg = 0x%08x, d_reg = 0x%08x",

-               dut.a_reg, dut.b_reg, dut.c_reg, dut.d_reg);

-      $display("e_reg = 0x%08x, f_reg = 0x%08x, g_reg = 0x%08x, h_reg = 0x%08x",

-               dut.e_reg, dut.f_reg, dut.g_reg, dut.h_reg);

-      $display("");

-      $display("a_new = 0x%08x, b_new = 0x%08x, c_new = 0x%08x, d_new = 0x%08x",

-               dut.a_new, dut.b_new, dut.c_new, dut.d_new);

-      $display("e_new = 0x%08x, f_new = 0x%08x, g_new = 0x%08x, h_new = 0x%08x",

-               dut.e_new, dut.f_new, dut.g_new, dut.h_new);

-      $display("");

-

-      $display("State update values:");

-      $display("w  = 0x%08x, k  = 0x%08x", dut.w_data, dut.k_data);

-      $display("t1 = 0x%08x, t2 = 0x%08x", dut.t1, dut.t2);

-      $display("");

-    end

-  endtask // dump_dut_state

-

-

-  //----------------------------------------------------------------

-  // reset_dut()

-  //

-  // Toggle reset to put the DUT into a well known state.

-  //----------------------------------------------------------------

-  task reset_dut;

-    begin

-      $display("*** Toggle reset.");

-      tb_reset_n = 0;

-      #(4 * CLK_HALF_PERIOD);

-      tb_reset_n = 1;

-    end

-  endtask // reset_dut

-

-

-  //----------------------------------------------------------------

-  // init_sim()

-  //

-  // Initialize all counters and testbed functionality as well

-  // as setting the DUT inputs to defined values.

-  //----------------------------------------------------------------

-  task init_sim;

-    begin

-      cycle_ctr = 0;

-      error_ctr = 0;

-      tc_ctr = 0;

-

-      tb_clk = 0;

-      tb_reset_n = 1;

-

-      tb_init = 0;

-      tb_next = 0;

-      tb_mode = 1;

-      tb_block = 512'h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;

-    end

-  endtask // init_dut

-

-

-  //----------------------------------------------------------------

-  // display_test_result()

-  //

-  // Display the accumulated test results.

-  //----------------------------------------------------------------

-  task display_test_result;

-    begin

-      if (error_ctr == 0)

-        begin

-          $display("*** All %02d test cases completed successfully", tc_ctr);

-        end

-      else

-        begin

-          $display("*** %02d test cases did not complete successfully.", error_ctr);

-        end

-    end

-  endtask // display_test_result

-

-

-  //----------------------------------------------------------------

-  // wait_ready()

-  //

-  // Wait for the ready flag in the dut to be set.

-  //

-  // Note: It is the callers responsibility to call the function

-  // when the dut is actively processing and will in fact at some

-  // point set the flag.

-  //----------------------------------------------------------------

-  task wait_ready;

-    begin

-      while (!tb_ready)

-        begin

-          #(CLK_PERIOD);

-        end

-    end

-  endtask // wait_ready

-

-

-  //----------------------------------------------------------------

-  // single_block_test()

-  //

-  // Run a test case spanning a single data block.

-  //----------------------------------------------------------------

-  task single_block_test(input [7 : 0]   tc_number,

-                         input [511 : 0] block,

-                         input [255 : 0] expected);

-   begin

-     $display("*** TC %0d single block test case started.", tc_number);

-     tc_ctr = tc_ctr + 1;

-

-     tb_block = block;

-     tb_init = 1;

-     #(CLK_PERIOD);

-     wait_ready();

-

-

-     if (tb_digest == expected)

-       begin

-         $display("*** TC %0d successful.", tc_number);

-         $display("");

-       end

-     else

-       begin

-         $display("*** ERROR: TC %0d NOT successful.", tc_number);

-         $display("Expected: 0x%064x", expected);

-         $display("Got:      0x%064x", tb_digest);

-         $display("");

-

-         error_ctr = error_ctr + 1;

-       end

-   end

-  endtask // single_block_test

-

-

-  //----------------------------------------------------------------

-  // double_block_test()

-  //

-  // Run a test case spanning two data blocks. We check both

-  // intermediate and final digest.

-  //----------------------------------------------------------------

-  task double_block_test(input [7 : 0]   tc_number,

-                         input [511 : 0] block1,

-                         input [255 : 0] expected1,

-                         input [511 : 0] block2,

-                         input [255 : 0] expected2);

-

-     reg [255 : 0] db_digest1;

-     reg [255 : 0] db_digest2;

-     reg           db_error;

-   begin

-     $display("*** TC %0d double block test case started.", tc_number);

-     db_error = 0;

-     tc_ctr = tc_ctr + 1;

-

-     $display("*** TC %0d first block started.", tc_number);

-     tb_block = block1;

-     tb_init = 1;

-     #(CLK_PERIOD);

-     tb_init = 0;

-     wait_ready();

-     db_digest1 = tb_digest;

-     $display("*** TC %0d first block done.", tc_number);

-

-     $display("*** TC %0d second block started.", tc_number);

-     tb_block = block2;

-     tb_next = 1;

-     #(CLK_PERIOD);

-     tb_next = 0;

-     wait_ready();

-     db_digest2 = tb_digest;

-     $display("*** TC %0d second block done.", tc_number);

-

-     if (DEBUG)

-       begin

-         $display("Generated digests:");

-         $display("Expected 1: 0x%064x", expected1);

-         $display("Got      1: 0x%064x", db_digest1);

-         $display("Expected 2: 0x%064x", expected2);

-         $display("Got      2: 0x%064x", db_digest2);

-         $display("");

-       end

-

-     if (db_digest1 == expected1)

-       begin

-         $display("*** TC %0d first block successful", tc_number);

-         $display("");

-       end

-     else

-       begin

-         $display("*** ERROR: TC %0d first block NOT successful", tc_number);

-         $display("Expected: 0x%064x", expected1);

-         $display("Got:      0x%064x", db_digest1);

-         $display("");

-         db_error = 1;

-       end

-

-     if (db_digest2 == expected2)

-       begin

-         $display("*** TC %0d second block successful", tc_number);

-         $display("");

-       end

-     else

-       begin

-         $display("*** ERROR: TC %0d second block NOT successful", tc_number);

-         $display("Expected: 0x%064x", expected2);

-         $display("Got:      0x%064x", db_digest2);

-         $display("");

-         db_error = 1;

-       end

-

-     if (db_error)

-       begin

-         error_ctr = error_ctr + 1;

-       end

-   end

-  endtask // double_block_test

-

-

-  //----------------------------------------------------------------

-  // issue_test()

-  //----------------------------------------------------------------

-  task issue_test;

-   

-    reg [511 : 0] block0;

-    reg [511 : 0] block1;

-    reg [511 : 0] block2;

-    reg [511 : 0] block3;

-    reg [511 : 0] block4;

-    reg [511 : 0] block5;

-    reg [511 : 0] block6;

-    reg [511 : 0] block7;

-    reg [511 : 0] block8;

-    reg [255 : 0] expected;

-    begin :issue_test

-      block0 = 512'h6b900001_496e2074_68652061_72656120_6f662049_6f542028_496e7465_726e6574_206f6620_5468696e_6773292c_206d6f72_6520616e_64206d6f_7265626f_6f6d2c20;

-      block1 = 512'h69742068_61732062_65656e20_6120756e_69766572_73616c20_636f6e73_656e7375_73207468_61742064_61746120_69732074_69732061_206e6577_20746563_686e6f6c;

-      block2 = 512'h6f677920_74686174_20696e74_65677261_74657320_64656365_6e747261_6c697a61_74696f6e_2c496e20_74686520_61726561_206f6620_496f5420_28496e74_65726e65;

-      block3 = 512'h74206f66_20546869_6e677329_2c206d6f_72652061_6e64206d_6f726562_6f6f6d2c_20697420_68617320_6265656e_20612075_6e697665_7273616c_20636f6e_73656e73;

-      block4 = 512'h75732074_68617420_64617461_20697320_74697320_61206e65_77207465_63686e6f_6c6f6779_20746861_7420696e_74656772_61746573_20646563_656e7472_616c697a;

-      block5 = 512'h6174696f_6e2c496e_20746865_20617265_61206f66_20496f54_2028496e_7465726e_6574206f_66205468_696e6773_292c206d_6f726520_616e6420_6d6f7265_626f6f6d;

-      block6 = 512'h2c206974_20686173_20626565_6e206120_756e6976_65727361_6c20636f_6e73656e_73757320_74686174_20646174_61206973_20746973_2061206e_65772074_6563686e;

-      block7 = 512'h6f6c6f67_79207468_61742069_6e746567_72617465_73206465_63656e74_72616c69_7a617469_6f6e2c49_6e207468_65206172_6561206f_6620496f_54202849_6e746572;

-      block8 = 512'h6e657420_6f662054_68696e67_73292c20_6d6f7265_20616e64_206d6f72_65800000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_000010e8;

-

-      expected = 256'h7758a30bbdfc9cd92b284b05e9be9ca3d269d3d149e7e82ab4a9ed5e81fbcf9d;

-

-      $display("Running test for 9 block issue.");

-      tc_ctr = tc_ctr + 1;

-      tb_block = block0;

-      tb_init = 1;

-      #(CLK_PERIOD);

-      tb_init = 0;

-      wait_ready();

-

-      tb_block = block1;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      tb_block = block2;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      tb_block = block3;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      tb_block = block4;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      tb_block = block5;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      tb_block = block6;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      tb_block = block7;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      tb_block = block8;

-      tb_next = 1;

-      #(CLK_PERIOD);

-      tb_next = 0;

-      wait_ready();

-

-      if (tb_digest == expected)

-        begin

-          $display("Digest ok.");

-        end

-      else

-        begin

-          error_ctr = error_ctr + 1;

-          $display("Error! Got:      0x%064x", tb_digest);

-          $display("Error! Expected: 0x%064x", expected);

-        end

-    end

-  endtask // issue_test

-

-

-  //----------------------------------------------------------------

-  // sha256_core_test

-  // Test cases taken from:

-  // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA256.pdf

-  //----------------------------------------------------------------

-  task sha256_core_test;

-    reg [511 : 0] tc1;

-    reg [255 : 0] res1;

-    reg [511 : 0] tc2_1;

-    reg [255 : 0] res2_1;

-    reg [511 : 0] tc2_2;

-    reg [255 : 0] res2_2;

-    begin : sha256_core_test

-      // TC1: Single block message: "abc".

-      tc1 = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;

-      res1 = 256'hBA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD;

-      single_block_test(1, tc1, res1);

-

-      // TC2: Double block message.

-      // "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"

-      tc2_1 = 512'h6162636462636465636465666465666765666768666768696768696A68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F70718000000000000000;

-      res2_1 = 256'h85E655D6417A17953363376A624CDE5C76E09589CAC5F811CC4B32C1F20E533A;

-

-      tc2_2 = 512'h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C0;

-      res2_2 = 256'h248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1;

-      double_block_test(2, tc2_1, res2_1, tc2_2, res2_2);

-    end

-  endtask // sha256_core_test

-

-

-  //----------------------------------------------------------------

-  // main()

-  //----------------------------------------------------------------

-  initial

-    begin : main

-      $display("   -- Testbench for sha256 core started --");

-

-      init_sim();

-      dump_dut_state();

-      reset_dut();

-      dump_dut_state();

-

-      sha256_core_test();

-      issue_test();

-

-      display_test_result();

-      $display("*** Simulation done.");

-      $finish;

-    end // main

-endmodule // tb_sha256_core

-

-//======================================================================

-// EOF tb_sha256_core.v

-//======================================================================

diff --git a/Verilog_Code/tb_sha256_w_mem.v b/Verilog_Code/tb_sha256_w_mem.v
deleted file mode 100644
index 8c929c6..0000000
--- a/Verilog_Code/tb_sha256_w_mem.v
+++ /dev/null
@@ -1,213 +0,0 @@
-//======================================================================
-//
-// tb_sha256_w_mem.v
-// -----------------
-// Testbench for the SHA-256 W memory module.
-//
-//
-// Copyright (c) 2013, Secworks Sweden AB
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or
-// without modification, are permitted provided that the following
-// conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-//    notice, this list of conditions and the following disclaimer in
-//    the documentation and/or other materials provided with the
-//    distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT OWNER 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.
-//
-//======================================================================
-
-`default_nettype none
-
-module tb_sha256_w_mem();
-
-  //----------------------------------------------------------------
-  // Internal constant and parameter definitions.
-  //----------------------------------------------------------------
-  parameter DEBUG          = 1;
-  parameter DISPLAY_CYCLES = 0;
-
-  parameter CLK_HALF_PERIOD = 2;
-
-
-  //----------------------------------------------------------------
-  // Wires.
-  //----------------------------------------------------------------
-  reg            tb_clk;
-  reg            tb_reset_n;
-
-  reg           tb_init;
-  reg           tb_next;
-  reg [511 : 0] tb_block;
-  wire [31 : 0] tb_w;
-
-  reg [63 : 0] cycle_ctr;
-  reg [31 : 0] error_ctr;
-  reg [31 : 0] tc_ctr;
-
-
-  //----------------------------------------------------------------
-  // Device Under Test.
-  //----------------------------------------------------------------
-  sha256_w_mem dut(
-                   .clk(tb_clk),
-                   .reset_n(tb_reset_n),
-
-                   .block(tb_block),
-
-                   .init(tb_init),
-                   .next(tb_next),
-
-                   .w(tb_w)
-                  );
-
-
-  //----------------------------------------------------------------
-  // clk_gen
-  //
-  // Clock generator process.
-  //----------------------------------------------------------------
-  always
-    begin : clk_gen
-      #CLK_HALF_PERIOD tb_clk = !tb_clk;
-    end // clk_gen
-
-
-  //--------------------------------------------------------------------
-  // dut_monitor
-  //
-  // Monitor displaying information every cycle.
-  // Includes the cycle counter.
-  //--------------------------------------------------------------------
-  always @ (posedge tb_clk)
-    begin : dut_monitor
-      cycle_ctr = cycle_ctr + 1;
-
-      if (DISPLAY_CYCLES)
-        begin
-          $display("cycle = %016x:", cycle_ctr);
-        end
-
-      if (DEBUG)
-        begin
-          $display("dut w_ctr      = %02x:", dut.w_ctr_reg);
-          $display("dut w_tmp      = %02x:", dut.w_tmp);
-          dump_w_state();
-        end
-    end // dut_monitor
-
-
-  //----------------------------------------------------------------
-  // dump_w_state()
-  //
-  // Dump the current state of all W registers.
-  //----------------------------------------------------------------
-  task dump_w_state;
-    begin
-      $display("W state:");
-
-      $display("w0_reg  = %08x, w1_reg  = %08x, w2_reg  = %08x, w3_reg  = %08x",
-               dut.w_mem[00], dut.w_mem[01], dut.w_mem[02], dut.w_mem[03]);
-
-      $display("w4_reg  = %08x, w5_reg  = %08x, w6_reg  = %08x, w7_reg  = %08x",
-               dut.w_mem[04], dut.w_mem[05], dut.w_mem[06], dut.w_mem[07]);
-
-      $display("w8_reg  = %08x, w9_reg  = %08x, w10_reg = %08x, w11_reg = %08x",
-               dut.w_mem[08], dut.w_mem[09], dut.w_mem[10], dut.w_mem[11]);
-
-      $display("w12_reg = %08x, w13_reg = %08x, w14_reg = %08x, w15_reg = %08x",
-               dut.w_mem[12], dut.w_mem[13], dut.w_mem[14], dut.w_mem[15]);
-
-      $display("w_new = %08x", dut.w_new);
-      $display("");
-    end
-  endtask // dump_state
-
-
-  //----------------------------------------------------------------
-  // reset_dut
-  //----------------------------------------------------------------
-  task reset_dut;
-    begin
-      $display("*** Toggle reset.");
-      tb_reset_n = 0;
-      #(4 * CLK_HALF_PERIOD);
-      tb_reset_n = 1;
-    end
-  endtask // reset_dut
-
-
-  //----------------------------------------------------------------
-  // init_sim
-  //----------------------------------------------------------------
-  task init_sim;
-    begin
-      $display("*** Simulation init.");
-      tb_clk = 0;
-      tb_reset_n = 1;
-      cycle_ctr = 0;
-
-      tb_init = 0;
-      tb_block = 512'h0;
-    end
-  endtask // reset_dut
-
-
-  //----------------------------------------------------------------
-  // test_w_schedule()
-  //
-  // Test that W scheduling happens and work correctly.
-  // Note: Currently not a self checking test case.
-  //----------------------------------------------------------------
-  task test_w_schedule;
-    begin
-      $display("*** Test of W schedule processing. --");
-      tb_block = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;
-      tb_init = 1;
-      #(4 * CLK_HALF_PERIOD);
-      tb_init = 0;
-      dump_w_state();
-
-      tb_next = 1;
-      #(150 * CLK_HALF_PERIOD);
-    end
-  endtask // test_w_schedule
-
-
-  //----------------------------------------------------------------
-  // The main test functionality.
-  //----------------------------------------------------------------
-  initial
-    begin : w_mem_test
-      $display("   -- Testbench for sha256 w memory started --");
-      init_sim();
-      reset_dut();
-      test_w_schedule();
-
-      $display("*** Simulation done.");
-      $finish;
-    end
-
-endmodule // w_mem_test
-
-//======================================================================
-// EOF tb_sha256_w_mem.v
-//======================================================================
diff --git a/Verilog_Code/tb_top.v b/Verilog_Code/tb_top.v
deleted file mode 100644
index ab6e82f..0000000
--- a/Verilog_Code/tb_top.v
+++ /dev/null
@@ -1,726 +0,0 @@
-//======================================================================

-//

-// tb_top_tukka_proj.v

-// -----------

-// Testbench for the SHA-256 and clock mux top level wrapper.

-//

-//

-// Author: Joachim Strombergson

-// Copyright (c) 2013, Secworks Sweden AB

-// All rights reserved.

-//

-// Redistribution and use in source and binary forms, with or

-// without modification, are permitted provided that the following

-// conditions are met:

-//

-// 1. Redistributions of source code must retain the above copyright

-//    notice, this list of conditions and the following disclaimer.

-//

-// 2. Redistributions in binary form must reproduce the above copyright

-//    notice, this list of conditions and the following disclaimer in

-//    the documentation and/or other materials provided with the

-//    distribution.

-//

-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS

-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE

-// COPYRIGHT OWNER 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.

-//

-//======================================================================

-

-`default_nettype none

-

-module tb_top_tukka_proj();

-

-  //----------------------------------------------------------------

-  // Internal constant and parameter definitions.

-  //----------------------------------------------------------------

-  parameter DEBUG = 0;

-

-  parameter CLK_HALF_PERIOD1 = 2;

-  parameter CLK_HALF_PERIOD2 = 4;

-  parameter CLK_PERIOD1 = 2 * CLK_HALF_PERIOD1;

-  parameter CLK_PERIOD2 = 2 * CLK_HALF_PERIOD2;

-

-  // The address map.

-  parameter ADDR_NAME0       = 8'h00;

-  parameter ADDR_NAME1       = 8'h01;

-  parameter ADDR_VERSION     = 8'h02;

-

-  parameter ADDR_CTRL        = 8'h08;

-  parameter CTRL_INIT_VALUE  = 8'h01;

-  parameter CTRL_NEXT_VALUE  = 8'h02;

-  parameter CTRL_MODE_VALUE  = 8'h04;

-

-  parameter ADDR_STATUS      = 8'h09;

-  parameter STATUS_READY_BIT = 0;

-  parameter STATUS_VALID_BIT = 1;

-

-  parameter ADDR_BLOCK0    = 8'h10;

-  parameter ADDR_BLOCK1    = 8'h11;

-  parameter ADDR_BLOCK2    = 8'h12;

-  parameter ADDR_BLOCK3    = 8'h13;

-  parameter ADDR_BLOCK4    = 8'h14;

-  parameter ADDR_BLOCK5    = 8'h15;

-  parameter ADDR_BLOCK6    = 8'h16;

-  parameter ADDR_BLOCK7    = 8'h17;

-  parameter ADDR_BLOCK8    = 8'h18;

-  parameter ADDR_BLOCK9    = 8'h19;

-  parameter ADDR_BLOCK10   = 8'h1a;

-  parameter ADDR_BLOCK11   = 8'h1b;

-  parameter ADDR_BLOCK12   = 8'h1c;

-  parameter ADDR_BLOCK13   = 8'h1d;

-  parameter ADDR_BLOCK14   = 8'h1e;

-  parameter ADDR_BLOCK15   = 8'h1f;

-

-  parameter ADDR_DIGEST0   = 8'h20;

-  parameter ADDR_DIGEST1   = 8'h21;

-  parameter ADDR_DIGEST2   = 8'h22;

-  parameter ADDR_DIGEST3   = 8'h23;

-  parameter ADDR_DIGEST4   = 8'h24;

-  parameter ADDR_DIGEST5   = 8'h25;

-  parameter ADDR_DIGEST6   = 8'h26;

-  parameter ADDR_DIGEST7   = 8'h27;

-

-  parameter SHA224_MODE    = 0;

-  parameter SHA256_MODE    = 1;

-

-

-  //----------------------------------------------------------------

-  // Register and Wire declarations.

-  //----------------------------------------------------------------

-  reg [31 : 0] cycle_ctr;

-  reg [31 : 0] error_ctr;

-  reg [31 : 0] tc_ctr;

-  reg           tb_clk1,tb_clk2,tb_sel_clk2;

-  reg           tb_clk;

-  reg           tb_reset_n;

-  reg           tb_cs;

-  reg           tb_we;

-  reg [7 : 0]   tb_address;

-  reg [31 : 0]  tb_write_data;

-  wire [31 : 0] tb_read_data;

-  wire          tb_error;

-

-  reg [31 : 0]  read_data;

-  reg [255 : 0] digest_data;

-

-

-  //----------------------------------------------------------------

-  // Device Under Test.

-  //----------------------------------------------------------------

- 

-top_tukka_proj dut(

-.clk1(tb_clk1),

-.clk2(tb_clk2),

-.reset_n(tb_reset_n),

-.sel_clk2(tb_sel_clk2),

-.cs(tb_cs),

-.we(tb_we),

-.address(tb_address),

-.write_data(tb_write_data),

-.read_data(tb_read_data),

-.error(tb_error)

-);

-

-

-  //----------------------------------------------------------------

-  // clk_gen

-  //

-  // Clock generator process.

-  //----------------------------------------------------------------

-  always

-    begin : clk_gen

-      #CLK_HALF_PERIOD1 tb_clk1 = !tb_clk1;

-      #CLK_HALF_PERIOD2 tb_clk2 = !tb_clk2;

-    end // clk_gen

-

-

-  //----------------------------------------------------------------

-  // sys_monitor

-  //

-  // Generates a cycle counter and displays information about

-  // the dut as needed.

-  //----------------------------------------------------------------

-  always

-    begin : sys_monitor

-      #(2 * CLK_HALF_PERIOD2);

-      cycle_ctr = cycle_ctr + 1;

-    end

-

-

-  //----------------------------------------------------------------

-  // dump_dut_state()

-  //

-  // Dump the state of the dump when needed.

-  //----------------------------------------------------------------

- /* task dump_dut_state;

-    begin

-      $display("State of DUT");

-      $display("------------");

-      $display("Inputs and outputs:");

-      $display("cs = 0x%01x, we = 0x%01x",

-               dut.cs, dut.we);

-      $display("address = 0x%02x", dut.address);

-      $display("write_data = 0x%08x, read_data = 0x%08x",

-               dut.write_data, dut.read_data);

-      $display("tmp_read_data = 0x%08x", dut.tmp_read_data);

-      $display("");

-

-      $display("Control and status:");

-      $display("ctrl = 0x%02x, status = 0x%02x",

-               {dut.next_reg, dut.init_reg},

-               {dut.digest_valid_reg, dut.ready_reg});

-      $display("");

-

-      $display("Message block:");

-      $display("block0  = 0x%08x, block1  = 0x%08x, block2  = 0x%08x,  block3  = 0x%08x",

-               dut.block_reg[00], dut.block_reg[01], dut.block_reg[02], dut.block_reg[03]);

-//      $display("block4  = 0x%08x, block5  = 0x%08x, block6  = 0x%08x,  block7  = 0x%08x",

-//               dut.block_reg[04], dut.block_reg[05], dut.block_reg[06], dut.block_reg[07]);

-

-      $display("block8  = 0x%08x, block9  = 0x%08x, block10 = 0x%08x,  block11 = 0x%08x",

-               dut.block_reg[08], dut.block_reg[09], dut.block_reg[10], dut.block_reg[11]);

-      $display("block12 = 0x%08x, block13 = 0x%08x, block14 = 0x%08x,  block15 = 0x%08x",

-               dut.block_reg[12], dut.block_reg[13], dut.block_reg[14], dut.block_reg[15]);

-      $display("");

-

-      $display("Digest:");

-      $display("digest = 0x%064x", dut.digest_reg);

-      $display("");

-

-    end

-  endtask // dump_dut_state   */

-

-

-  //----------------------------------------------------------------

-  // reset_dut()

-  //

-  // Toggles reset to force the DUT into a well defined state.

-  //----------------------------------------------------------------

-  task reset_dut;

-    begin

-      $display("*** Toggle reset.");

-      tb_reset_n = 0;

-      #(4 * CLK_HALF_PERIOD1);

-      tb_reset_n = 1;

-    end

-  endtask // reset_dut

-

-

-  //----------------------------------------------------------------

-  // init_sim()

-  //

-  // Initialize all counters and testbed functionality as well

-  // as setting the DUT inputs to defined values.

-  //----------------------------------------------------------------

-  task init_sim;

-    begin

-      cycle_ctr = 32'h0;

-      error_ctr = 32'h0;

-      tc_ctr = 32'h0;

-      tb_sel_clk2=1'b0;

-      tb_clk1 = 0;

-      tb_clk2 = 0;

-      tb_reset_n = 0;

-      tb_cs = 0;

-      tb_we = 0;

-      tb_address = 6'h0;

-      tb_write_data = 32'h0;

-    end

-  endtask // init_dut

-

-

-  //----------------------------------------------------------------

-  // display_test_result()

-  //

-  // Display the accumulated test results.

-  //----------------------------------------------------------------

-  task display_test_result;

-    begin

-      if (error_ctr == 0)

-        begin

-          $display("*** All %02d test cases completed successfully.", tc_ctr);

-        end

-      else

-        begin

-          $display("*** %02d test cases completed.", tc_ctr);

-          $display("*** %02d errors detected during testing.", error_ctr);

-        end

-    end

-  endtask // display_test_result

-

-

-  //----------------------------------------------------------------

-  // wait_ready()

-  //

-  // Wait for the ready flag in the dut to be set.

-  // (Actually we wait for either ready or valid to be set.)

-  //

-  // Note: It is the callers responsibility to call the function

-  // when the dut is actively processing and will in fact at some

-  // point set the flag.

-  //----------------------------------------------------------------

-  task wait_ready;

-    begin

-      read_data = 0;

-

-      while (read_data == 0)

-        begin

-          read_word(ADDR_STATUS);

-        end

-    end

-  endtask // wait_ready

-

-

-  //----------------------------------------------------------------

-  // write_word()

-  //

-  // Write the given word to the DUT using the DUT interface.

-  //----------------------------------------------------------------

-  task write_word(input [7 : 0]  address,

-                  input [31 : 0] word);

-    begin

-      if (DEBUG)

-        begin

-          $display("*** Writing 0x%08x to 0x%02x.", word, address);

-          $display("");

-        end

-

-      tb_address = address;

-      tb_write_data = word;

-      tb_cs = 1;

-      tb_we = 1;

-      #(CLK_PERIOD2);

-      tb_cs = 0;

-      tb_we = 0;

-    end

-  endtask // write_word

-

-

-  //----------------------------------------------------------------

-  // write_block()

-  //

-  // Write the given block to the dut.

-  //----------------------------------------------------------------

-  task write_block(input [511 : 0] block);

-    begin

-      write_word(ADDR_BLOCK0,  block[511 : 480]);

-      write_word(ADDR_BLOCK1,  block[479 : 448]);

-      write_word(ADDR_BLOCK2,  block[447 : 416]);

-      write_word(ADDR_BLOCK3,  block[415 : 384]);

-      write_word(ADDR_BLOCK4,  block[383 : 352]);

-      write_word(ADDR_BLOCK5,  block[351 : 320]);

-      write_word(ADDR_BLOCK6,  block[319 : 288]);

-      write_word(ADDR_BLOCK7,  block[287 : 256]);

-      write_word(ADDR_BLOCK8,  block[255 : 224]);

-      write_word(ADDR_BLOCK9,  block[223 : 192]);

-      write_word(ADDR_BLOCK10, block[191 : 160]);

-      write_word(ADDR_BLOCK11, block[159 : 128]);

-      write_word(ADDR_BLOCK12, block[127 :  96]);

-      write_word(ADDR_BLOCK13, block[95  :  64]);

-      write_word(ADDR_BLOCK14, block[63  :  32]);

-      write_word(ADDR_BLOCK15, block[31  :   0]);

-    end

-  endtask // write_block

-

-

-  //----------------------------------------------------------------

-  // read_word()

-  //

-  // Read a data word from the given address in the DUT.

-  // the word read will be available in the global variable

-  // read_data.

-  //----------------------------------------------------------------

-  task read_word(input [7 : 0]  address);

-    begin

-      tb_address = address;

-      tb_cs = 1;

-      tb_we = 0;

-      #(CLK_PERIOD2);

-      read_data = tb_read_data;

-      tb_cs = 0;

-

-      if (DEBUG)

-        begin

-          $display("*** Reading 0x%08x from 0x%02x.", read_data, address);

-          $display("");

-        end

-    end

-  endtask // read_word

-

-

-  //----------------------------------------------------------------

-  // check_name_version()

-  //

-  // Read the name and version from the DUT.

-  //----------------------------------------------------------------

-  task check_name_version;

-    reg [31 : 0] name0;

-    reg [31 : 0] name1;

-    reg [31 : 0] version;

-    begin

-

-      read_word(ADDR_NAME0);

-      name0 = read_data;

-      read_word(ADDR_NAME1);

-      name1 = read_data;

-      read_word(ADDR_VERSION);

-      version = read_data;

-

-      $display("DUT name: %c%c%c%c%c%c%c%c",

-               name0[31 : 24], name0[23 : 16], name0[15 : 8], name0[7 : 0],

-               name1[31 : 24], name1[23 : 16], name1[15 : 8], name1[7 : 0]);

-      $display("DUT version: %c%c%c%c",

-               version[31 : 24], version[23 : 16], version[15 : 8], version[7 : 0]);

-    end

-  endtask // check_name_version

-

-

-  //----------------------------------------------------------------

-  // read_digest()

-  //

-  // Read the digest in the dut. The resulting digest will be

-  // available in the global variable digest_data.

-  //----------------------------------------------------------------

-  task read_digest;

-    begin

-      read_word(ADDR_DIGEST0);

-      digest_data[255 : 224] = read_data;

-      read_word(ADDR_DIGEST1);

-      digest_data[223 : 192] = read_data;

-      read_word(ADDR_DIGEST2);

-      digest_data[191 : 160] = read_data;

-      read_word(ADDR_DIGEST3);

-      digest_data[159 : 128] = read_data;

-      read_word(ADDR_DIGEST4);

-      digest_data[127 :  96] = read_data;

-      read_word(ADDR_DIGEST5);

-      digest_data[95  :  64] = read_data;

-      read_word(ADDR_DIGEST6);

-      digest_data[63  :  32] = read_data;

-      read_word(ADDR_DIGEST7);

-      digest_data[31  :   0] = read_data;

-    end

-  endtask // read_digest

-

-

-  //----------------------------------------------------------------

-  // single_block_test()

-  //

-  //

-  // Perform test of a single block digest.

-  //----------------------------------------------------------------

-  task single_block_test(input           mode,

-                         input [511 : 0] block,

-                         input [255 : 0] expected);

-    begin

-      $display("*** TC%01d - Single block test started.", tc_ctr);

-

-      write_block(block);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_INIT_VALUE);

-

-      #(CLK_PERIOD1);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected)

-        begin

-          $display("TC%01d: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR.", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-      $display("*** TC%01d - Single block test done.", tc_ctr);

-      tc_ctr = tc_ctr + 1;

-    end

-  endtask // single_block_test

-

-

-  //----------------------------------------------------------------

-  // double_block_test()

-  //

-  //

-  // Perform test of a double block digest. Note that we check

-  // the digests for both the first and final block.

-  //----------------------------------------------------------------

-  task double_block_test(input           mode,

-                         input [511 : 0] block0,

-                         input [255 : 0] expected0,

-                         input [511 : 0] block1,

-                         input [255 : 0] expected1

-                        );

-    begin

-      $display("*** TC%01d - Double block test started.", tc_ctr);

-

-      // First block

-      write_block(block0);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_INIT_VALUE);

-

-      #(CLK_PERIOD2);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected0)

-        begin

-          $display("TC%01d first block: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR in first digest", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected0);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-

-      // Final block

-      write_block(block1);

-

-      if (mode)

-        write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      else

-        write_word(ADDR_CTRL, CTRL_NEXT_VALUE);

-

-      #(CLK_PERIOD2);

-      wait_ready();

-      read_digest();

-

-      // We need to ignore the LSW in SHA224 mode.

-      if (mode == SHA224_MODE)

-        digest_data[31 : 0] = 32'h0;

-

-      if (digest_data == expected1)

-        begin

-          $display("TC%01d final block: OK.", tc_ctr);

-        end

-      else

-        begin

-          $display("TC%01d: ERROR in final digest", tc_ctr);

-          $display("TC%01d: Expected: 0x%064x", tc_ctr, expected1);

-          $display("TC%01d: Got:      0x%064x", tc_ctr, digest_data);

-          error_ctr = error_ctr + 1;

-        end

-

-      $display("*** TC%01d - Double block test done.", tc_ctr);

-      tc_ctr = tc_ctr + 1;

-    end

-  endtask // double_block_test

-

-

-  //----------------------------------------------------------------

-  // sha224_tests()

-  //

-  // Run test cases for sha224.

-  // Test cases taken from:

-  // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA224.pdf

-  //----------------------------------------------------------------

-  task sha224_tests;

-    begin : sha224_tests_block

-      reg [511 : 0] tc0;

-      reg [255 : 0] res0;

-

-      reg [511 : 0] tc1_0;

-      reg [255 : 0] res1_0;

-      reg [511 : 0] tc1_1;

-      reg [255 : 0] res1_1;

-

-      $display("*** Testcases for sha224 functionality started.");

-

-      tc0 = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;

-

-      res0 = 256'h23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA700000000;

-      single_block_test(SHA224_MODE, tc0, res0);

-

-      tc1_0 = 512'h6162636462636465636465666465666765666768666768696768696A68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F70718000000000000000;

-      res1_0 = 256'h8250e65dbcf62f8466659c3333e5e91a10c8b7b0953927691f1419c200000000;

-      tc1_1 = 512'h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C0;

-      res1_1 = 256'h75388b16512776cc5dba5da1fd890150b0c6455cb4f58b195252252500000000;

-      double_block_test(SHA224_MODE, tc1_0, res1_0, tc1_1, res1_1);

-

-      $display("*** Testcases for sha224 functionality completed.");

-    end

-  endtask // sha224_tests

-

-

-  //----------------------------------------------------------------

-  // sha256_tests()

-  //

-  // Run test cases for sha256.

-  // Test cases taken from:

-  // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA256.pdf

-  //----------------------------------------------------------------

-  task sha256_tests;

-    begin : sha256_tests_block

-      reg [511 : 0] tc0;

-      reg [255 : 0] res0;

-

-      reg [511 : 0] tc1_0;

-      reg [255 : 0] res1_0;

-      reg [511 : 0] tc1_1;

-      reg [255 : 0] res1_1;

-

-      $display("*** Testcases for sha256 functionality started.");

-

-      tc0 = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;

-      res0 = 256'hBA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD;

-      single_block_test(SHA256_MODE, tc0, res0);

-

-      tc1_0 = 512'h6162636462636465636465666465666765666768666768696768696A68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F70718000000000000000;

-      res1_0 = 256'h85E655D6417A17953363376A624CDE5C76E09589CAC5F811CC4B32C1F20E533A;

-      tc1_1 = 512'h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C0;

-      res1_1 = 256'h248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1;

-      double_block_test(SHA256_MODE, tc1_0, res1_0, tc1_1, res1_1);

-

-      $display("*** Testcases for sha256 functionality completed.");

-    end

-  endtask // sha256_tests

-

-

-

-  //----------------------------------------------------------------

-  // issue_test()

-  //----------------------------------------------------------------

-  task issue_test;

-    reg [511 : 0] block0;

-    reg [511 : 0] block1;

-    reg [511 : 0] block2;

-    reg [511 : 0] block3;

-    reg [511 : 0] block4;

-    reg [511 : 0] block5;

-    reg [511 : 0] block6;

-    reg [511 : 0] block7;

-    reg [511 : 0] block8;

-    reg [255 : 0] expected;

-    begin : issue_test

-      block0 = 512'h6b900001_496e2074_68652061_72656120_6f662049_6f542028_496e7465_726e6574_206f6620_5468696e_6773292c_206d6f72_6520616e_64206d6f_7265626f_6f6d2c20;

-      block1 = 512'h69742068_61732062_65656e20_6120756e_69766572_73616c20_636f6e73_656e7375_73207468_61742064_61746120_69732074_69732061_206e6577_20746563_686e6f6c;

-      block2 = 512'h6f677920_74686174_20696e74_65677261_74657320_64656365_6e747261_6c697a61_74696f6e_2c496e20_74686520_61726561_206f6620_496f5420_28496e74_65726e65;

-      block3 = 512'h74206f66_20546869_6e677329_2c206d6f_72652061_6e64206d_6f726562_6f6f6d2c_20697420_68617320_6265656e_20612075_6e697665_7273616c_20636f6e_73656e73;

-      block4 = 512'h75732074_68617420_64617461_20697320_74697320_61206e65_77207465_63686e6f_6c6f6779_20746861_7420696e_74656772_61746573_20646563_656e7472_616c697a;

-      block5 = 512'h6174696f_6e2c496e_20746865_20617265_61206f66_20496f54_2028496e_7465726e_6574206f_66205468_696e6773_292c206d_6f726520_616e6420_6d6f7265_626f6f6d;

-      block6 = 512'h2c206974_20686173_20626565_6e206120_756e6976_65727361_6c20636f_6e73656e_73757320_74686174_20646174_61206973_20746973_2061206e_65772074_6563686e;

-      block7 = 512'h6f6c6f67_79207468_61742069_6e746567_72617465_73206465_63656e74_72616c69_7a617469_6f6e2c49_6e207468_65206172_6561206f_6620496f_54202849_6e746572;

-      block8 = 512'h6e657420_6f662054_68696e67_73292c20_6d6f7265_20616e64_206d6f72_65800000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_000010e8;

-

-      expected = 256'h7758a30bbdfc9cd92b284b05e9be9ca3d269d3d149e7e82ab4a9ed5e81fbcf9d;

-

-      $display("Running test for 9 block issue.");

-      tc_ctr = tc_ctr + 1;

-      write_block(block0);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_INIT_VALUE));

-      #(2*CLK_PERIOD2);

-      wait_ready();

-

-      write_block(block1);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      tb_sel_clk2=1'b1;

-      wait_ready();

-      

-      write_block(block2);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      wait_ready();

-

-      write_block(block3);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      wait_ready();

-

-      write_block(block4);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      tb_sel_clk2=1'b0;

-      wait_ready();

-

-      write_block(block5);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      wait_ready();

-

-      write_block(block6);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      tb_sel_clk2=1'b1;

-      wait_ready();

-

-      write_block(block7);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      tb_sel_clk2=1'b0;

-      wait_ready();

-

-      write_block(block8);

-      write_word(ADDR_CTRL, (CTRL_MODE_VALUE + CTRL_NEXT_VALUE));

-      #(2*CLK_PERIOD2);

-      wait_ready();

-

-      read_digest();

-      if (digest_data == expected)

-        begin

-          $display("Digest ok.");

-        end

-      else

-        begin

-          $display("ERROR in digest");

-          $display("Expected: 0x%064x", expected);

-          $display("Got:      0x%064x", digest_data);

-          error_ctr = error_ctr + 1;

-        end

-    end

-  endtask // issue_test

-

-

-  //----------------------------------------------------------------

-  // The main test functionality.

-  //----------------------------------------------------------------

-  initial

-    begin : main

-      $display("   -- Testbench for sha256 started --");

-

-      init_sim();

-      reset_dut();

-

-      check_name_version();

-      sha224_tests();

-      sha256_tests();

-      issue_test();

-

-      display_test_result();

-

-      $display("   -- Testbench for sha256 done. --");

-      $finish;

-    end // main

-endmodule // tb_sha256

-

-//======================================================================

-// EOF tb_sha256.v

-//======================================================================

diff --git a/Verilog_Code/top_tukka_proj.v b/Verilog_Code/top_tukka_proj.v
deleted file mode 100644
index ba7fde4..0000000
--- a/Verilog_Code/top_tukka_proj.v
+++ /dev/null
@@ -1,39 +0,0 @@
-module top_tukka_proj (clk1,clk2,reset_n,sel_clk2,cs,we,address,write_data,read_data,error);

-

-input    clk1;      // Clock 1 supposed to be faster

-input    clk2;      // Clock 2  supposed to be slower

-input    reset_n;   // System reset

-input    sel_clk2;  // Select clock2 when high

-//for SHA

-// Control.

-input wire cs;

-input wire we;

-// Data ports.

-input wire  [7 : 0]  address;

-input wire  [31 : 0] write_data;

-output wire [31 : 0] read_data;

-output wire error;

-//output clock

-wire clk1or2;    // Selected clock

-

-//clock mux instintiated

-clock_mux clock_mux0(

-.clk1(clk1),     

-.clk2(clk2),     

-.reset_n(reset_n),  

-.sel_clk2(sel_clk2), 

-.clk1or2(clk1or2)   

-);

-//sha instintiated

-sha256 dut(

-.clk(clk1or2),

-.reset_n(reset_n),

-.cs(cs),

-.we(we),

-.address(address),

-.write_data(write_data),

-.read_data(read_data),

-.error(error)

-);

-

-endmodule