| Line 62... | Line 62... | 
      
        | output                    almost_empty;
 | output                    almost_empty;
 | 
      
        | output                    empty;
 | output                    empty;
 | 
      
        | output  [CNT_WIDTH-1:0]   cnt;
 | output  [CNT_WIDTH-1:0]   cnt;
 | 
      
        |  
 |  
 | 
      
        |  
 |  
 | 
      
        |  
 | reg     [CNT_WIDTH-1:0]   read_pointer;
 | 
      
        | reg [CNT_WIDTH-1:0]        cnt;
 | reg [CNT_WIDTH-1:0]        cnt;
 | 
      
        |    reg                    final_read;
 |    reg                    final_read;
 | 
      
        |  
 |  
 | 
      
        | always @ (posedge clk or posedge reset)
 | always @ (posedge clk or posedge reset)
 | 
      
        | begin
 | begin
 | 
      
        | Line 111... | Line 111... | 
      
        |      if (reset)
 |      if (reset)
 | 
      
        |        waddr <= 0;
 |        waddr <= 0;
 | 
      
        |      else if (write)
 |      else if (write)
 | 
      
        |        waddr <= waddr + 1;
 |        waddr <= waddr + 1;
 | 
      
        |  
 |  
 | 
      
        |    reg                 read_reg;
 |   | 
      
        |    always @(posedge clk)
 |   | 
      
        |      read_reg <= read;
 |   | 
      
        |  
 |   | 
      
        |    always @(posedge clk)
 |    always @(posedge clk)
 | 
      
        |      if (reset)
 |      if (reset)
 | 
      
        |        raddr <= 0;
 |        raddr <= 0;
 | 
      
        |      else if (clear)
 |      else if (clear)
 | 
      
        |        raddr <= waddr;
 |        raddr <= waddr;
 | 
      
        | Line 151... | Line 147... | 
      
        |        final_read <= 1; // Indicate last read data has been output
 |        final_read <= 1; // Indicate last read data has been output
 | 
      
        |  
 |  
 | 
      
        |    assign empty = ~(|cnt);
 |    assign empty = ~(|cnt);
 | 
      
        |    assign almost_empty = cnt==1;
 |    assign almost_empty = cnt==1;
 | 
      
        |    assign full  = {{32-CNT_WIDTH{1'b0}},cnt} == (DEPTH-1);
 |    assign full  = {{32-CNT_WIDTH{1'b0}},cnt} == (DEPTH-1);
 | 
      
        |    assign almost_full  = &cnt[CNT_WIDTH-1:0];
 |    //assign almost_full  = &cnt[CNT_WIDTH-1:0];
 | 
      
        |   |    assign almost_full  = {{32-CNT_WIDTH{1'b0}},cnt} == (DEPTH-2);
 | 
      
        |   |  
 | 
      
        |   |  
 | 
      
        |   |  
 | 
      
        |   | always @ (posedge clk or posedge reset)
 | 
      
        |   | begin
 | 
      
        |   |   if(reset)
 | 
      
        |   |     read_pointer <= 0;
 | 
      
        |   |   else
 | 
      
        |   |   if(clear)
 | 
      
        |   |     // Begin read pointer at 1
 | 
      
        |   |     read_pointer <= { {(CNT_WIDTH-1){1'b0}}, 1'b1};
 | 
      
        |   |   else
 | 
      
        |   |   if(read & ~empty)
 | 
      
        |   |     read_pointer <= read_pointer + 1'b1;
 | 
      
        |   | end
 | 
      
        |   |  
 | 
      
        |  
 |  
 | 
      
        | `else // !`ifdef ETH_FIFO_GENERIC
 | `else // !`ifdef ETH_FIFO_GENERIC
 | 
      
        |  
 |  
 | 
      
        | reg     [CNT_WIDTH-1:0]   read_pointer;
 |   | 
      
        | reg     [CNT_WIDTH-1:0]   write_pointer;
 | reg     [CNT_WIDTH-1:0]   write_pointer;
 | 
      
        |  
 |  
 | 
      
        |  
 |  
 | 
      
        | always @ (posedge clk or posedge reset)
 | always @ (posedge clk or posedge reset)
 | 
      
        | begin
 | begin
 | 
      
        |   if(reset)
 |   if(reset)
 | 
      
        |     read_pointer <= 0;
 |     read_pointer <= 0;
 | 
      
        |   else
 |   else
 | 
      
        |   if(clear)
 |   if(clear)
 | 
      
        |     //read_pointer <= { {(CNT_WIDTH-1){1'b0}}, read};
 |     read_pointer <= { {(CNT_WIDTH-1){1'b0}}, read};
 | 
      
        |     read_pointer <= { {(CNT_WIDTH-1){1'b0}}, 1'b1};
 |   | 
      
        |   else
 |   else
 | 
      
        |   if(read & ~empty)
 |   if(read & ~empty)
 | 
      
        |     read_pointer <= read_pointer + 1'b1;
 |     read_pointer <= read_pointer + 1'b1;
 | 
      
        | end
 | end
 | 
      
        |  
 |  
 | 
      
        | Line 185... | Line 196... | 
      
        |   if(write & ~full)
 |   if(write & ~full)
 | 
      
        |     write_pointer <= write_pointer + 1'b1;
 |     write_pointer <= write_pointer + 1'b1;
 | 
      
        | end
 | end
 | 
      
        |  
 |  
 | 
      
        | `ifdef ETH_FIFO_XILINX
 | `ifdef ETH_FIFO_XILINX
 | 
      
        |   |  
 | 
      
        |   |   generate
 | 
      
        |   |      if (CNT_WIDTH==4)
 | 
      
        |   |        begin
 | 
      
        |   xilinx_dist_ram_16x32 fifo
 |   xilinx_dist_ram_16x32 fifo
 | 
      
        |   ( .data_out(data_out),
 |   ( .data_out(data_out),
 | 
      
        |     .we(write & ~full),
 |     .we(write & ~full),
 | 
      
        |     .data_in(data_in),
 |     .data_in(data_in),
 | 
      
        |     .read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer),
 |               .read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer[3:0]),
 | 
      
        |     .write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer),
 |               .write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer[3:0]),
 | 
      
        |     .wclk(clk)
 |     .wclk(clk)
 | 
      
        |   );
 |   );
 | 
      
        |   |        end // if (CNT_WIDTH==4)
 | 
      
        |   |      else if (CNT_WIDTH==6)
 | 
      
        |   |        begin
 | 
      
        |   |  
 | 
      
        |   |           wire  [DATA_WIDTH-1:0]  data_out0;
 | 
      
        |   |           wire [DATA_WIDTH-1:0]   data_out1;
 | 
      
        |   |           wire [DATA_WIDTH-1:0]   data_out2;
 | 
      
        |   |           wire [DATA_WIDTH-1:0]   data_out3;
 | 
      
        |   |  
 | 
      
        |   |           wire                    ramsel0,ramsel1,ramsel2,ramsel3;
 | 
      
        |   |  
 | 
      
        |   |           assign ramsel0 = (read_pointer[5:4]==2'b00);
 | 
      
        |   |           assign ramsel1 = (read_pointer[5:4]==2'b01);
 | 
      
        |   |           assign ramsel2 = (read_pointer[5:4]==2'b10);
 | 
      
        |   |           assign ramsel3 = (read_pointer[5:4]==2'b11);
 | 
      
        |   |  
 | 
      
        |   |           assign data_out =  ramsel3 ? data_out3 :
 | 
      
        |   |                              ramsel2 ? data_out2 :
 | 
      
        |   |                              ramsel1 ? data_out1 : data_out0;
 | 
      
        |   |  
 | 
      
        |   |           xilinx_dist_ram_16x32 fifo0
 | 
      
        |   |             ( .data_out(data_out0),
 | 
      
        |   |               .we((write & ~full) & ramsel0),
 | 
      
        |   |               .data_in(data_in),
 | 
      
        |   |               .read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer[3:0]),
 | 
      
        |   |               .write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer[3:0]),
 | 
      
        |   |               .wclk(clk)
 | 
      
        |   |               );
 | 
      
        |   |  
 | 
      
        |   |           xilinx_dist_ram_16x32 fifo1
 | 
      
        |   |             ( .data_out(data_out1),
 | 
      
        |   |               .we(write & ~full & ramsel1),
 | 
      
        |   |               .data_in(data_in),
 | 
      
        |   |               .read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer[3:0]),
 | 
      
        |   |               .write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer[3:0]),
 | 
      
        |   |               .wclk(clk)
 | 
      
        |   |               );
 | 
      
        |   |  
 | 
      
        |   |           xilinx_dist_ram_16x32 fifo2
 | 
      
        |   |             ( .data_out(data_out2),
 | 
      
        |   |               .we(write & ~full & ramsel2),
 | 
      
        |   |               .data_in(data_in),
 | 
      
        |   |               .read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer[3:0]),
 | 
      
        |   |               .write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer[3:0]),
 | 
      
        |   |               .wclk(clk)
 | 
      
        |   |               );
 | 
      
        |   |  
 | 
      
        |   |           xilinx_dist_ram_16x32 fifo3
 | 
      
        |   |             ( .data_out(data_out3),
 | 
      
        |   |               .we(write & ~full & ramsel3),
 | 
      
        |   |               .data_in(data_in),
 | 
      
        |   |               .read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer[3:0]),
 | 
      
        |   |               .write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer[3:0]),
 | 
      
        |   |               .wclk(clk)
 | 
      
        |   |               );
 | 
      
        |   |        end // if (CNT_WIDTH==6)
 | 
      
        |   |   endgenerate
 | 
      
        |   |  
 | 
      
        |   |  
 | 
      
        |   |  
 | 
      
        |   |  
 | 
      
        |   |  
 | 
      
        | `else   // !ETH_FIFO_XILINX
 | `else   // !ETH_FIFO_XILINX
 | 
      
        | `ifdef ETH_ALTERA_ALTSYNCRAM
 | `ifdef ETH_ALTERA_ALTSYNCRAM
 | 
      
        |   altera_dpram_16x32    altera_dpram_16x32_inst
 |   altera_dpram_16x32    altera_dpram_16x32_inst
 | 
      
        |   (
 |   (
 | 
      
        |         .data             (data_in),
 |         .data             (data_in),
 |