Skip to content

Commit aeefa2f

Browse files
Merge branch 'main' into mhamza_dev
2 parents 7d07c5f + 53d8671 commit aeefa2f

File tree

3 files changed

+1233
-286
lines changed

3 files changed

+1233
-286
lines changed

models_internal/verilog/FIFO36K.v

Lines changed: 111 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ module FIFO36K #(
3131
output reg UNDERFLOW = 1'b0 // FIFO underflow error flag
3232
);
3333

34+
35+
3436
if ( FIFO_TYPE == "SYNCHRONOUS" ) begin: SYNCRONOUS
3537

3638

@@ -231,8 +233,8 @@ assign ram_clk_b = RD_CLK;
231233
parameter W_PTR_WIDTH = $clog2(fifo_depth_write);
232234
parameter R_PTR_WIDTH = $clog2(fifo_depth_read);
233235

234-
wire [W_PTR_WIDTH:0] b_wptr_sync, b_wptr_w;
235-
wire [R_PTR_WIDTH:0] b_rptr_sync, b_rptr_w;
236+
wire [W_PTR_WIDTH:0] b_wptr_sync, b_wptr_w, b_wptr_sync_for_a;
237+
wire [R_PTR_WIDTH:0] b_rptr_sync, b_rptr_w, b_rptr_w1, b_rptr_sync_for_a;
236238

237239

