23
23
module la_asyncfifo #(
24
24
parameter DW = 32 , // Memory width
25
25
parameter DEPTH = 4 , // FIFO depth
26
- parameter ALMOST_FULL_LEVEL = DEPTH - 1 , // FIFO depth
26
+ parameter ALMOSTFULL = 0 , // FIFO depth
27
27
parameter NS = 1 , // Number of power supplies
28
28
parameter CTRLW = 1 , // width of asic ctrl interface
29
29
parameter TESTW = 1 , // width of asic teset interface
@@ -53,6 +53,7 @@ module la_asyncfifo #(
53
53
54
54
// local params
55
55
localparam AW = (DEPTH == 1 ) ? 1 : $clog2(DEPTH);
56
+ localparam AFULLFINAL = (ALMOSTFULL != 0 ) ? ALMOSTFULL : DEPTH - 1 ;
56
57
57
58
// local wires
58
59
reg [AW:0 ] wr_grayptr;
@@ -84,7 +85,7 @@ module la_asyncfifo #(
84
85
wr_binptr[AW:0 ] <= 'b0;
85
86
wr_grayptr[AW:0 ] <= 'b0;
86
87
end else begin
87
- wr_binptr_mem[AW:0 ] <= (wr_binptr_mem_nxt[AW:0 ] == DEPTH) ? 'b0 : wr_binptr_mem_nxt[AW:0 ];
88
+ wr_binptr_mem[AW:0 ] <= (wr_binptr_mem_nxt[AW:0 ] == DEPTH[AW: 0 ] ) ? 'b0 : wr_binptr_mem_nxt[AW:0 ];
88
89
wr_binptr[AW:0 ] <= wr_binptr_nxt[AW:0 ];
89
90
wr_grayptr[AW:0 ] <= wr_grayptr_nxt[AW:0 ];
90
91
end
@@ -116,13 +117,13 @@ module la_asyncfifo #(
116
117
if (~ wr_nreset) wr_full <= 1'b0 ;
117
118
else
118
119
wr_full <= (wr_chaosfull & wr_chaosmode) |
119
- (fifo_used + {{AW{1'b0 }}, (wr_en && ~ wr_full)}) == DEPTH;
120
+ (fifo_used + {{AW{1'b0 }}, (wr_en && ~ wr_full)}) == DEPTH[AW: 0 ] ;
120
121
121
122
always @(posedge wr_clk or negedge wr_nreset)
122
123
if (~ wr_nreset) wr_almost_full <= 1'b0 ;
123
124
else
124
125
wr_almost_full <=
125
- (fifo_used + {{AW{1'b0 }}, (wr_en && ~ wr_full)}) > (ALMOST_FULL_LEVEL - 1 );
126
+ (fifo_used + {{AW{1'b0 }}, (wr_en && ~ wr_full)}) > (AFULLFINAL[AW: 0 ] - 1 );
126
127
127
128
// Write --> Read clock synchronizer
128
129
for (i = 0 ; i < (AW + 1 ); i = i + 1 ) begin
@@ -144,7 +145,7 @@ module la_asyncfifo #(
144
145
rd_binptr[AW:0 ] <= 'b0;
145
146
rd_grayptr[AW:0 ] <= 'b0;
146
147
end else begin
147
- rd_binptr_mem[AW:0 ] <= (rd_binptr_mem_nxt[AW:0 ] == DEPTH) ? 'b0 : rd_binptr_mem_nxt[AW:0 ];
148
+ rd_binptr_mem[AW:0 ] <= (rd_binptr_mem_nxt[AW:0 ] == DEPTH[AW: 0 ] ) ? 'b0 : rd_binptr_mem_nxt[AW:0 ];
148
149
rd_binptr[AW:0 ] <= rd_binptr_nxt[AW:0 ];
149
150
rd_grayptr[AW:0 ] <= rd_grayptr_nxt[AW:0 ];
150
151
end
0 commit comments