Skip to content
Snippets Groups Projects
Commit f5484458 authored by David Mapstone's avatar David Mapstone
Browse files

UPdated Port Names on Constructor and deconstructor and wired in hashing stream to wrapper

parent b481897a
Branches
No related tags found
No related merge requests found
...@@ -27,10 +27,10 @@ module wrapper_packet_construct #( ...@@ -27,10 +27,10 @@ module wrapper_packet_construct #(
output logic rready, output logic rready,
// Valid/Ready interface // Valid/Ready interface
output logic [PACKETWIDTH-1:0] data_out, output logic [PACKETWIDTH-1:0] packet_data,
output logic data_out_last, output logic packet_data_last,
output logic data_out_valid, output logic packet_data_valid,
input logic data_out_ready input logic packet_data_ready
); );
// 4KiB of Address Space for Accelerator (11:0) // 4KiB of Address Space for Accelerator (11:0)
...@@ -50,20 +50,20 @@ assign addr_top_bit = (addr[5:2] * 32) - 1 + 32; ...@@ -50,20 +50,20 @@ assign addr_top_bit = (addr[5:2] * 32) - 1 + 32;
always_ff @(posedge hclk or negedge hresetn) begin always_ff @(posedge hclk or negedge hresetn) begin
if (~hresetn) begin if (~hresetn) begin
// Reset Construction Buffer // Reset Construction Buffer
const_buffer <= {PACKETWIDTH{1'b0}}; const_buffer <= {PACKETWIDTH{1'b0}};
// Reset Values // Reset Values
data_out_valid <= 1'b0; packet_data_valid <= 1'b0;
data_out_last <= 1'b0; packet_data_last <= 1'b0;
data_out <= {PACKETWIDTH{1'b0}}; packet_data <= {PACKETWIDTH{1'b0}};
last_wr_addr <= {ADDRWIDTH{1'b0}}; last_wr_addr <= {ADDRWIDTH{1'b0}};
end else begin end else begin
// Handshake Output // Handshake Output
if (data_out_ready && data_out_valid) begin if (packet_data_ready && packet_data_valid) begin
data_out_valid <= 1'b0; packet_data_valid <= 1'b0;
end end
if (write_en) begin if (write_en) begin
// If not (awaiting handshake AND address generates new data payload) // 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 // Buffer Address for future Comparison
last_wr_addr <= addr; last_wr_addr <= addr;
...@@ -76,14 +76,14 @@ always_ff @(posedge hclk or negedge hresetn) begin ...@@ -76,14 +76,14 @@ always_ff @(posedge hclk or negedge hresetn) begin
// If last 32 bit word of 512 bit buffer // If last 32 bit word of 512 bit buffer
if (addr[5:2] == 4'hF) begin if (addr[5:2] == 4'hF) begin
// Produce Data Output // 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 // - until next cycle to splice it in to out data combinatorially
// Calculate Last Flag // 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 // Take Valid High
data_out_valid <= 1'b1; packet_data_valid <= 1'b1;
// Reset Construction Buffer // Reset Construction Buffer
const_buffer <= 512'd0; const_buffer <= 512'd0;
end end
end end
end end
...@@ -103,8 +103,7 @@ end ...@@ -103,8 +103,7 @@ end
// Register Ready Control // Register Ready Control
always_comb begin always_comb begin
rready = 1'b1; // Always able to read - may return 0 rready = 1'b1; // Always able to read - may return 0
// wready = ~((data_out_valid && ~data_out_ready) && (addr[5:2] == 4'hF)); wready = ~((packet_data_valid && ~packet_data_ready) && (((addr >> 2) & 11'hF) == 11'hF));
wready = ~((data_out_valid && ~data_out_ready) && (((addr >> 2) & 11'hF) == 11'hF));
end end
endmodule endmodule
\ No newline at end of file
...@@ -27,10 +27,10 @@ module wrapper_packet_deconstruct #( ...@@ -27,10 +27,10 @@ module wrapper_packet_deconstruct #(
output logic rready, output logic rready,
// Valid/Ready interface // Valid/Ready interface
input logic [PACKETWIDTH-1:0] data_in, input logic [PACKETWIDTH-1:0] packet_data,
input logic data_in_last, input logic packet_data_last,
input logic data_in_valid, input logic packet_data_valid,
output logic data_in_ready output logic packet_data_ready
); );
// Create Deconstruction Buffer // Create Deconstruction Buffer
...@@ -62,28 +62,28 @@ always_ff @(posedge hclk or negedge hresetn) begin ...@@ -62,28 +62,28 @@ always_ff @(posedge hclk or negedge hresetn) begin
// Reset Construction Buffer // Reset Construction Buffer
deconst_buf <= {PACKETWIDTH{1'b0}}; deconst_buf <= {PACKETWIDTH{1'b0}};
// Reset Values // Reset Values
data_in_ready <= 1'b0; packet_data_ready <= 1'b0;
deconst_buf_valid <= 1'b0; deconst_buf_valid <= 1'b0;
deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}}; deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}};
end else begin end else begin
// If ready is low and theres no valid data in buffer, asser ready // If ready is low and theres no valid data in buffer, asser ready
if (!data_in_ready && !deconst_buf_valid) begin if (!packet_data_ready && !deconst_buf_valid) begin
data_in_ready <= 1'b1; packet_data_ready <= 1'b1;
end end
// Read Packet into Deconstruction Buffer // Read Packet into Deconstruction Buffer
if (data_in_valid && data_in_ready) begin if (packet_data_valid && packet_data_ready) begin
data_in_ready <= 1'b0; packet_data_ready <= 1'b0;
deconst_buf <= data_in; deconst_buf <= packet_data;
deconst_buf_valid <= 1'b1; deconst_buf_valid <= 1'b1;
deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}}; deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}};
end end
if (read_en) begin if (read_en) begin
// Register which words in the Deconstruction buffer have been read // Register which words in the Deconstruction buffer have been read
// Check if All Words 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 // Set Ready High To Get more Data into Buffer
deconst_buf_valid <= 1'b0; deconst_buf_valid <= 1'b0;
data_in_ready <= 1'b1; packet_data_ready <= 1'b1;
end else begin end else begin
deconst_buf_flag <= deconst_buf_flag | cur_deconst_buf_flag; deconst_buf_flag <= deconst_buf_flag | cur_deconst_buf_flag;
end end
...@@ -104,7 +104,7 @@ end ...@@ -104,7 +104,7 @@ end
// Register Ready Control // Register Ready Control
always_comb begin always_comb begin
// Not Ready Out when waiting for Valid Data on Input // 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 // Write Ready always high but doesn't do anywthing
wready = 1'b1; wready = 1'b1;
end end
......
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// 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. // A joint work commissioned on behalf of SoC Labs; under Arm Academic Access license.
// //
// Contributors // Contributors
...@@ -39,8 +39,9 @@ ...@@ -39,8 +39,9 @@
`include "wrapper_packet_construct.sv" `include "wrapper_packet_construct.sv"
`include "wrapper_packet_deconstruct.sv" `include "wrapper_packet_deconstruct.sv"
`include "wrapper_ahb_interface.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 parameter ADDRWIDTH=12 // Peripheral Address Width
)( )(
input logic HCLK, // Clock input logic HCLK, // Clock
...@@ -59,8 +60,7 @@ module wrapper_top #( ...@@ -59,8 +60,7 @@ module wrapper_top #(
output logic HRESPS, output logic HRESPS,
output logic [31:0] HRDATAS output logic [31:0] HRDATAS
); );
// ---------------------------------------- // ----------------------------------------
// Internal wires declarations // Internal wires declarations
...@@ -93,22 +93,17 @@ module wrapper_top #( ...@@ -93,22 +93,17 @@ module wrapper_top #(
logic output_rready; logic output_rready;
// Internal Wiring // Internal Wiring
logic [511:0] packet_data_out; logic [511:0] in_packet;
logic packet_data_out_last; logic in_packet_last;
logic packet_data_out_valid; logic in_packet_valid;
logic packet_data_out_ready; logic in_packet_ready;
// Internal Wiring // Internal Wiring
logic [511:0] packet_data_in; logic [256:0] out_packet;
logic packet_data_in_last; logic out_packet_last;
logic packet_data_in_valid; logic out_packet_valid;
logic packet_data_in_ready; logic out_packet_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 // Module logic start
//---------------------------------------------------------- //----------------------------------------------------------
...@@ -173,15 +168,41 @@ module wrapper_top #( ...@@ -173,15 +168,41 @@ module wrapper_top #(
.rready (input_rready), .rready (input_rready),
// Valid/Ready Interface // Valid/Ready Interface
.data_out (packet_data_out), .packet_data (in_packet),
.data_out_last (packet_data_out_last), .packet_data_last (in_packet_last),
.data_out_valid (packet_data_out_valid), .packet_data_valid (in_packet_valid),
.data_out_ready (packet_data_out_ready) .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 #( wrapper_packet_deconstruct #(
(ADDRWIDTH - 1), // Only half address map allocated to this device (ADDRWIDTH - 1), // Only half address map allocated to this device
512 // Ouptut Packet WIdth 256 // Ouptut Packet WIdth
) u_wrapper_packet_deconstruct ( ) u_wrapper_packet_deconstruct (
.hclk (HCLK), .hclk (HCLK),
.hresetn (HRESETn), .hresetn (HRESETn),
...@@ -197,24 +218,15 @@ module wrapper_top #( ...@@ -197,24 +218,15 @@ module wrapper_top #(
.rready (output_rready), .rready (output_rready),
// Valid/Ready Interface // Valid/Ready Interface
.data_in (packet_data_in), .packet_data (out_packet),
.data_in_last (packet_data_in_last), .packet_data_last (out_packet_last),
.data_in_valid (packet_data_in_valid), .packet_data_valid (out_packet_valid),
.data_in_ready (packet_data_in_ready) .packet_data_ready (out_packet_ready)
); );
//----------------------------------------------------------- //-----------------------------------------------------------
//Module logic end //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 `ifdef ARM_AHB_ASSERT_ON
`include "std_ovl_defines.h" `include "std_ovl_defines.h"
......
...@@ -94,22 +94,11 @@ module wrapper_vr_loopback #( ...@@ -94,22 +94,11 @@ module wrapper_vr_loopback #(
logic output_rready; logic output_rready;
// Internal Wiring // Internal Wiring
logic [511:0] packet_data_out; logic [511:0] packet;
logic packet_data_out_last; logic packet_last;
logic packet_data_out_valid; logic packet_valid;
logic packet_data_out_ready; 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 // Module logic start
//---------------------------------------------------------- //----------------------------------------------------------
...@@ -174,10 +163,10 @@ module wrapper_vr_loopback #( ...@@ -174,10 +163,10 @@ module wrapper_vr_loopback #(
.rready (input_rready), .rready (input_rready),
// Valid/Ready Interface // Valid/Ready Interface
.data_out (packet_data_out), .packet_data (packet),
.data_out_last (packet_data_out_last), .packet_data_last (packet_last),
.data_out_valid (packet_data_out_valid), .packet_data_valid (packet_valid),
.data_out_ready (packet_data_out_ready) .packet_data_ready (packet_ready)
); );
wrapper_packet_deconstruct #( wrapper_packet_deconstruct #(
...@@ -198,24 +187,16 @@ module wrapper_vr_loopback #( ...@@ -198,24 +187,16 @@ module wrapper_vr_loopback #(
.rready (output_rready), .rready (output_rready),
// Valid/Ready Interface // Valid/Ready Interface
.data_in (packet_data_in), .packet_data (packet),
.data_in_last (packet_data_in_last), .packet_data_last (packet_last),
.data_in_valid (packet_data_in_valid), .packet_data_valid (packet_valid),
.data_in_ready (packet_data_in_ready) .packet_data_ready (packet_ready)
); );
//----------------------------------------------------------- //-----------------------------------------------------------
//Module logic end //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 `ifdef ARM_AHB_ASSERT_ON
`include "std_ovl_defines.h" `include "std_ovl_defines.h"
......
...@@ -40,11 +40,11 @@ ...@@ -40,11 +40,11 @@
`include "cmsdk_ahb_fileread_master32.v" `include "cmsdk_ahb_fileread_master32.v"
`include "cmsdk_ahb_default_slave.v" `include "cmsdk_ahb_default_slave.v"
`include "cmsdk_ahb_slave_mux.v" `include "cmsdk_ahb_slave_mux.v"
`include "wrapper_top.sv" `include "wrapper_sha256_hashing_stream.sv"
`timescale 1ns/1ps `timescale 1ns/1ps
module tb_wrapper_top; module tb_wrapper_sha256_hashing_stream;
parameter CLK_PERIOD = 10; parameter CLK_PERIOD = 10;
parameter ADDRWIDTH = 12; parameter ADDRWIDTH = 12;
...@@ -94,8 +94,8 @@ reg HRESETn; ...@@ -94,8 +94,8 @@ reg HRESETn;
initial initial
begin begin
$dumpfile("wrapper_top.vcd"); $dumpfile("wrapper_sha256_hashing_stream.vcd");
$dumpvars(0, tb_wrapper_top); $dumpvars(0, tb_wrapper_sha256_hashing_stream);
HRESETn = 1'b0; HRESETn = 1'b0;
HCLK = 1'b0; HCLK = 1'b0;
# (10*CLK_PERIOD); # (10*CLK_PERIOD);
...@@ -221,7 +221,7 @@ cmsdk_ahb_fileread_master32 #(InputFileName, ...@@ -221,7 +221,7 @@ cmsdk_ahb_fileread_master32 #(InputFileName,
//******************************************************************************** //********************************************************************************
// Slave module 1: example AHB slave module // Slave module 1: example AHB slave module
//******************************************************************************** //********************************************************************************
wrapper_top #(ADDRWIDTH wrapper_sha256_hashing_stream #(ADDRWIDTH
) accelerator ( ) accelerator (
.HCLK (HCLK), .HCLK (HCLK),
.HRESETn (HRESETn), .HRESETn (HRESETn),
......
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// 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 // Modified from tb_frbm_example.v
// A joint work commissioned on behalf of SoC Labs; under Arm Academic Access license. // A joint work commissioned on behalf of SoC Labs; under Arm Academic Access license.
// //
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment