From f5484458a55afbd8e3a68d22b5719866434ff44a Mon Sep 17 00:00:00 2001 From: David Mapstone <david@mapstone.me> Date: Wed, 22 Feb 2023 14:42:20 +0000 Subject: [PATCH] UPdated Port Names on Constructor and deconstructor and wired in hashing stream to wrapper --- hdl/src/wrapper_packet_construct.sv | 35 ++++---- hdl/src/wrapper_packet_deconstruct.sv | 26 +++--- ...op.sv => wrapper_sha256_hashing_stream.sv} | 84 +++++++++++-------- hdl/src/wrapper_vr_loopback.sv | 43 +++------- ...sv => tb_wrapper_sha256_hashing_stream.sv} | 10 +-- hdl/verif/tb_wrapper_vr_loopback.sv | 2 +- 6 files changed, 96 insertions(+), 104 deletions(-) rename hdl/src/{wrapper_top.sv => wrapper_sha256_hashing_stream.sv} (83%) rename hdl/verif/{tb_wrapper_top.sv => tb_wrapper_sha256_hashing_stream.sv} (97%) diff --git a/hdl/src/wrapper_packet_construct.sv b/hdl/src/wrapper_packet_construct.sv index 211b236..487e660 100644 --- a/hdl/src/wrapper_packet_construct.sv +++ b/hdl/src/wrapper_packet_construct.sv @@ -27,10 +27,10 @@ module wrapper_packet_construct #( output logic rready, // Valid/Ready interface - output logic [PACKETWIDTH-1:0] data_out, - output logic data_out_last, - output logic data_out_valid, - input logic data_out_ready + output logic [PACKETWIDTH-1:0] packet_data, + output logic packet_data_last, + output logic packet_data_valid, + input logic packet_data_ready ); // 4KiB of Address Space for Accelerator (11:0) @@ -50,20 +50,20 @@ assign addr_top_bit = (addr[5:2] * 32) - 1 + 32; always_ff @(posedge hclk or negedge hresetn) begin if (~hresetn) begin // Reset Construction Buffer - const_buffer <= {PACKETWIDTH{1'b0}}; + const_buffer <= {PACKETWIDTH{1'b0}}; // Reset Values - data_out_valid <= 1'b0; - data_out_last <= 1'b0; - data_out <= {PACKETWIDTH{1'b0}}; - last_wr_addr <= {ADDRWIDTH{1'b0}}; + packet_data_valid <= 1'b0; + packet_data_last <= 1'b0; + packet_data <= {PACKETWIDTH{1'b0}}; + last_wr_addr <= {ADDRWIDTH{1'b0}}; end else begin // Handshake Output - if (data_out_ready && data_out_valid) begin - data_out_valid <= 1'b0; + if (packet_data_ready && packet_data_valid) begin + packet_data_valid <= 1'b0; end 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 + if (!((packet_data_valid && !packet_data_ready) && (addr[5:2] == 4'hF))) begin // Buffer Address for future Comparison last_wr_addr <= addr; @@ -76,14 +76,14 @@ always_ff @(posedge hclk or negedge hresetn) begin // 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 + packet_data <= {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; + packet_data_last <= (addr[ADDRWIDTH-1:6] == 5'h1F) ? 1'b1 : 1'b0; // Take Valid High - data_out_valid <= 1'b1; + packet_data_valid <= 1'b1; // Reset Construction Buffer - const_buffer <= 512'd0; + const_buffer <= 512'd0; end end end @@ -103,8 +103,7 @@ end // Register Ready Control always_comb begin rready = 1'b1; // Always able to read - may return 0 - // wready = ~((data_out_valid && ~data_out_ready) && (addr[5:2] == 4'hF)); - wready = ~((data_out_valid && ~data_out_ready) && (((addr >> 2) & 11'hF) == 11'hF)); + wready = ~((packet_data_valid && ~packet_data_ready) && (((addr >> 2) & 11'hF) == 11'hF)); end endmodule \ No newline at end of file diff --git a/hdl/src/wrapper_packet_deconstruct.sv b/hdl/src/wrapper_packet_deconstruct.sv index 35edeee..e27af44 100644 --- a/hdl/src/wrapper_packet_deconstruct.sv +++ b/hdl/src/wrapper_packet_deconstruct.sv @@ -27,10 +27,10 @@ module wrapper_packet_deconstruct #( output logic rready, // Valid/Ready interface - input logic [PACKETWIDTH-1:0] data_in, - input logic data_in_last, - input logic data_in_valid, - output logic data_in_ready + input logic [PACKETWIDTH-1:0] packet_data, + input logic packet_data_last, + input logic packet_data_valid, + output logic packet_data_ready ); // Create Deconstruction Buffer @@ -62,28 +62,28 @@ always_ff @(posedge hclk or negedge hresetn) begin // Reset Construction Buffer deconst_buf <= {PACKETWIDTH{1'b0}}; // Reset Values - data_in_ready <= 1'b0; + packet_data_ready <= 1'b0; deconst_buf_valid <= 1'b0; deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}}; end else begin // If ready is low and theres no valid data in buffer, asser ready - if (!data_in_ready && !deconst_buf_valid) begin - data_in_ready <= 1'b1; + if (!packet_data_ready && !deconst_buf_valid) begin + packet_data_ready <= 1'b1; end // Read Packet into Deconstruction Buffer - if (data_in_valid && data_in_ready) begin - data_in_ready <= 1'b0; - deconst_buf <= data_in; + if (packet_data_valid && packet_data_ready) begin + packet_data_ready <= 1'b0; + deconst_buf <= packet_data; deconst_buf_valid <= 1'b1; deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}}; end if (read_en) begin // Register which words in the Deconstruction buffer have been read // Check if All Words have been Read - if (deconst_buf_flag_reduced && !(data_in_valid && data_in_ready)) begin + if (deconst_buf_flag_reduced && !(packet_data_valid && packet_data_ready)) begin // Set Ready High To Get more Data into Buffer deconst_buf_valid <= 1'b0; - data_in_ready <= 1'b1; + packet_data_ready <= 1'b1; end else begin deconst_buf_flag <= deconst_buf_flag | cur_deconst_buf_flag; end @@ -104,7 +104,7 @@ end // Register Ready Control always_comb begin // Not Ready Out when waiting for Valid Data on Input - rready = ~data_in_ready; + rready = ~packet_data_ready; // Write Ready always high but doesn't do anywthing wready = 1'b1; end diff --git a/hdl/src/wrapper_top.sv b/hdl/src/wrapper_sha256_hashing_stream.sv similarity index 83% rename from hdl/src/wrapper_top.sv rename to hdl/src/wrapper_sha256_hashing_stream.sv index 81fd1f7..6c844e9 100644 --- a/hdl/src/wrapper_top.sv +++ b/hdl/src/wrapper_sha256_hashing_stream.sv @@ -1,5 +1,5 @@ //----------------------------------------------------------------------------- -// SoC Labs Basic Top-level Accelerator Wrapper +// SoC Labs Basic Accelerator Wrapper for Hashing Stream // A joint work commissioned on behalf of SoC Labs; under Arm Academic Access license. // // Contributors @@ -39,8 +39,9 @@ `include "wrapper_packet_construct.sv" `include "wrapper_packet_deconstruct.sv" `include "wrapper_ahb_interface.sv" +`include "sha256_hashing_stream.sv" -module wrapper_top #( +module wrapper_sha256_hashing_stream #( parameter ADDRWIDTH=12 // Peripheral Address Width )( input logic HCLK, // Clock @@ -59,8 +60,7 @@ module wrapper_top #( output logic HRESPS, output logic [31:0] HRDATAS ); - - + // ---------------------------------------- // Internal wires declarations @@ -93,22 +93,17 @@ module wrapper_top #( logic output_rready; // Internal Wiring - logic [511:0] packet_data_out; - logic packet_data_out_last; - logic packet_data_out_valid; - logic packet_data_out_ready; + logic [511:0] in_packet; + logic in_packet_last; + logic in_packet_valid; + logic in_packet_ready; // Internal Wiring - logic [511:0] packet_data_in; - logic packet_data_in_last; - logic packet_data_in_valid; - logic packet_data_in_ready; - - // Test Wire Assignments - assign packet_data_in = packet_data_out; - assign packet_data_in_last = packet_data_out_last; - assign packet_data_in_valid = packet_data_out_valid; - assign packet_data_out_ready = packet_data_in_ready; + logic [256:0] out_packet; + logic out_packet_last; + logic out_packet_valid; + logic out_packet_ready; + //----------------------------------------------------------- // Module logic start //---------------------------------------------------------- @@ -173,15 +168,41 @@ module wrapper_top #( .rready (input_rready), // Valid/Ready Interface - .data_out (packet_data_out), - .data_out_last (packet_data_out_last), - .data_out_valid (packet_data_out_valid), - .data_out_ready (packet_data_out_ready) + .packet_data (in_packet), + .packet_data_last (in_packet_last), + .packet_data_valid (in_packet_valid), + .packet_data_ready (in_packet_ready) ); + sha256_hashing_stream u_sha256_hashing_stream ( + .clk (clk), + .nrst (nrst), + .en (1'b1), + .sync_rst (1'b0), + + // Data in Channel + .data_in (in_packet), + .data_in_valid (in_packet_valid), + .data_in_ready (in_packet_ready), + .data_in_last (in_packet_last), + + // Config In Channel + .cfg_size (cfg_size), + .cfg_scheme (cfg_scheme), + .cfg_last (cfg_last), + .cfg_valid (cfg_valid), + .cfg_ready (cfg_ready), + + // Data Out Channel + .data_out (out_packet), + .data_out_last (out_packet_last), + .data_out_valid (out_packet_valid), + .data_out_ready (out_packet_ready) + ); + wrapper_packet_deconstruct #( (ADDRWIDTH - 1), // Only half address map allocated to this device - 512 // Ouptut Packet WIdth + 256 // Ouptut Packet WIdth ) u_wrapper_packet_deconstruct ( .hclk (HCLK), .hresetn (HRESETn), @@ -197,24 +218,15 @@ module wrapper_top #( .rready (output_rready), // Valid/Ready Interface - .data_in (packet_data_in), - .data_in_last (packet_data_in_last), - .data_in_valid (packet_data_in_valid), - .data_in_ready (packet_data_in_ready) + .packet_data (out_packet), + .packet_data_last (out_packet_last), + .packet_data_valid (out_packet_valid), + .packet_data_ready (out_packet_ready) ); //----------------------------------------------------------- //Module logic end //---------------------------------------------------------- - - //--------------------- - //Test Logic - //--------------------- - // assign data_out_ready = 1'b1; - // assign output_wready = 1'b1; - // assign output_rready = 1'b1; - // assign output_wready = 1'b1; - // assign output_rready = 1'b1; `ifdef ARM_AHB_ASSERT_ON `include "std_ovl_defines.h" diff --git a/hdl/src/wrapper_vr_loopback.sv b/hdl/src/wrapper_vr_loopback.sv index f238d79..c178503 100644 --- a/hdl/src/wrapper_vr_loopback.sv +++ b/hdl/src/wrapper_vr_loopback.sv @@ -94,22 +94,11 @@ module wrapper_vr_loopback #( logic output_rready; // Internal Wiring - logic [511:0] packet_data_out; - logic packet_data_out_last; - logic packet_data_out_valid; - logic packet_data_out_ready; + logic [511:0] packet; + logic packet_last; + logic packet_valid; + logic packet_ready; - // Internal Wiring - logic [511:0] packet_data_in; - logic packet_data_in_last; - logic packet_data_in_valid; - logic packet_data_in_ready; - - // Test Wire Assignments - assign packet_data_in = packet_data_out; - assign packet_data_in_last = packet_data_out_last; - assign packet_data_in_valid = packet_data_out_valid; - assign packet_data_out_ready = packet_data_in_ready; //----------------------------------------------------------- // Module logic start //---------------------------------------------------------- @@ -174,10 +163,10 @@ module wrapper_vr_loopback #( .rready (input_rready), // Valid/Ready Interface - .data_out (packet_data_out), - .data_out_last (packet_data_out_last), - .data_out_valid (packet_data_out_valid), - .data_out_ready (packet_data_out_ready) + .packet_data (packet), + .packet_data_last (packet_last), + .packet_data_valid (packet_valid), + .packet_data_ready (packet_ready) ); wrapper_packet_deconstruct #( @@ -198,24 +187,16 @@ module wrapper_vr_loopback #( .rready (output_rready), // Valid/Ready Interface - .data_in (packet_data_in), - .data_in_last (packet_data_in_last), - .data_in_valid (packet_data_in_valid), - .data_in_ready (packet_data_in_ready) + .packet_data (packet), + .packet_data_last (packet_last), + .packet_data_valid (packet_valid), + .packet_data_ready (packet_ready) ); //----------------------------------------------------------- //Module logic end //---------------------------------------------------------- - //--------------------- - //Test Logic - //--------------------- - // assign data_out_ready = 1'b1; - // assign output_wready = 1'b1; - // assign output_rready = 1'b1; - // assign output_wready = 1'b1; - // assign output_rready = 1'b1; `ifdef ARM_AHB_ASSERT_ON `include "std_ovl_defines.h" diff --git a/hdl/verif/tb_wrapper_top.sv b/hdl/verif/tb_wrapper_sha256_hashing_stream.sv similarity index 97% rename from hdl/verif/tb_wrapper_top.sv rename to hdl/verif/tb_wrapper_sha256_hashing_stream.sv index 4e9fe0f..3730176 100644 --- a/hdl/verif/tb_wrapper_top.sv +++ b/hdl/verif/tb_wrapper_sha256_hashing_stream.sv @@ -40,11 +40,11 @@ `include "cmsdk_ahb_fileread_master32.v" `include "cmsdk_ahb_default_slave.v" `include "cmsdk_ahb_slave_mux.v" -`include "wrapper_top.sv" +`include "wrapper_sha256_hashing_stream.sv" `timescale 1ns/1ps -module tb_wrapper_top; +module tb_wrapper_sha256_hashing_stream; parameter CLK_PERIOD = 10; parameter ADDRWIDTH = 12; @@ -94,8 +94,8 @@ reg HRESETn; initial begin - $dumpfile("wrapper_top.vcd"); - $dumpvars(0, tb_wrapper_top); + $dumpfile("wrapper_sha256_hashing_stream.vcd"); + $dumpvars(0, tb_wrapper_sha256_hashing_stream); HRESETn = 1'b0; HCLK = 1'b0; # (10*CLK_PERIOD); @@ -221,7 +221,7 @@ cmsdk_ahb_fileread_master32 #(InputFileName, //******************************************************************************** // Slave module 1: example AHB slave module //******************************************************************************** - wrapper_top #(ADDRWIDTH + wrapper_sha256_hashing_stream #(ADDRWIDTH ) accelerator ( .HCLK (HCLK), .HRESETn (HRESETn), diff --git a/hdl/verif/tb_wrapper_vr_loopback.sv b/hdl/verif/tb_wrapper_vr_loopback.sv index ad81a0e..5e25339 100644 --- a/hdl/verif/tb_wrapper_vr_loopback.sv +++ b/hdl/verif/tb_wrapper_vr_loopback.sv @@ -1,5 +1,5 @@ //----------------------------------------------------------------------------- -// SoC Labs Basic Testbench for Top-level AHB Wrapper +// SoC Labs Basic Testbench for Wrapper Valid-Ready Loopback Test // Modified from tb_frbm_example.v // A joint work commissioned on behalf of SoC Labs; under Arm Academic Access license. // -- GitLab