238240
TDP_RAM36K #(
@@ -243,18 +245,18 @@ wire [R_PTR_WIDTH:0] b_rptr_sync, b_rptr_w;
243245
.WRITE_WIDTH_B(DATA_WIDTH_WRITE), // Write data width on port B (1-36)
244246
.READ_WIDTH_B(DATA_WIDTH_READ) // Read data width on port B (1-36)
245247
) FIFO_RAM_inst (
246-
.WEN_A(WR_EN & !OVERFLOW & !FULL), // Write-enable port A
248+
.WEN_A(WR_EN ), // Write-enable port A
247249
.WEN_B(1'b0), // Write-enable port B
248250
.REN_A(1'b0), // Read-enable port A
249-
.REN_B(RD_EN & !UNDERFLOW & !EMPTY), // Read-enable port B
251+
.REN_B(RD_EN ), // Read-enable port B
250252
.CLK_A(WR_CLK), // Clock port A
251253
.CLK_B(ram_clk_b), // Clock port B
252254
.BE_A(4'hf), // Byte-write enable port A
253255
.BE_B(4'h0), // Byte-write enable port B
254256
// .ADDR_A({fifo_wr_addr, {15-fifo_addr_width{1'b0}}}), // Address port A, align MSBs and connect unused MSBs to logic 0
255257
.ADDR_A({b_wptr_w,{15-fifo_addr_width_w{1'b0}}}), // Address port A, align MSBs and connect unused MSBs to logic 0
256258
// .ADDR_B({fifo_rd_addr, {15-fifo_addr_width{1'b0}}}), // Address port B, align MSBs and connect unused MSBs to logic 0
257-
.ADDR_B({b_rptr_w,{15-fifo_addr_width_r{1'b0}}}), // Address port B, align MSBs and connect unused MSBs to logic 0
259+
.ADDR_B({b_rptr_w1,{15-fifo_addr_width_r{1'b0}}}), // Address port B, align MSBs and connect unused MSBs to logic 0
258260
.WDATA_A(ram_wr_data), // Write data port A
259261
.WPARITY_A(ram_wr_parity), // Write parity data port A
260262
.WDATA_B(32'h00000000), // Write data port B
@@ -274,11 +276,11 @@ wire [R_PTR_WIDTH:0] b_rptr_sync, b_rptr_w;
274276
end
275277

276278
if(DATA_WIDTH_READ==18) begin
277-
assign RD_DATA = fwft ? fwft_data : {ram_rd_parity[1:0], ram_rd_data[15:0]};
279+
assign RD_DATA = fwft ? fwft_data : {ram_rd_parity[1], ram_rd_data[15:8], ram_rd_parity[0], ram_rd_data[7:0]};
278280
end
279281

280282
if(DATA_WIDTH_READ==36) begin
281-
assign RD_DATA = fwft ? fwft_data : {ram_rd_parity[3:0], ram_rd_data[31:0]};
283+
assign RD_DATA = fwft ? fwft_data : {ram_rd_parity[3], ram_rd_data[31:24], ram_rd_parity[2], ram_rd_data[23:16], ram_rd_parity[1], ram_rd_data[15:8], ram_rd_parity[0], ram_rd_data[7:0]};
282284
end
283285

284286
if(DATA_WIDTH_WRITE==9) begin
@@ -287,13 +289,13 @@ wire [R_PTR_WIDTH:0] b_rptr_sync, b_rptr_w;
287289
end
288290

289291
if(DATA_WIDTH_WRITE==18) begin
290-
assign ram_wr_data = {{32-DATA_WIDTH_WRITE{1'b0}}, WR_DATA[DATA_WIDTH_WRITE-3:0]};
291-
assign ram_wr_parity = {2'b00, WR_DATA[DATA_WIDTH_WRITE-1:DATA_WIDTH_WRITE-2]};
292+
assign ram_wr_data = {{32-DATA_WIDTH_WRITE{1'b0}}, WR_DATA[16:9],WR_DATA[7:0]};
293+
assign ram_wr_parity = {2'b00, WR_DATA[17], WR_DATA[8]};
292294
end
293295

294296
if(DATA_WIDTH_WRITE==36) begin
295-
assign ram_wr_data = {{36-DATA_WIDTH_WRITE{1'b0}}, WR_DATA[DATA_WIDTH_WRITE-5:0]};
296-
assign ram_wr_parity = {2'b00, WR_DATA[DATA_WIDTH_WRITE-1:DATA_WIDTH_WRITE-4]};
297+
assign ram_wr_data = {WR_DATA[34:27], WR_DATA[25:18],WR_DATA[16:9],WR_DATA[7:0]};
298+
assign ram_wr_parity = {WR_DATA[35], WR_DATA[26], WR_DATA[17], WR_DATA[8]};
297299
end
298300

299301

@@ -302,37 +304,44 @@ wire [R_PTR_WIDTH:0] b_rptr_sync, b_rptr_w;
302304
/*---------Write pointer synchronizer ( 2 FLOPS) logic--------------*/
303305

304306

305-
reg [W_PTR_WIDTH:0] q1,d_out1;
307+
reg [W_PTR_WIDTH:0] q1,q1_a,d_out1;
306308

307309
assign b_wptr_sync = d_out1;
310+
assign b_wptr_sync_for_a = q1_a;
308311

309312
always@(posedge RD_CLK) begin
310313
if(RESET) begin
311314
q1 <= 0;
312315
d_out1 <= 0;
316+
q1_a <=0;
313317
end
314318
else begin
315319
q1 <= b_wptr_w;
316320
d_out1 <= q1;
321+
q1_a <= d_out1;
317322
end
318323
end
319324

320325
/*-------------------------------------------------------------------*/
321326

322327
/*--------- Read pointer synchronizer (2 FLOPS ) logic --------------*/
323328

324-
reg [R_PTR_WIDTH:0] q2, d_out2;
329+
reg [R_PTR_WIDTH:0] q2, q2_a, d_out2;
325330

326331
assign b_rptr_sync = d_out2;
332+
assign b_rptr_sync_for_a = q2_a;
327333

328334
always@(posedge WR_CLK) begin
329335
if(RESET) begin
330336
q2 <= 0;
331337
d_out2 <= 0;
338+
q2_a <=0;
332339
end
333340
else begin
341+
334342
q2 <= b_rptr_w;
335343
d_out2 <= q2;
344+
q2_a <= d_out2;
336345
end
337346
end
338347

@@ -349,7 +358,7 @@ assign b_rptr_sync = d_out2;
349358

350359
wire wfull, al_full, p_full;
351360

352-
wire [W_PTR_WIDTH:0] diff_ptr0, diff_ptr2;
361+
wire [W_PTR_WIDTH:0] diff_ptr0, diff_ptr2, diff_ptr0_for_a;
353362

354363
assign b_wptr_next = b_wptr+(WR_EN & !FULL);
355364

@@ -358,18 +367,30 @@ assign b_rptr_sync = d_out2;
358367

359368
assign diff_ptr0 =(DATA_WIDTH_WRITE>DATA_WIDTH_READ)? /* W>R */ ((((b_wptr_next/SCALING_FACTOR_WPTR >= (b_rptr_sync/SCALING_FACTOR_RPTR))? (b_wptr_next/SCALING_FACTOR_WPTR-(b_rptr_sync/SCALING_FACTOR_RPTR)): (b_wptr_next/SCALING_FACTOR_WPTR+(1<<(W_PTR_WIDTH+1))-(b_rptr_sync/SCALING_FACTOR_RPTR)))))
360369

361-
: ( (DATA_WIDTH_READ>DATA_WIDTH_WRITE)? ( /* R>W */ ((((b_wptr_next/SCALING_FACTOR_WPTR >= (b_rptr_sync/SCALING_FACTOR_RPTR))? (b_wptr_next/SCALING_FACTOR_WPTR-(b_rptr_sync/SCALING_FACTOR_RPTR)): (b_wptr_next/SCALING_FACTOR_WPTR+(1<<(R_PTR_WIDTH+1))-(b_rptr_sync/SCALING_FACTOR_RPTR))))) )
370+
: ( (DATA_WIDTH_READ>DATA_WIDTH_WRITE)? ( /* R>W */ ((((b_wptr_next*SCALING_FACTOR_RPTR >= (b_rptr_sync*SCALING_FACTOR_WPTR))? (b_wptr_next*SCALING_FACTOR_RPTR-(b_rptr_sync*SCALING_FACTOR_WPTR)): (b_wptr_next*SCALING_FACTOR_RPTR+(1<<(W_PTR_WIDTH+1))-(b_rptr_sync*SCALING_FACTOR_WPTR))))) )
362371

363372
: /* R==W */ ((((b_wptr_next >= (b_rptr_sync ))? (b_wptr_next - (b_rptr_sync)): (b_wptr_next + (1<<(W_PTR_WIDTH+1))-(b_rptr_sync ))))) );
364373

374+
375+
assign diff_ptr0_for_a =(DATA_WIDTH_WRITE>DATA_WIDTH_READ)? /* W>R */ ((((b_wptr_next/SCALING_FACTOR_WPTR >= (b_rptr_sync_for_a/SCALING_FACTOR_RPTR))? (b_wptr_next/SCALING_FACTOR_WPTR-(b_rptr_sync_for_a/SCALING_FACTOR_RPTR)): (b_wptr_next/SCALING_FACTOR_WPTR+(1<<(W_PTR_WIDTH+1))-(b_rptr_sync_for_a/SCALING_FACTOR_RPTR)))))
376+
377+
: ( (DATA_WIDTH_READ>DATA_WIDTH_WRITE)? ( /* R>W */ ((((b_wptr_next*SCALING_FACTOR_RPTR >= (b_rptr_sync_for_a*SCALING_FACTOR_WPTR))? (b_wptr_next*SCALING_FACTOR_RPTR-(b_rptr_sync_for_a*SCALING_FACTOR_WPTR)): (b_wptr_next*SCALING_FACTOR_RPTR+(1<<(W_PTR_WIDTH+1))-(b_rptr_sync_for_a*SCALING_FACTOR_WPTR))))) )
378+
379+
: /* R==W */ ((((b_wptr_next >= (b_rptr_sync_for_a ))? (b_wptr_next - (b_rptr_sync_for_a)): (b_wptr_next + (1<<(W_PTR_WIDTH+1))-(b_rptr_sync_for_a ))))) );
380+
381+
365382
// assign wfull = (DATA_WIDTH_WRITE>DATA_WIDTH_READ)? (diff_ptr0 == (1<<W_PTR_WIDTH)) : (diff_ptr0 == (1<<R_PTR_WIDTH) );
366-
367-
assign wfull = (DATA_WIDTH_WRITE>DATA_WIDTH_READ)? (diff_ptr0 == (1<<W_PTR_WIDTH)) : (diff_ptr0 == (1<<R_PTR_WIDTH) );
368383

384+
assign wfull = (DATA_WIDTH_WRITE>DATA_WIDTH_READ)? (diff_ptr0 == (1<<W_PTR_WIDTH)) : (diff_ptr0 == (1<<W_PTR_WIDTH) );
369385

370-
assign al_full = (DATA_WIDTH_WRITE>DATA_WIDTH_READ)? (diff_ptr0 == (1<<W_PTR_WIDTH)-1): (diff_ptr0 == ((1<<R_PTR_WIDTH)-1) );
371386

372-
assign p_full = (DATA_WIDTH_WRITE>DATA_WIDTH_READ)? (diff_ptr0 >= ((1<<W_PTR_WIDTH)-PROG_FULL_THRESH) ) : ( (diff_ptr0 >= ((1<<R_PTR_WIDTH)-PROG_FULL_THRESH) ) );
387+
assign al_full = (DATA_WIDTH_WRITE>DATA_WIDTH_READ)? (diff_ptr0 == (1<<W_PTR_WIDTH)-1): (diff_ptr0 == ((1<<W_PTR_WIDTH)-1) );
388+
389+
assign p_full = (DATA_WIDTH_WRITE>DATA_WIDTH_READ)? (diff_ptr0_for_a >= ((1<<W_PTR_WIDTH)-PROG_FULL_THRESH+1) ) : ( (diff_ptr0_for_a >= ((1<<W_PTR_WIDTH)-PROG_FULL_THRESH+1) ) );
390+
391+
392+
// assign diff_ptr2 = ((((b_wptr_next*SCALING_FACTOR_WPTR-(b_rptr_sync/SCALING_FACTOR_RPTR)): (b_wptr_next/SCALING_FACTOR_WPTR+(1<<(W_PTR_WIDTH+1))-(b_rptr_sync/SCALING_FACTOR_RPTR)))))
393+
373394

374395

375396
always@(posedge WR_CLK or posedge RESET) begin
@@ -382,16 +403,19 @@ assign b_rptr_sync = d_out2;
382403
end
383404

384405
always@(posedge WR_CLK or posedge RESET) begin
406+
385407
if(RESET) begin
386408
FULL <= 0;
387409
ALMOST_FULL <= 'b0;
388410
PROG_FULL <= 0;
389411
end
412+
390413
else begin
391414

392-
FULL <= wfull ;
393-
ALMOST_FULL <= al_full ;
394-
PROG_FULL <= p_full ;
415+
FULL <= wfull;
416+
ALMOST_FULL <= al_full;
417+
PROG_FULL <= p_full;
418+
395419
end
396420
end
397421

@@ -401,14 +425,15 @@ assign b_rptr_sync = d_out2;
401425

402426
localparam SCALING_FACTOR_RPTR= (DATA_WIDTH_READ<DATA_WIDTH_WRITE)? (DATA_WIDTH_WRITE/DATA_WIDTH_READ):1;
403427

404-
wire [R_PTR_WIDTH:0] diff_ptr1;
428+
wire [R_PTR_WIDTH:0] diff_ptr1, diff_ptr1_for_a;
405429
reg [R_PTR_WIDTH:0] b_rptr_next, b_rptr;
406430

407431

408432
always @(*) begin
409433

410434
if(RESET) begin
411435
b_rptr_next =0;
436+
b_rptr <=0;
412437
end
413438
if((RD_EN & !EMPTY)) begin
414439
if (b_rptr_next==(1<<R_PTR_WIDTH+1)) begin
@@ -420,20 +445,28 @@ always @(*) begin
420445
end
421446
end
422447

423-
assign b_rptr_w = b_rptr_next;
448+
assign b_rptr_w = b_rptr;
449+
450+
assign b_rptr_w1= b_rptr_next;
424451

425-
assign diff_ptr1 = (DATA_WIDTH_WRITE > DATA_WIDTH_READ)? ( ((b_wptr_sync/SCALING_FACTOR_WPTR) >= (b_rptr_next/SCALING_FACTOR_RPTR))? (b_wptr_sync/SCALING_FACTOR_WPTR-(b_rptr_next/SCALING_FACTOR_RPTR)): (b_wptr_sync/SCALING_FACTOR_WPTR+(1<<(W_PTR_WIDTH+1))-(b_rptr_next/SCALING_FACTOR_RPTR)))
452+
assign diff_ptr1 = (DATA_WIDTH_WRITE > DATA_WIDTH_READ)? ( ((b_wptr_sync*SCALING_FACTOR_RPTR) >= (b_rptr_next*SCALING_FACTOR_WPTR))? (b_wptr_sync*SCALING_FACTOR_RPTR-(b_rptr_next*SCALING_FACTOR_WPTR)): ((b_wptr_sync*SCALING_FACTOR_RPTR)+(1<<(R_PTR_WIDTH+1))-(b_rptr_next*SCALING_FACTOR_RPTR)/SCALING_FACTOR_RPTR))
426453

427454
: ( (DATA_WIDTH_READ > DATA_WIDTH_WRITE)? (((b_wptr_sync/SCALING_FACTOR_WPTR) >= (b_rptr_next/SCALING_FACTOR_RPTR))? (b_wptr_sync/SCALING_FACTOR_WPTR-(b_rptr_next/SCALING_FACTOR_RPTR)): (b_wptr_sync/SCALING_FACTOR_WPTR+(1<<(R_PTR_WIDTH+1))-(b_rptr_next/SCALING_FACTOR_RPTR)))
428455

429456
: (((b_wptr_sync) >= (b_rptr_next))? (b_wptr_sync-(b_rptr_next)): (b_wptr_sync+(1<<(W_PTR_WIDTH+1))-(b_rptr_next))) ) ;
430457

458+
assign diff_ptr1_for_a = (DATA_WIDTH_WRITE > DATA_WIDTH_READ)? ( ((b_wptr_sync_for_a*SCALING_FACTOR_RPTR) >= (b_rptr_next*SCALING_FACTOR_WPTR))? (b_wptr_sync_for_a*SCALING_FACTOR_RPTR-(b_rptr_next*SCALING_FACTOR_WPTR)): ((b_wptr_sync_for_a*SCALING_FACTOR_RPTR)+(1<<(R_PTR_WIDTH+1))-(b_rptr_next*SCALING_FACTOR_RPTR)/SCALING_FACTOR_RPTR))
459+
460+
: ( (DATA_WIDTH_READ > DATA_WIDTH_WRITE)? (((b_wptr_sync_for_a/SCALING_FACTOR_WPTR) >= (b_rptr_next/SCALING_FACTOR_RPTR))? (b_wptr_sync_for_a/SCALING_FACTOR_WPTR-(b_rptr_next/SCALING_FACTOR_RPTR)): (b_wptr_sync_for_a/SCALING_FACTOR_WPTR+(1<<(R_PTR_WIDTH+1))-(b_rptr_next/SCALING_FACTOR_RPTR)))
461+
462+
: (((b_wptr_sync_for_a) >= (b_rptr_next))? (b_wptr_sync_for_a-(b_rptr_next)): (b_wptr_sync_for_a+(1<<(W_PTR_WIDTH+1))-(b_rptr_next))) ) ;
463+
431464

432465
assign rempty= (diff_ptr1==0)?1:0;
433466

434467
assign al_empty = (diff_ptr1 ==1)? 1:0;
435468

436-
assign p_empty = (diff_ptr1 ==PROG_EMPTY_THRESH || diff_ptr1 <=PROG_EMPTY_THRESH )? 1:0;
469+
assign p_empty = (diff_ptr1_for_a ==PROG_EMPTY_THRESH-1 || diff_ptr1_for_a <=PROG_EMPTY_THRESH-1 )? 1:0;
437470

438471

439472
always@(posedge RD_CLK or posedge RESET) begin
@@ -458,7 +491,19 @@ assign p_empty = (diff_ptr1 ==PROG_EMPTY_THRESH || diff_ptr1 <=PROG_EMPTY_THRESH
458491

459492

460493
EMPTY <= rempty;
461-
ALMOST_EMPTY <= al_empty;
494+
495+
if(DATA_WIDTH_READ==9) begin
496+
if(b_rptr==4095 & WR_EN==0) begin
497+
ALMOST_EMPTY <=0;
498+
end
499+
else begin
500+
ALMOST_EMPTY <= al_empty;
501+
end
502+
end
503+
else begin
504+
ALMOST_EMPTY <= al_empty;
505+
end
506+
462507
PROG_EMPTY <= p_empty;
463508

464509
end
@@ -478,13 +523,13 @@ assign p_empty = (diff_ptr1 ==PROG_EMPTY_THRESH || diff_ptr1 <=PROG_EMPTY_THRESH
478523
fwft_data <= WR_DATA;
479524
end
480525
else if (DATA_WIDTH_WRITE==36 && DATA_WIDTH_READ==9) begin
481-
fwft_data <= {{WR_DATA[32]},{WR_DATA[7:0]}} ; // DEVELOP LOGIC FOR OTHER WIDTH AS WELL
526+
fwft_data <= {{WR_DATA[8]},{WR_DATA[7:0]}} ; // DEVELOP LOGIC FOR OTHER WIDTH AS WELL
482527
end
483528
else if (DATA_WIDTH_WRITE==36 && DATA_WIDTH_READ==18) begin
484-
fwft_data <= {{WR_DATA[33:32]},{WR_DATA[15:0]}} ; // DEVELOP LOGIC FOR OTHER WIDTH AS WELL
529+
fwft_data <= {{WR_DATA[17]},{WR_DATA[16:9]}, {WR_DATA[8]}, {WR_DATA[7:0]}} ; // DEVELOP LOGIC FOR OTHER WIDTH AS WELL
485530
end
486531
else if (DATA_WIDTH_WRITE==18 && DATA_WIDTH_READ==9) begin
487-
fwft_data <= {{WR_DATA[16]},{WR_DATA[7:0]}} ; // DEVELOP LOGIC FOR OTHER WIDTH AS WELL
532+
fwft_data <= {{WR_DATA[8]},{WR_DATA[7:0]}} ; // DEVELOP LOGIC FOR OTHER WIDTH AS WELL
488533
end
489534

490535
end
@@ -503,10 +548,10 @@ assign p_empty = (diff_ptr1 ==PROG_EMPTY_THRESH || diff_ptr1 <=PROG_EMPTY_THRESH
503548

504549
if(b_wptr_next==1 || b_wptr_next==4097 ) begin
505550
fwft_data [7:0] <= WR_DATA[7:0] ;
506-
fwft_data [16] <= WR_DATA[8] ;
551+
fwft_data [8] <= WR_DATA[8] ;
507552
end
508553
if(b_wptr_next==2 || b_wptr_next==4098 ) begin
509-
fwft_data [15:8] <= WR_DATA[7:0];
554+
fwft_data [16:9] <= WR_DATA[7:0];
510555
fwft_data [17] <= WR_DATA[8];
511556
end
512557
end
@@ -524,18 +569,18 @@ assign p_empty = (diff_ptr1 ==PROG_EMPTY_THRESH || diff_ptr1 <=PROG_EMPTY_THRESH
524569

525570
if(b_wptr_next==1 || b_wptr_next==4097) begin
526571
fwft_data [7:0] <= WR_DATA[7:0];
527-
fwft_data [32] <= WR_DATA[8];
572+
fwft_data [8] <= WR_DATA[8];
528573
end
529574
if(b_wptr_next==2 || b_wptr_next==4098) begin
530-
fwft_data [15:8] <= WR_DATA[7:0];
531-
fwft_data [33] <= WR_DATA[8];
575+
fwft_data [16:9] <= WR_DATA[7:0];
576+
fwft_data [17] <= WR_DATA[8];
532577
end
533578
if(b_wptr_next==3 || b_wptr_next==4099) begin
534-
fwft_data [23:16] <= WR_DATA[7:0] ;
535-
fwft_data [34] <= WR_DATA[8];
579+
fwft_data [25:18] <= WR_DATA[7:0] ;
580+
fwft_data [26] <= WR_DATA[8];
536581
end
537582
if(b_wptr_next==4 || b_wptr_next==4100) begin
538-
fwft_data [31:24] <= WR_DATA[7:0] ;
583+
fwft_data [34:27] <= WR_DATA[7:0] ;
539584
fwft_data [35] <= WR_DATA[8];
540585
end
541586

@@ -553,15 +598,19 @@ assign p_empty = (diff_ptr1 ==PROG_EMPTY_THRESH || diff_ptr1 <=PROG_EMPTY_THRESH
553598
fwft <= (EMPTY && WR_EN && !fwft)? 1 : fwft;
554599

555600
if(b_wptr_next==1 || b_wptr_next==4097 ) begin
556-
fwft_data [15:0] <= WR_DATA[15:0];
557-
fwft_data [32] <= WR_DATA[16];
558-
fwft_data [33] <= WR_DATA[17];
601+
// fwft_data [7:0] <= WR_DATA[7:0];
602+
// fwft_data [16:9] <= WR_DATA[16:9];
603+
// fwft_data [8] <= WR_DATA[8];
604+
// fwft_data [17] <= WR_DATA[17];
605+
fwft_data[17:0] <= WR_DATA;
559606

560607
end
561608
if(b_wptr_next==2 || b_wptr_next==4098 ) begin
562-
fwft_data [31:16] <= WR_DATA[15:0];
563-
fwft_data [34] <= WR_DATA[16];
564-
fwft_data [35] <= WR_DATA[17];
609+
// fwft_data [25:18] <= WR_DATA[7:0];
610+
// fwft_data [34:27] <= WR_DATA[16:9];
611+
// fwft_data [26] <= WR_DATA[8];
612+
// fwft_data [35] <= WR_DATA[17];
613+
fwft_data[35:18] <= WR_DATA;
565614
end
566615
end
567616

@@ -616,7 +665,24 @@ assign p_empty = (diff_ptr1 ==PROG_EMPTY_THRESH || diff_ptr1 <=PROG_EMPTY_THRESH
616665
end
617666
end
618667

619-
end : ASYNCRONOUS
668+
669+
always @(*) begin
670+
if (OVERFLOW) begin
671+
@(posedge WR_CLK) begin
672+
$fatal(1,"\n Error: OVERFLOW Happend, RESET THE FIFO FIRST \n", OVERFLOW );
673+
end
674+
end
675+
end
676+
677+
always @(*) begin
678+
if (UNDERFLOW) begin
679+
@(posedge RD_CLK) begin
680+
$fatal(1,"\n Error: UNDERFLOW Happend, RESET THE FIFO FIRST \n", UNDERFLOW );
681+
end
682+
end
683+
end
684+
685+
end : ASYNCRONOUS
620686
initial begin
621687
case(DATA_WRITE_WIDTH)
622688
9 ,

0 commit comments

Comments
 (0)