[Cryptech-Commits] [staging/core/platform/terasic_c5g] 02/20: Adding RTL to build the coretest_hashes subsystem with SHA-1 and SHA-256 cores.

git at cryptech.is git at cryptech.is
Tue Mar 17 13:17:56 UTC 2015


This is an automated email from the git hooks/post-receive script.

paul at psgd.org pushed a commit to branch master
in repository staging/core/platform/terasic_c5g.

commit 6f6ab179f5c2c0f1e74515b38f44b3f1c44a7d3d
Author: Joachim Strömbergson <joachim at secworks.se>
Date:   Thu Mar 13 16:25:20 2014 +0100

    Adding RTL to build the coretest_hashes subsystem with SHA-1 and SHA-256 cores.
---
 src/rtl/coretest_hashes.v | 272 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 272 insertions(+)

diff --git a/src/rtl/coretest_hashes.v b/src/rtl/coretest_hashes.v
new file mode 100644
index 0000000..150f194
--- /dev/null
+++ b/src/rtl/coretest_hashes.v
@@ -0,0 +1,272 @@
+//======================================================================
+//
+// coretest_hashes.v
+// -----------------
+// Top level wrapper that creates the Cryptech coretest system.
+// The wrapper contains instances of external interface, coretest
+// and the core to be tested. And if more than one core is
+// present the wrapper also includes address and data muxes.
+//
+//
+// Author: Joachim Strombergson
+// Copyright (c) 2014 SUNET
+// 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.
+//
+//======================================================================
+
+module coretest_hashes(
+                       input wire          clk,
+                       input wire          reset_n,
+                       
+                       // External interface.
+                       input wire          rxd,
+                       output wire         txd,
+                       
+                       output wire [7 : 0] debug
+                      );
+
+  
+  //----------------------------------------------------------------
+  // Internal constant and parameter definitions.
+  //----------------------------------------------------------------
+  parameter UART_ADDR_PREFIX   = 8'h00;
+  parameter SHA1_ADDR_PREFIX   = 8'h10;
+  parameter SHA256_ADDR_PREFIX = 8'h20;
+  
+  
+  //----------------------------------------------------------------
+  // Wires.
+  //----------------------------------------------------------------
+  // Coretest connections.
+  wire          coretest_reset_n;
+  wire          coretest_cs;
+  wire          coretest_we;
+  wire [15 : 0] coretest_address;
+  wire [31 : 0] coretest_write_data;
+  reg [31 : 0]  coretest_read_data;
+  reg           coretest_error;
+
+  // uart connections
+  wire          uart_rxd_syn;
+  wire [7 : 0]  uart_rxd_data;
+  wire          uart_rxd_ack;
+  wire          uart_txd_syn;
+  wire [7 : 0]  uart_txd_data;
+  wire          uart_txd_ack;
+  reg           uart_cs;
+  reg           uart_we;
+  reg [3 : 0]   uart_address;
+  reg [31 : 0]  uart_write_data;
+  wire [31 : 0] uart_read_data;
+  wire          uart_error;
+  wire [7 : 0]  uart_debug;
+
+  // sha1 connections.
+  reg           sha1_cs;
+  reg           sha1_we;
+  reg [7 : 0]   sha1_address;
+  reg [31 : 0]  sha1_write_data;
+  wire [31 : 0] sha1_read_data;
+  wire          sha1_error;
+  wire [7 : 0]  sha1_debug;
+
+  // sha256 connections.
+  reg           sha256_cs;
+  reg           sha256_we;
+  reg [7 : 0]   sha256_address;
+  reg [31 : 0]  sha256_write_data;
+  wire [31 : 0] sha256_read_data;
+  wire          sha256_error;
+  wire [7 : 0]  sha256_debug;
+  
+  
+  //----------------------------------------------------------------
+  // Concurrent assignment.
+  //----------------------------------------------------------------
+  assign debug = uart_debug;
+  
+  
+  //----------------------------------------------------------------
+  // Core instantiations.
+  //----------------------------------------------------------------
+  coretest coretest(
+                    .clk(clk),
+                    .reset_n(reset_n),
+                         
+                    .rx_syn(uart_rxd_syn),
+                    .rx_data(uart_rxd_data),
+                    .rx_ack(uart_rxd_ack),
+                    
+                    .tx_syn(uart_txd_syn),
+                    .tx_data(uart_txd_data),
+                    .tx_ack(uart_txd_ack),
+                    
+                    // Interface to the core being tested.
+                    .core_reset_n(coretest_reset_n),
+                    .core_cs(coretest_cs),
+                    .core_we(coretest_we),
+                    .core_address(coretest_address),
+                    .core_write_data(coretest_write_data),
+                    .core_read_data(coretest_read_data),
+                    .core_error(coretest_error)
+                   );
+
+
+  uart uart(
+            .clk(clk),
+            .reset_n(reset_n),
+            
+            .rxd(rxd),
+            .txd(txd),
+
+            .rxd_syn(uart_rxd_syn),
+            .rxd_data(uart_rxd_data),
+            .rxd_ack(uart_rxd_ack),
+
+            .txd_syn(uart_txd_syn),
+            .txd_data(uart_txd_data),
+            .txd_ack(uart_txd_ack),
+            
+            .cs(uart_cs),
+            .we(uart_we),
+            .address(uart_address),
+            .write_data(uart_write_data),
+            .read_data(uart_read_data),
+            .error(uart_error),
+
+            .debug(uart_debug)
+           );
+
+  
+  sha1 sha1(
+            // Clock and reset.
+            .clk(clk),
+            .reset_n(reset_n),
+            
+            // Control.
+            .cs(sha1_cs),
+            .we(sha1_we),
+              
+            // Data ports.
+            .address(sha1_address),
+            .write_data(sha1_write_data),
+            .read_data(sha1_read_data),
+            .error(sha1_error)
+           );
+
+  
+  sha256 sha256(
+                // Clock and reset.
+                .clk(clk),
+                .reset_n(reset_n),
+                
+                // Control.
+                .cs(sha256_cs),
+                .we(sha256_we),
+              
+                // Data ports.
+                .address(sha256_address),
+                .write_data(sha256_write_data),
+                .read_data(sha256_read_data),
+                .error(sha256_error)
+               );
+
+  
+  //----------------------------------------------------------------
+  // address_mux
+  //
+  // Combinational data mux that handles addressing between
+  // cores using the 32-bit memory like interface.
+  //----------------------------------------------------------------
+  always @*
+    begin : address_mux
+      // Default assignments.
+      coretest_read_data = 32'h00000000;
+      coretest_error     = 0;
+
+      uart_cs            = 0;
+      uart_we            = 0;
+      uart_address       = 4'h0;
+      uart_write_data    = 32'h00000000;
+
+      sha1_cs            = 0;
+      sha1_we            = 0;
+      sha1_address       = 8'h00;
+      sha1_write_data    = 32'h00000000;
+
+      sha256_cs          = 0;
+      sha256_we          = 0;
+      sha256_address     = 8'h00;
+      sha256_write_data  = 32'h00000000;
+
+
+      case (coretest_address[15 : 8])
+        UART_ADDR_PREFIX:
+          begin
+            uart_cs            = coretest_cs;
+            uart_we            = coretest_we;
+            uart_address       = coretest_address[3 : 0];
+            uart_write_data    = coretest_write_data;
+            coretest_read_data = uart_read_data;
+            coretest_error     = uart_error;
+          end
+
+        
+        SHA1_ADDR_PREFIX:
+          begin
+            sha1_cs            = coretest_cs;
+            sha1_we            = coretest_we;
+            sha1_address       = coretest_address[7 : 0];
+            sha1_write_data    = coretest_write_data;
+            coretest_read_data = sha1_read_data;
+            coretest_error     = sha1_error;
+          end
+
+        
+        SHA256_ADDR_PREFIX:
+          begin
+            sha256_cs          = coretest_cs;
+            sha256_we          = coretest_we;
+            sha256_address     = coretest_address[7 : 0];
+            sha256_write_data  = coretest_write_data;
+            coretest_read_data = sha256_read_data;
+            coretest_error     = sha256_error;
+          end
+        
+        
+        default:
+          begin
+          end
+      endcase // case (coretest_address[15 : 8])
+    end // address_mux
+  
+endmodule // coretest_hashes
+
+//======================================================================
+// EOF coretest_hashes.v
+//======================================================================



More information about the Commits mailing list