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
