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

SOC1-141: Restructured deconstruction buffer to remove registers and do packet...

SOC1-141: Restructured deconstruction buffer to remove registers and do packet breakdown on engine output port data
parent 34fab012
No related branches found
No related tags found
1 merge request!31SOC1-141: Restructured deconstruction buffer to remove registers and do packet...
...@@ -30,12 +30,14 @@ module wrapper_packet_deconstruct #( ...@@ -30,12 +30,14 @@ module wrapper_packet_deconstruct #(
input logic [PACKETWIDTH-1:0] packet_data, input logic [PACKETWIDTH-1:0] packet_data,
input logic packet_data_last, input logic packet_data_last,
input logic packet_data_valid, input logic packet_data_valid,
output logic packet_data_ready output logic packet_data_ready,
output logic deconstructor_ready
); );
// Create Deconstruction Buffer // Create Deconstruction Buffer
// logic [PACKETWIDTH-1:0] deconst_buffer;
logic [(PACKETWIDTH/32)-1:0][31:0] deconst_buf; logic [(PACKETWIDTH/32)-1:0][31:0] deconst_buf;
assign deconst_buf = packet_data;
// Create Array to Flag which buffers have been read // Create Array to Flag which buffers have been read
logic [(PACKETWIDTH/32)-1:0] deconst_buf_flag; logic [(PACKETWIDTH/32)-1:0] deconst_buf_flag;
...@@ -53,34 +55,31 @@ logic deconst_buf_flag_reduced; ...@@ -53,34 +55,31 @@ logic deconst_buf_flag_reduced;
assign deconst_buf_flag_reduced = &(deconst_buf_flag | (cur_deconst_buf_flag)); assign deconst_buf_flag_reduced = &(deconst_buf_flag | (cur_deconst_buf_flag));
logic deconst_buf_valid; logic deconst_buf_valid;
assign deconstructor_ready = deconst_buf_valid;
// Dump data on one of two conditions // Dump data on one of two conditions
// - An address ends [5:0] in 0x3C i.e. [5:2] == 0xF // - An address ends [5:0] in 0x3C i.e. [5:2] == 0xF
// - Address Moved to different 512 bit word // - Address Moved to different 512 bit word
// Write Condition // Write Condition
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
deconst_buf <= {PACKETWIDTH{1'b0}};
// Reset Values // Reset Values
packet_data_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 (!packet_data_ready && !deconst_buf_valid) begin
packet_data_ready <= 1'b1;
end
// Read Packet into Deconstruction Buffer
if (packet_data_valid && packet_data_ready) begin if (packet_data_valid && packet_data_ready) begin
packet_data_ready <= 1'b0; packet_data_ready <= 1'b0;
deconst_buf <= packet_data; end
// If buffer isn't valid but valid data on input, assert buffer valid
if ((packet_data_valid && !packet_data_ready) && !deconst_buf_valid) begin
deconst_buf_valid <= 1'b1; deconst_buf_valid <= 1'b1;
deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}}; deconst_buf_flag <= {(PACKETWIDTH/32){1'b0}};
packet_data_ready <= 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 && !(packet_data_valid && packet_data_ready)) begin if (deconst_buf_flag_reduced && deconst_buf_valid) 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;
packet_data_ready <= 1'b1; packet_data_ready <= 1'b1;
...@@ -103,8 +102,8 @@ end ...@@ -103,8 +102,8 @@ end
// Register Ready Control // Register Ready Control
always_comb begin always_comb begin
// Not Ready Out when waiting for Valid Data on Input // Ready when data in deconstruction buffer
rready = ~packet_data_ready; rready = deconst_buf_valid;
// 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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment