diff --git a/hdl/src/message_build.sv b/hdl/src/message_build.sv index 7d8a5471338c3f7f876f6456e2756cd994201ce1..b4d69c3430999026914586c2f9c68b48a55c3273 100644 --- a/hdl/src/message_build.sv +++ b/hdl/src/message_build.sv @@ -52,6 +52,8 @@ module message_build ( logic [54:0] word_extract; logic [8:0] rem_extract; + logic extra_word, next_extra_word; + assign word_extract = cfg_size[63:9]; assign rem_extract = cfg_size[8:0]; @@ -66,6 +68,7 @@ module message_build ( data_out_last <= 1'b0; data_out <= 512'd0; data_word_count <= 55'd0; + extra_word <= 1'b0; end else begin state <= next_state; data_in_ready <= next_data_in_ready; @@ -76,6 +79,7 @@ module message_build ( data_out_last <= next_data_out_last; data_out <= next_data_out; data_word_count <= next_data_word_count; + extra_word <= next_extra_word; end end @@ -90,6 +94,7 @@ module message_build ( next_data_out_last = data_out_last; next_data_out = data_out; next_data_word_count = data_word_count; + next_extra_word = extra_word; // Override case (state) @@ -139,7 +144,7 @@ module message_build ( // Write Input Data to Output next_data_out = data_in; next_data_out_valid = 1'b1; - if (data_word_count == 1) begin + if (next_data_word_count == 1) begin // Last Input Data Word next_state = 3'd3; end @@ -170,13 +175,16 @@ module message_build ( next_data_in_ready = 1'b0; end else begin // Size can fit in last data word - next_data_out = last_data_word | {448'd0, cfg_size_reg}; - next_data_out_valid = 1'b1; - next_data_out_last = 1'b1; + next_data_out = last_data_word | {448'd0, cfg_size_reg}; + next_data_out_valid = 1'b1; + next_data_out_last = 1'b1; + next_data_word_count = data_word_count - 1; + next_extra_word = 1'b1; // NEXT STATE: Read Next Config next_state = 3'd1; next_data_in_ready = 1'b0; next_cfg_ready = 1'b1; + next_extra_word = 1'b0; end end end @@ -197,6 +205,7 @@ module message_build ( next_state = 3'd1; next_data_in_ready = 1'b0; next_cfg_ready = 1'b1; + next_extra_word = 1'b0; end end