From f0edcd3af0fce5edc4021d9da61b3f507ed3104e Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Tue, 23 May 2023 11:30:21 +0300 Subject: [PATCH] Update formatting --- lifo.sv | 112 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 54 deletions(-) diff --git a/lifo.sv b/lifo.sv index 28f8fd0..e73b9cc 100644 --- a/lifo.sv +++ b/lifo.sv @@ -47,8 +47,6 @@ module lifo #( parameter // "FALSE" - normal fifo mode DEPTH = 8, // max elements count == DEPTH, DEPTH MUST be power of 2 - DEPTH_W = $clog2(DEPTH)+1, // elements counter width, extra bit to store - // "fifo full" state, see cnt[] variable comments DATA_W = 32 // data field width )( @@ -72,76 +70,82 @@ module lifo #( parameter output logic fail ); -// lifo data -logic [DEPTH-1:0][DATA_W-1:0] data = '0; + // elements counter width, extra bit to store + // "fifo full" state, see cnt[] variable comments + localparam DEPTH_W = $clog2(DEPTH+1); -// data output buffer for normal fifo mode -logic [DATA_W-1:0] data_buf = '0; -// cnt[] vector always holds lifo elements count -// data[cnt[]] points to the first empty lifo slot -// when lifo is full data[cnt[]] points "outside" of data[] + // lifo data + logic [DEPTH-1:0][DATA_W-1:0] data = '0; -// filtered requests -logic w_req_f; -assign w_req_f = w_req && ~full; + // data output buffer for normal fifo mode + logic [DATA_W-1:0] data_buf = '0; -logic r_req_f; -assign r_req_f = r_req && ~empty; + // cnt[] vector always holds lifo elements count + // data[cnt[]] points to the first empty lifo slot + // when lifo is full data[cnt[]] points "outside" of data[] + // filtered requests + logic w_req_f; + assign w_req_f = w_req && ~full; -integer i; -always_ff @(posedge clk) begin - if ( ~nrst ) begin - data <= '0; - cnt[DEPTH_W-1:0] <= '0; - data_buf[DATA_W-1:0] <= '0; - end else begin - unique case ({w_req_f, r_req_f}) - 2'b00: ; // nothing + logic r_req_f; + assign r_req_f = r_req && ~empty; - 2'b01 : begin // reading out - for ( i = (DEPTH-1); i > 0; i-- ) begin - data[i-1] <= data[i]; + + integer i; + always_ff @(posedge clk) begin + if ( ~nrst ) begin + data <= '0; + cnt[DEPTH_W-1:0] <= '0; + data_buf[DATA_W-1:0] <= '0; + end else begin + unique case ({w_req_f, r_req_f}) + 2'b00: ; // nothing + + 2'b01 : begin // reading out + for ( i = (DEPTH-1); i > 0; i-- ) begin + data[i-1] <= data[i]; + end + cnt[DEPTH_W-1:0] <= cnt[DEPTH_W-1:0] - 1'b1; end - cnt[DEPTH_W-1:0] <= cnt[DEPTH_W-1:0] - 1'b1; - end - 2'b10 : begin // writing in - data[cnt[DEPTH_W-1:0]] <= w_data[DATA_W-1:0]; - cnt[DEPTH_W-1:0] <= cnt[DEPTH_W-1:0] + 1'b1; - end + 2'b10 : begin // writing in + data[cnt[DEPTH_W-1:0]] <= w_data[DATA_W-1:0]; + cnt[DEPTH_W-1:0] <= cnt[DEPTH_W-1:0] + 1'b1; + end - 2'b11 : begin // simultaneously reading and writing - data[cnt[DEPTH_W-1:0]-1] <= w_data[DATA_W-1:0]; - // data counter does not change here - end - endcase + 2'b11 : begin // simultaneously reading and writing + data[cnt[DEPTH_W-1:0]-1] <= w_data[DATA_W-1:0]; + // data counter does not change here + end + endcase - // data buffer works only for normal lifo mode - if( r_req_f ) begin - data_buf[DATA_W-1:0] <= data[0]; + // data buffer works only for normal lifo mode + if( r_req_f ) begin + data_buf[DATA_W-1:0] <= data[0]; + end end end -end -always_comb begin - empty = ( cnt[DEPTH_W-1:0] == '0 ); - full = ( cnt[DEPTH_W-1:0] == DEPTH ); + always_comb begin + empty = ( cnt[DEPTH_W-1:0] == '0 ); + full = ( cnt[DEPTH_W-1:0] == DEPTH ); - if( FWFT_MODE == "TRUE" ) begin - if (~empty) begin - r_data[DATA_W-1:0] = data[0]; // first-word fall-through mode + if( FWFT_MODE == "TRUE" ) begin + if (~empty) begin + r_data[DATA_W-1:0] = data[0]; // first-word fall-through mode + end else begin + r_data[DATA_W-1:0] = '0; + end end else begin - r_data[DATA_W-1:0] = '0; + r_data[DATA_W-1:0] = data_buf[DATA_W-1:0]; // normal mode end - end else begin - r_data[DATA_W-1:0] = data_buf[DATA_W-1:0]; // normal mode - end - fail = ( empty && r_req ) || - ( full && w_req ); -end + fail = ( empty && r_req ) || + ( full && w_req ); + end endmodule +