diff --git a/hdl/verif/tb_sha256_config_sync.sv b/hdl/verif/tb_sha256_config_sync.sv index b71746637e0945c923d670805ea0954d6ab44530..f8589bcf0e5af9ef53e16dba4284191d4f348473 100644 --- a/hdl/verif/tb_sha256_config_sync.sv +++ b/hdl/verif/tb_sha256_config_sync.sv @@ -272,7 +272,7 @@ module tb_sha256_config_sync; cfg_out_drive_ready = 0; // Read input data into Queue - fd = $fopen("../stimulus/testbench/input_id_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_id_stim.csv", "r"); while ($fscanf (fd, "%d,%b,%d", temp_id_in, temp_id_in_last, temp_id_in_gap) == 3) begin id_in_queue.push_back(temp_id_in); id_in_last_queue.push_back(temp_id_in_last); @@ -281,7 +281,7 @@ module tb_sha256_config_sync; $fclose(fd); // Read input cfg into Queue - fd = $fopen("../stimulus/testbench/input_cfg_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_cfg_stim.csv", "r"); while ($fscanf (fd, "%x,%x,%b,%d", temp_cfg_in_size, temp_cfg_in_scheme, temp_cfg_in_last, temp_cfg_in_gap) == 4) begin cfg_in_size_queue.push_back(temp_cfg_in_size); cfg_in_scheme_queue.push_back(temp_cfg_in_scheme); @@ -291,7 +291,7 @@ module tb_sha256_config_sync; $fclose(fd); // Read output data into Queue - fd = $fopen("../stimulus/testbench/output_cfg_sync_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_cfg_sync_ref.csv", "r"); while ($fscanf (fd, "%x,%x,%d,%b,%d", temp_cfg_out_size, temp_cfg_out_scheme, temp_cfg_out_id, temp_cfg_out_last, temp_cfg_out_stall) == 5) begin cfg_out_size_queue.push_back(temp_cfg_out_size); cfg_out_scheme_queue.push_back(temp_cfg_out_scheme); diff --git a/hdl/verif/tb_sha256_engine.sv b/hdl/verif/tb_sha256_engine.sv index 7b00a73980c2102f90e97c98d08b263b4a74ad68..585a494c655587cc46e39a704464bb166780ce33 100644 --- a/hdl/verif/tb_sha256_engine.sv +++ b/hdl/verif/tb_sha256_engine.sv @@ -296,7 +296,7 @@ module tb_sha256_engine; data_out_drive_ready = 0; // Read input data into Queue - fd = $fopen("../stimulus/testbench/input_data_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_data_stim.csv", "r"); while ($fscanf (fd, "%x,%b,%d", input_data, input_data_last, input_data_gap) == 3) begin data_in_queue.push_back(input_data); data_in_last_queue.push_back(input_data_last); @@ -305,7 +305,7 @@ module tb_sha256_engine; $fclose(fd); // Read input cfg into Queue - fd = $fopen("../stimulus/testbench/input_cfg_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_cfg_stim.csv", "r"); while ($fscanf (fd, "%x,%x,%b,%d", input_cfg_size, input_cfg_scheme, input_cfg_last, input_cfg_gap) == 4) begin cfg_size_queue.push_back(input_cfg_size); cfg_scheme_queue.push_back(input_cfg_scheme); @@ -315,7 +315,7 @@ module tb_sha256_engine; $fclose(fd); // Read output data into Queue - fd = $fopen("../stimulus/testbench/output_hash_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_hash_ref.csv", "r"); while ($fscanf (fd, "%x,%b,%d", output_data, output_data_last, output_data_stall) == 3) begin data_out_queue.push_back(output_data); data_out_last_queue.push_back(output_data_last); @@ -324,7 +324,7 @@ module tb_sha256_engine; $fclose(fd); // Read Message Block data into Queue - fd = $fopen("../stimulus/testbench/output_message_block_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_message_block_ref.csv", "r"); while ($fscanf (fd, "%x,%b,%d", message_block_data, message_block_data_last, message_block_stall) == 3) begin message_block_queue.push_back(message_block_data); message_block_last_queue.push_back(message_block_data_last); diff --git a/hdl/verif/tb_sha256_hash_compression.sv b/hdl/verif/tb_sha256_hash_compression.sv index 3b441ab73915f6da861af533a5f37fc50ea6d281..7315a15f8567e7bb3c5bf98dfde6b872510d673d 100644 --- a/hdl/verif/tb_sha256_hash_compression.sv +++ b/hdl/verif/tb_sha256_hash_compression.sv @@ -204,7 +204,7 @@ module tb_sha256_hash_compression; data_out_drive_ready = 0; // Read input data into Queue - fd = $fopen("../stimulus/testbench/input_message_block_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_message_block_stim.csv", "r"); while ($fscanf (fd, "%x,%d,%b,%d", temp_data_in, temp_data_in_id, temp_data_in_last, temp_data_in_gap) == 4) begin data_in_queue.push_back(temp_data_in); data_in_id_queue.push_back(temp_data_in_id); @@ -214,7 +214,7 @@ module tb_sha256_hash_compression; $fclose(fd); // Read output data into Queue - fd = $fopen("../stimulus/testbench/output_hash_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_hash_ref.csv", "r"); while ($fscanf (fd, "%x,%d,%b,%d", temp_data_out, temp_data_out_id, temp_data_out_last, temp_data_out_stall) == 4) begin data_out_queue.push_back(temp_data_out); data_out_id_queue.push_back(temp_data_out_id); diff --git a/hdl/verif/tb_sha256_id_buf.sv b/hdl/verif/tb_sha256_id_buf.sv index 85569290f47677a62f5265ce4f95ec3c3425a41e..640b7aba2c343a22edbb04489fa83050a20ebb8e 100644 --- a/hdl/verif/tb_sha256_id_buf.sv +++ b/hdl/verif/tb_sha256_id_buf.sv @@ -207,7 +207,7 @@ module tb_sha256_id_buf; id_out_drive_ready = 0; // Read input data into Queue in - fd = $fopen("../stimulus/testbench/input_buf_id_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_buf_id_stim.csv", "r"); while ($fscanf (fd, "%d,%b,%d", temp_id_in, temp_id_in_last, temp_id_in_gap) == 3) begin id_in_queue.push_back(temp_id_in); id_in_last_queue.push_back(temp_id_in_last); @@ -216,7 +216,7 @@ module tb_sha256_id_buf; $fclose(fd); // Read output data into Queue - fd = $fopen("../stimulus/testbench/output_buf_id_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_buf_id_ref.csv", "r"); while ($fscanf (fd, "%d,%b,%d,%d", temp_id_out, temp_id_out_last, temp_status_id_out, temp_id_out_stall) == 4) begin id_out_queue.push_back(temp_id_out); id_out_last_queue.push_back(temp_id_out_last); diff --git a/hdl/verif/tb_sha256_id_issue.sv b/hdl/verif/tb_sha256_id_issue.sv index 124e77e9bf0947d0ff0314a2b33f9cf7da9a0ec7..7121f3d62c5b1baef91414521592452afa75063b 100644 --- a/hdl/verif/tb_sha256_id_issue.sv +++ b/hdl/verif/tb_sha256_id_issue.sv @@ -192,7 +192,7 @@ module tb_sha256_id_issue; id_out_buf_drive_ready = 0; // Read output cfg data into Queue - fd = $fopen("../stimulus/testbench/output_id_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_id_ref.csv", "r"); while ($fscanf (fd, "%d,%b,%d", id_cfg_data, id_cfg_last, id_cfg_stall) == 3) begin id_out_cfg_queue.push_back(id_cfg_data); id_out_cfg_last_queue.push_back(id_cfg_last); @@ -201,7 +201,7 @@ module tb_sha256_id_issue; $fclose(fd); // Read output buf data into Queue - fd = $fopen("../stimulus/testbench/output_id_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_id_ref.csv", "r"); while ($fscanf (fd, "%d,%b,%d", id_buf_data, id_buf_last, id_buf_stall) == 3) begin id_out_buf_queue.push_back(id_buf_data); id_out_buf_last_queue.push_back(id_buf_last); diff --git a/hdl/verif/tb_sha256_id_validator.sv b/hdl/verif/tb_sha256_id_validator.sv index 15df193b64395cd0ee7392f90bf2aa79bb14a64e..39e17390369eaf87117eff0bbfbe8855595e3555 100644 --- a/hdl/verif/tb_sha256_id_validator.sv +++ b/hdl/verif/tb_sha256_id_validator.sv @@ -281,7 +281,7 @@ module tb_sha256_id_validator; hash_out_drive_ready = 0; // Read input data into Queuein - fd = $fopen("../stimulus/testbench/input_validator_id_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_validator_id_stim.csv", "r"); while ($fscanf (fd, "%d,%b,%d", temp_id_in_buf, temp_id_in_buf_last, temp_id_in_buf_gap) == 3) begin id_in_buf_queue.push_back(temp_id_in_buf); id_in_buf_last_queue.push_back(temp_id_in_buf_last); @@ -290,7 +290,7 @@ module tb_sha256_id_validator; $fclose(fd); // Read input cfg into Queue - fd = $fopen("../stimulus/testbench/input_hash_in_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_hash_in_stim.csv", "r"); while ($fscanf (fd, "%x,%d,%b,%d", temp_hash_in, temp_hash_in_id, temp_hash_in_last, temp_hash_in_gap) == 4) begin hash_in_queue.push_back(temp_hash_in); hash_in_id_queue.push_back(temp_hash_in_id); @@ -300,7 +300,7 @@ module tb_sha256_id_validator; $fclose(fd); // Read output data into Queue - fd = $fopen("../stimulus/testbench/output_hash_out_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_hash_out_ref.csv", "r"); while ($fscanf (fd, "%x,%b,%b,%d", temp_hash_out, temp_hash_out_err, temp_hash_out_last, temp_hash_out_stall) == 4) begin hash_out_queue.push_back(temp_hash_out); hash_out_err_queue.push_back(temp_hash_out_err); diff --git a/hdl/verif/tb_sha256_message_build.sv b/hdl/verif/tb_sha256_message_build.sv index f45c52d236c040eae7057dcc1a4437b82bcc35a8..b6d66c2d180fadd723e00f2821c63217ed137f35 100644 --- a/hdl/verif/tb_sha256_message_build.sv +++ b/hdl/verif/tb_sha256_message_build.sv @@ -263,7 +263,7 @@ module tb_sha256_message_build; data_out_drive_ready = 0; // Read input data into Queue - fd = $fopen("../stimulus/testbench/input_data_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_data_stim.csv", "r"); while ($fscanf (fd, "%x,%b,%d", temp_data_in, temp_data_in_last, temp_data_in_gap) == 3) begin data_in_queue.push_back(temp_data_in); data_in_last_queue.push_back(temp_data_in_last); @@ -272,7 +272,7 @@ module tb_sha256_message_build; $fclose(fd); // Read input cfg into Queue - fd = $fopen("../stimulus/testbench/input_cfg_sync_stim.csv", "r"); + fd = $fopen("../stimulus/unit/input_cfg_sync_stim.csv", "r"); while ($fscanf (fd, "%x,%x,%d,%b,%d", temp_cfg_in_size, temp_cfg_in_scheme, temp_cfg_in_id, temp_cfg_in_last, temp_cfg_in_gap) == 5) begin cfg_size_queue.push_back(temp_cfg_in_size); cfg_scheme_queue.push_back(temp_cfg_in_scheme); @@ -283,7 +283,7 @@ module tb_sha256_message_build; $fclose(fd); // Read output data into Queue - fd = $fopen("../stimulus/testbench/output_message_block_ref.csv", "r"); + fd = $fopen("../stimulus/unit/output_message_block_ref.csv", "r"); while ($fscanf (fd, "%x,%d,%b,%d", temp_data_out, temp_data_out_id, temp_data_out_last, temp_data_out_stall) == 4) begin data_out_queue.push_back(temp_data_out); data_out_id_queue.push_back(temp_data_out_id); diff --git a/hdl/wrapper/packet_const.sv b/hdl/wrapper/packet_const.sv new file mode 100644 index 0000000000000000000000000000000000000000..16256b88ca3f4d934703cef1d3e3a416f4b4a87b --- /dev/null +++ b/hdl/wrapper/packet_const.sv @@ -0,0 +1,84 @@ +module packet_const #( + parameter PACKETWIDTH=512, + parameter ADDRWIDTH=11 +)( + input logic hclk, // clock + input logic hresetn, // reset + + //Register interface + input logic [ADDRWIDTH-1:0] addr, + input logic read_en, + input logic write_en, + input logic [3:0] byte_strobe, + input logic [31:0] wdata, + output logic [31:0] rdata, + + output logic [PACKETWIDTH-1:0] data_out, + output logic data_out_last, + output logic data_out_valid, + input logic data_out_ready +); + +// 4KiB of Address Space for Accelerator (11:0) +// Capture Address to be used for comparision to test for address jumping +logic [ADDRWIDTH-1:0] last_wr_addr; +// Create Construction Buffer +logic [PACKETWIDTH-1:0] const_buffer; +logic const_buffer_last; + +logic [ADDRWIDTH-1:0] addr_top_bit; +assign addr_top_bit = (addr[5:2] * 32) - 1; + +// Dump data on one of two conditions +// - An address ends [5:0] in 0x3C i.e. [5:2] == 0xF +// - Address Moved to different 512 bit word +// Write Condition +always_ff @(posedge hclk or negedge hresetn) begin + if (~hresetn) begin + // Reset Construction Buffer + const_buffer <= {PACKETWIDTH{1'b0}}; + end else begin + if (write_en) begin + // If not (awaiting handshake AND address generates new data payload) + if (!((data_out_valid && !data_out_ready) && (addr[5:2] == 4'hF))) begin + // Buffer Address for future Comparison + last_wr_addr <= addr; + + // If 512 Word Address Changed, Clear Buffer + if (last_wr_addr[ADDRWIDTH-1:6] != addr [ADDRWIDTH-1:6]) const_buffer <= {PACKETWIDTH{1'b0}}; + + // Write Word into Construction Buffer + const_buffer[addr_top_bit -: 32] <= wdata; + + // If last 32 bit word of 512 bit buffer + if (addr[5:2] == 4'hF) begin + // Produce Data Output + data_out <= {wdata,const_buffer[479:0]}; // Top word won't be in const_buffer + // - until next cycle to splice it in to out data combinatorially + // Calculate Last Flag + data_out_last <= (addr[ADDRWIDTH-1:6] == 5'h1F) ? 1'b1 : 1'b0; + // Take Valid High + data_out_valid <= 1'b1; + // Reset Construction Buffer + const_buffer <= 512'd0; + end + end else begin + // TODO: Implement Error Propogation/Waitstates + end + end + end +end + +// Read Condition +always_comb begin + if (read_en) begin + // Read appropriate 32 bits from buffer + // + rdata = const_buffer[addr_top_bit -: 32]; + end else begin + rdata = 32'd0; + end +end + + +endmodule \ No newline at end of file diff --git a/hdl/wrapper/wrap_sha256_hash_compression.sv b/hdl/wrapper/wrap_sha256_hash_compression.sv new file mode 100644 index 0000000000000000000000000000000000000000..ef65f128eb00617b09bd7a702c72cea473cf10fb --- /dev/null +++ b/hdl/wrapper/wrap_sha256_hash_compression.sv @@ -0,0 +1,261 @@ +//----------------------------------------------------------------------------- +// SoC Labs Basic SHA-2 Hash Compression AHB Wrapper +// A joint work commissioned on behalf of SoC Labs; under Arm Academic Access license. +// +// Contributors +// +// David Mapstone (d.a.mapstone@soton.ac.uk) +// +// Copyright 2023; SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// The confidential and proprietary information contained in this file may +// only be used by a person authorised under and to the extent permitted +// by a subsisting licensing agreement from Arm Limited or its affiliates. +// +// (C) COPYRIGHT 2010-2011 Arm Limited or its affiliates. +// ALL RIGHTS RESERVED +// +// This entire notice must be reproduced on all copies of this file +// and copies of this file may only be made by a person if such person is +// permitted to do so under the terms of a subsisting license agreement +// from Arm Limited or its affiliates. +// +// SVN Information +// +// Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +// +// Revision : $Revision: 371321 $ +// +// Release Information : Cortex-M System Design Kit-r1p1-00rel0 +// +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : AHB-lite example slave, support 4 32-bit register read and write, +// each register can be accessed by byte, half word or word. +// The example slave always output ready and OKAY response to the master +//----------------------------------------------------------------------------- +`timescale 1ns/1ns +`include "reg_to_512_vr.sv" +`include "fifo_vr.sv" + +module wrap_sha256_hash_compression #( + // Parameter for address width + parameter ADDRWIDTH=12) // Peripheral Address Width + ( + input wire HCLK, // Clock + input wire HRESETn, // Reset + + // AHB connection to master + input wire HSELS, + input wire [ADDRWIDTH-1:0] HADDRS, + input wire [1:0] HTRANSS, + input wire [2:0] HSIZES, + input wire HWRITES, + input wire HREADYS, + input wire [31:0] HWDATAS, + + output wire HREADYOUTS, + output wire HRESPS, + output wire [31:0] HRDATAS); + + + // ---------------------------------------- + // Internal wires declarations + + // Register module interface signals + wire [ADDRWIDTH-1:0] in_buf_addr; + wire in_buf_read_en; + wire in_buf_write_en; + wire [3:0] in_buf_byte_strobe; + wire [31:0] in_buf_wdata; + wire [31:0] in_buf_rdata; + + //----------------------------------------------------------- + // Module logic start + //---------------------------------------------------------- + + // Interface block to convert AHB transfers to simple read/write + // controls. + cmsdk_ahb_eg_slave_interface + #(.ADDRWIDTH (ADDRWIDTH)) + u_ahb_eg_slave_interface ( + .hclk (HCLK), + .hresetn (HRESETn), + + // Input slave port: 32 bit data bus interface + .hsels (HSELS), + .haddrs (HADDRS), + .htranss (HTRANSS), + .hsizes (HSIZES), + .hwrites (HWRITES), + .hreadys (HREADYS), + .hwdatas (HWDATAS), + + .hreadyouts (HREADYOUTS), + .hresps (HRESPS), + .hrdatas (HRDATAS), + + // Register interface + .addr (in_buf_addr), + .read_en (in_buf_read_en), + .write_en (in_buf_write_en), + .byte_strobe (in_buf_byte_strobe), + .wdata (in_buf_wdata), + .rdata (in_buf_rdata) + ); + + reg_to_512_vr + #(.ADDRWIDTH (ADDRWIDTH)) + u_reg_to_512_vr ( + .hclk (HCLK), + .hresetn (HRESETn), + + // Register interface + .addr (in_buf_addr), + .read_en (in_buf_read_en), + .write_en (in_buf_write_en), + .byte_strobe (in_buf_byte_strobe), + .wdata (in_buf_wdata), + .rdata (in_buf_rdata) + ); + cmsdk_ahb_eg_slave_interface + #(.ADDRWIDTH (ADDRWIDTH)) + u_ahb_eg_slave_interface ( + .hclk (HCLK), + .hresetn (HRESETn), + + // Input slave port: 32 bit data bus interface + .hsels (HSELS), + .haddrs (HADDRS), + .htranss (HTRANSS), + .hsizes (HSIZES), + .hwrites (HWRITES), + .hreadys (HREADYS), + .hwdatas (HWDATAS), + + .hreadyouts (HREADYOUTS), + .hresps (HRESPS), + .hrdatas (HRDATAS), + + // Register interface + .addr (reg_addr), + .read_en (reg_read_en), + .write_en (reg_write_en), + .byte_strobe (reg_byte_strobe), + .wdata (reg_wdata), + .rdata (reg_rdata) + ); + + // Simple data register block with four 32-bit registers + cmsdk_ahb_eg_slave_reg + #(.ADDRWIDTH (ADDRWIDTH)) + u_ahb_eg_slave_reg ( + + .hclk (HCLK), + .hresetn (HRESETn), + + // Register interface + .addr (reg_addr), + .read_en (reg_read_en), + .write_en (reg_write_en), + .byte_strobe (reg_byte_strobe), + .wdata (reg_wdata), + .ecorevnum (ECOREVNUM), + .rdata (reg_rdata) + + ); + + //----------------------------------------------------------- + //Module logic end + //---------------------------------------------------------- +`ifdef ARM_AHB_ASSERT_ON + + `include "std_ovl_defines.h" + // ------------------------------------------------------------ + // Assertions + // ------------------------------------------------------------ + + wire ovl_trans_req = HREADYS & HSELS & HTRANSS[1]; + + // Check the reg_write_en signal generated + assert_next + #(`OVL_ERROR, 1,1,0, + `OVL_ASSERT, + "Error! register write signal was not generated! " + ) + u_ovl_ahb_eg_slave_reg_write + (.clk ( HCLK ), + .reset_n (HRESETn), + .start_event ((ovl_trans_req & HWRITES)), + .test_expr (reg_write_en == 1'b1) + ); + + + // Check the reg_read_en signal generated + assert_next + #(`OVL_ERROR, 1,1,0, + `OVL_ASSERT, + "Error! register read signal was not generated! " + ) + u_ovl_ahb_eg_slave_reg_read + (.clk ( HCLK ), + .reset_n (HRESETn), + .start_event ((ovl_trans_req & (~HWRITES))), + .test_expr (reg_read_en == 1'b1) + ); + + + + // Check register read and write operation won't assert at the same cycle + assert_never + #(`OVL_ERROR, + `OVL_ASSERT, + "Error! register read and write active at the same cycle!") + u_ovl_ahb_eg_slave_rd_wr_illegal + (.clk(HCLK), + .reset_n(HRESETn), + .test_expr((reg_write_en & reg_read_en)) + ); + +`endif + +endmodule + + + + // Data In data and Handshaking + logic [511:0] engine_data_in; + logic [5:0] engine_data_in_id; + logic engine_data_in_last; + logic enigne_data_in_valid; + logic enigne_data_in_ready; + + // Data Out data and Handshaking + logic [255:0] engine_data_out; + logic [5:0] engine_data_out_id; + logic engine_data_out_last; + logic engine_data_out_valid; + logic engine_data_out_ready; + + // Input Buffer + fifo_vr #(16, // Depth + 512 // Data Width + ) data_in_buffer ( + .clk (clk), + .nrst (nrst), + .en (en), + .sync_rst (sync_rst), + .data_in (data_in), + .data_in_valid (data_in_valid), + .data_in_ready (data_in_ready), + .data_in_last (data_in_last), + .data_out (data_in_buffered), + .data_out_last (data_in_last_buffered), + .data_out_valid (data_in_valid_buffered), + .data_out_ready (data_in_ready_buffered) + ); + + // Input Word Combiner + +endmodule \ No newline at end of file diff --git a/model/py/hash_model.py b/model/py/hash_model.py index a8decd76a7df91be685b21183c41f2b3c066c26e..ce88343708093bf89d870404d0b933b1413901b9 100644 --- a/model/py/hash_model.py +++ b/model/py/hash_model.py @@ -252,49 +252,49 @@ def main(): # Write out Input ID Seed to Text File input_header = ["id_value", "last", "gap_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_id_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_id_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(expected_id_list): writer.writerow([expected_id_list[idx], "1", id_gap_list[idx]]) # Write out Buffer Input ID to Text File input_header = ["id_value", "last", "gap_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_buf_id_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_buf_id_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(id_buf_id_list): writer.writerow([id_buf_id_list[idx], "1", id_gap_list[idx]]) # Write out Input Validator ID Seed to Text File input_header = ["id_value", "last", "gap_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_validator_id_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_validator_id_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(id_validator_buf_list): writer.writerow([id_validator_buf_list[idx], "1", id_gap_list[idx]]) # Write out Output ID Values to Text File input_header = ["expected_id_value, id_last, stall_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_id_ref.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "output_id_ref.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(expected_id_list): writer.writerow([word, "1", expected_id_stall_list[idx]]) # Write out Output ID Values to Text File input_header = ["expected_id_value, id_last, status_id, stall_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_buf_id_ref.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "output_buf_id_ref.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(id_buf_id_list): writer.writerow([word, "1", word, expected_id_stall_list[idx]]) # Write out Input Data Stimulus to Text File input_header = ["input_data", "input_data_last", "gap_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_data_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_data_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(in_data_words_list): writer.writerow(["{0:x}".format(int(word, 2)), in_data_words_last_list[idx], in_data_words_gap_list[idx]]) # Write out Input Data 32bit AHB Stimulus to Text File input_header = ["input_data_32word", "input_data_32word_last", "input_data_last"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_data_32bit_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/system/" + "input_data_32bit_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(in_data_words_list): sub_word_count = 0 @@ -308,49 +308,49 @@ def main(): # Write out Cfg Stimulus to Text File input_header = ["input_cfg_size", "input_cfg_scheme", "input_cfg_last"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_cfg_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_cfg_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(in_cfg_words_list): writer.writerow(["{0:x}".format(int(word, 2)), "0", "1", in_cfg_words_gap_list[idx]]) # Write out Cfg Stimulus to Text File input_header = ["input_cfg_size", "input_cfg_scheme", "input_cfg_id", "input_cfg_last", "gap_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_cfg_sync_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_cfg_sync_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(in_cfg_words_list): writer.writerow(["{0:x}".format(int(word, 2)), "0", expected_id_list[idx] ,"1", in_cfg_words_gap_list[idx]]) # Write out Cfg sync reference to Text File input_header = ["output_cfg_size", "output_cfg_scheme", "output_cfg_id", "output_cfg_last", "stall_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_cfg_sync_ref.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "output_cfg_sync_ref.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(sync_cfg_size_list): writer.writerow(["{0:x}".format(int(word, 2)), "0", sync_cfg_id_list[idx], "1", sync_cfg_stall_list[idx]]) # Write out Expected output to text file output_header = ["output_data", "output_data_id", "output_data_last", "stall_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_message_block_ref.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "output_message_block_ref.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(message_block_list): writer.writerow(["{0:x}".format(int(word, 2)), message_block_id_list[idx], message_block_last_list[idx], message_block_stall_list[idx]]) # Write out Message Block (Input) to text file output_header = ["message_block_data", "message_block_id", "message_block_data_last", "gap_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_message_block_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_message_block_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(message_block_list): writer.writerow(["{0:x}".format(int(word, 2)), message_block_id_list[idx], message_block_last_list[idx], message_block_gap_list[idx]]) # Write out hash value to text file output_header = ["output_data", "output_id", "output_data_last", "stall_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_hash_ref.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "output_hash_ref.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(hash_list): writer.writerow([word, expected_id_list[idx], "1", hash_stall_list[idx]]) # Write out hash value to text file output_header = ["output_data", "output_sub_word_last", "output_data_last"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_hash_32bit_ref.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/system/" + "output_hash_32bit_ref.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(hash_list): sub_word_count = 0 @@ -364,14 +364,14 @@ def main(): # Write out Validator Hash Input to text file output_header = ["hash_in", "hash_in_id", "hash_last", "gap_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "input_hash_in_stim.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "input_hash_in_stim.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(hash_list): writer.writerow([word, id_validator_hash_list[idx], "1", hash_gap_list[idx]]) # Write out hash out (include error) value to text file output_header = ["hash", "hash_err", "hash_last", "stall_value"] - with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/testbench/" + "output_hash_out_ref.csv", "w", encoding="UTF8", newline='') as f: + with open(os.environ["SHA_2_ACC_DIR"] + "/simulate/stimulus/unit/" + "output_hash_out_ref.csv", "w", encoding="UTF8", newline='') as f: writer = csv.writer(f) for idx, word in enumerate(val_hash_list): writer.writerow([word, hash_err_list[idx], "1", hash_stall_list[idx]]) diff --git a/simulate/stimulus/testbench/input_data_32bit_stim.csv b/simulate/stimulus/system/input_data_32bit_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_data_32bit_stim.csv rename to simulate/stimulus/system/input_data_32bit_stim.csv diff --git a/simulate/stimulus/testbench/output_hash_32bit_ref.csv b/simulate/stimulus/system/output_hash_32bit_ref.csv similarity index 100% rename from simulate/stimulus/testbench/output_hash_32bit_ref.csv rename to simulate/stimulus/system/output_hash_32bit_ref.csv diff --git a/simulate/stimulus/testbench/input_buf_id_stim.csv b/simulate/stimulus/unit/input_buf_id_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_buf_id_stim.csv rename to simulate/stimulus/unit/input_buf_id_stim.csv diff --git a/simulate/stimulus/testbench/input_cfg_stim.csv b/simulate/stimulus/unit/input_cfg_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_cfg_stim.csv rename to simulate/stimulus/unit/input_cfg_stim.csv diff --git a/simulate/stimulus/testbench/input_cfg_sync_stim.csv b/simulate/stimulus/unit/input_cfg_sync_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_cfg_sync_stim.csv rename to simulate/stimulus/unit/input_cfg_sync_stim.csv diff --git a/simulate/stimulus/testbench/input_data_stim.csv b/simulate/stimulus/unit/input_data_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_data_stim.csv rename to simulate/stimulus/unit/input_data_stim.csv diff --git a/simulate/stimulus/testbench/input_hash_in_stim.csv b/simulate/stimulus/unit/input_hash_in_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_hash_in_stim.csv rename to simulate/stimulus/unit/input_hash_in_stim.csv diff --git a/simulate/stimulus/testbench/input_id_stim.csv b/simulate/stimulus/unit/input_id_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_id_stim.csv rename to simulate/stimulus/unit/input_id_stim.csv diff --git a/simulate/stimulus/testbench/input_message_block_stim.csv b/simulate/stimulus/unit/input_message_block_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_message_block_stim.csv rename to simulate/stimulus/unit/input_message_block_stim.csv diff --git a/simulate/stimulus/testbench/input_validator_id_stim.csv b/simulate/stimulus/unit/input_validator_id_stim.csv similarity index 100% rename from simulate/stimulus/testbench/input_validator_id_stim.csv rename to simulate/stimulus/unit/input_validator_id_stim.csv diff --git a/simulate/stimulus/testbench/output_buf_id_ref.csv b/simulate/stimulus/unit/output_buf_id_ref.csv similarity index 100% rename from simulate/stimulus/testbench/output_buf_id_ref.csv rename to simulate/stimulus/unit/output_buf_id_ref.csv diff --git a/simulate/stimulus/testbench/output_cfg_sync_ref.csv b/simulate/stimulus/unit/output_cfg_sync_ref.csv similarity index 100% rename from simulate/stimulus/testbench/output_cfg_sync_ref.csv rename to simulate/stimulus/unit/output_cfg_sync_ref.csv diff --git a/simulate/stimulus/testbench/output_hash_out_ref.csv b/simulate/stimulus/unit/output_hash_out_ref.csv similarity index 100% rename from simulate/stimulus/testbench/output_hash_out_ref.csv rename to simulate/stimulus/unit/output_hash_out_ref.csv diff --git a/simulate/stimulus/testbench/output_hash_ref.csv b/simulate/stimulus/unit/output_hash_ref.csv similarity index 100% rename from simulate/stimulus/testbench/output_hash_ref.csv rename to simulate/stimulus/unit/output_hash_ref.csv diff --git a/simulate/stimulus/testbench/output_id_ref.csv b/simulate/stimulus/unit/output_id_ref.csv similarity index 100% rename from simulate/stimulus/testbench/output_id_ref.csv rename to simulate/stimulus/unit/output_id_ref.csv diff --git a/simulate/stimulus/testbench/output_message_block_ref.csv b/simulate/stimulus/unit/output_message_block_ref.csv similarity index 100% rename from simulate/stimulus/testbench/output_message_block_ref.csv rename to simulate/stimulus/unit/output_message_block_ref.csv