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 #(
input logic [PACKETWIDTH-1:0] packet_data,
input logic packet_data_last,
input logic packet_data_valid,
output logic packet_data_ready
output logic packet_data_ready,
output logic deconstructor_ready
);
// Create Deconstruction Buffer
// logic [PACKETWIDTH-1:0] deconst_buffer;
logic [(PACKETWIDTH/32)-1:0][31:0] deconst_buf;
assign deconst_buf = packet_data;
// Create Array to Flag which buffers have been read
logic [(PACKETWIDTH/32)-1:0] deconst_buf_flag;
......@@ -53,34 +55,31 @@ logic deconst_buf_flag_reduced;
assign deconst_buf_flag_reduced = &(deconst_buf_flag | (cur_deconst_buf_flag));
logic deconst_buf_valid;
assign deconstructor_ready = deconst_buf_valid;
// 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
deconst_buf <= {PACKETWIDTH{1'b0}};
// Reset Values
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 (!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
packet_data_ready <= 1'b0;
deconst_buf <= packet_data;
packet_data_ready <= 1'b0;
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_flag <= {(PACKETWIDTH/32){1'b0}};
packet_data_ready <= 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 && !(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
deconst_buf_valid <= 1'b0;
packet_data_ready <= 1'b1;
......@@ -103,8 +102,8 @@ end
// Register Ready Control
always_comb begin
// Not Ready Out when waiting for Valid Data on Input
rready = ~packet_data_ready;
// Ready when data in deconstruction buffer
rready = deconst_buf_valid;
// Write Ready always high but doesn't do anywthing
wready = 1'b1;
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment