OpenCores
URL https://opencores.org/ocsvn/srdydrdy_lib/srdydrdy_lib/trunk

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [rtl/] [verilog/] [buffers/] [sd_fifo_tail_b.v] - Diff between revs 2 and 6

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 6
Line 62... Line 62...
     input                p_abort,
     input                p_abort,
     input [width-1:0]    mem_rd_data,
     input [width-1:0]    mem_rd_data,
     output [width-1:0]   p_data
     output [width-1:0]   p_data
     );
     );
 
 
  reg [asz-1:0]           cur_rdptr;
 
  reg [asz-1:0]           nxt_cur_rdptr;
  reg [asz-1:0]           nxt_cur_rdptr;
  reg [asz-1:0]           cur_rdptr_p1;
  reg [asz-1:0]           cur_rdptr_p1;
  reg [asz-1:0]    com_rdptr;
 
  reg                   empty, full;
  reg                   empty, full;
 
 
  reg                   p_srdy;
 
  reg                   nxt_irdy;
  reg                   nxt_irdy;
 
 
  reg [width-1:0]       hold_a, hold_b;
  reg [width-1:0]       hold_a, hold_b;
  reg                   valid_a, valid_b;
  reg                   valid_a, valid_b;
  reg                   prev_re;
  reg                   prev_re;
  reg [asz:0]           tmp_usage;
  reg [asz:0]           tmp_usage;
  reg [asz:0]           fifo_size;
  reg [asz:0]           fifo_size;
 
  wire                  rbuf1_drdy;
 
  wire                  ip_srdy, ip_drdy;
 
  wire [width-1:0]       ip_data;
 
 
  // Stage 1 -- Read pipeline
  // Stage 1 -- Read pipeline
  // issue a read if:
  // issue a read if:
  //   1) we are enabled
  //   1) we are enabled
  //   2) valid_a is 0, OR
  //   2) valid_a is 0, OR
Line 100... Line 100...
      if (commit && p_abort)
      if (commit && p_abort)
        begin
        begin
          nxt_cur_rdptr = com_rdptr;
          nxt_cur_rdptr = com_rdptr;
          mem_re = 0;
          mem_re = 0;
        end
        end
      else if (enable & !empty & (!valid_a | (!prev_re & !valid_b) |
//      else if (enable & !empty & (!valid_a | (!prev_re & !valid_b) | 
                             (valid_a & valid_b & p_drdy)))
//                             (valid_a & valid_b & p_drdy)))
 
      else if (enable & !empty & ip_drdy)
        begin
        begin
          nxt_cur_rdptr = cur_rdptr_p1;
          nxt_cur_rdptr = cur_rdptr_p1;
          mem_re = 1;
          mem_re = 1;
        end
        end
      else
      else
Line 157... Line 158...
  // Stage 2 -- read buffering
  // Stage 2 -- read buffering
  always @(`SDLIB_CLOCKING)
  always @(`SDLIB_CLOCKING)
    begin
    begin
      if (reset)
      if (reset)
        begin
        begin
          valid_a <= `SDLIB_DELAY 0;
 
          hold_a  <= `SDLIB_DELAY 0;
 
          prev_re <= `SDLIB_DELAY 0;
          prev_re <= `SDLIB_DELAY 0;
        end
        end
      else
      else
        begin
        begin
          if (commit && p_abort)
          if (commit && p_abort)
            prev_re <= `SDLIB_DELAY 0;
            prev_re <= `SDLIB_DELAY 0;
          else
          else
            prev_re <= `SDLIB_DELAY mem_re;
            prev_re <= `SDLIB_DELAY mem_re;
 
        end // else: !if(reset)
          if (commit && p_abort)
    end // always @ (`SDLIB_CLOCKING)
            valid_a <= `SDLIB_DELAY 0;
 
          else if (prev_re)
 
            begin
 
              valid_a <= `SDLIB_DELAY 1;
 
              hold_a  <= `SDLIB_DELAY mem_rd_data;
 
            end
 
          else if (!valid_b | p_drdy)
 
            valid_a <= `SDLIB_DELAY 0;
 
        end
 
    end // always @ (posedge clk or posedge reset)
 
 
 
  generate
  generate
    if (commit == 1)
    if (commit == 1)
      begin : gen_s2
 
        always @(posedge clk)
 
          begin
 
            if (prev_re)
 
              rdaddr_a <= `SDLIB_DELAY rdaddr_s0;
 
          end
 
      end
 
  endgenerate
 
 
 
  // Stage 3 -- output irdy/trdy
 
  always @(`SDLIB_CLOCKING)
 
    begin
 
      if (reset)
 
        begin
 
          valid_b <= `SDLIB_DELAY 0;
 
          hold_b  <= `SDLIB_DELAY 0;
 
        end
 
      else
 
        begin
 
          if (commit && p_abort)
 
            valid_b <= `SDLIB_DELAY 0;
 
          else if (valid_a & (!valid_b | p_drdy))
 
            begin
            begin
              valid_b <= `SDLIB_DELAY 1;
        wire [asz-1:0] ip_rdaddr, p_rdaddr;
              hold_b  <= `SDLIB_DELAY hold_a;
 
            end
 
          else if (valid_b & p_drdy)
 
            valid_b <= `SDLIB_DELAY 0;
 
        end
 
    end // always @ (posedge clk or posedge reset)
 
 
 
  generate
        sd_input #(asz+width) rbuf1
    if (commit == 1)
          (.clk (clk), .reset (p_abort | reset),
      begin : gen_s3
           .c_srdy (prev_re),
        always @(posedge clk)
           .c_drdy (rbuf1_drdy),
          begin
           .c_data ({rdaddr_s0,mem_rd_data}),
            if (valid_a & (!valid_b | p_drdy))
           .ip_srdy (ip_srdy), .ip_drdy (ip_drdy),
              rdaddr_b <= `SDLIB_DELAY rdaddr_a;
           .ip_data ({ip_rdaddr,ip_data}));
          end
 
 
        sd_output #(asz+width) rbuf2
 
          (.clk (clk), .reset (p_abort | reset),
 
           .ic_srdy (ip_srdy),
 
           .ic_drdy (ip_drdy),
 
           .ic_data ({ip_rdaddr,ip_data}),
 
           .p_srdy (p_srdy), .p_drdy (p_drdy),
 
           .p_data ({p_rdaddr,p_data}));
 
 
        always @*
        always @*
          begin
          begin
            if (p_commit)
            if (p_commit)
              nxt_com_rdptr = rdaddr_b;
              nxt_com_rdptr = p_rdaddr;
            else
            else
              nxt_com_rdptr = com_rdptr;
              nxt_com_rdptr = com_rdptr;
          end
          end
      end
      end // if (commit == 1)
 
    else
 
      begin
 
        sd_input #(width) rbuf1
 
          (.clk (clk), .reset (p_abort | reset),
 
           .c_srdy (prev_re),
 
           .c_drdy (rbuf1_drdy),
 
           .c_data (mem_rd_data),
 
           .ip_srdy (ip_srdy), .ip_drdy (ip_drdy),
 
           .ip_data (ip_data));
 
 
 
        sd_output #(width) rbuf2
 
          (.clk (clk), .reset (p_abort | reset),
 
           .ic_srdy (ip_srdy),
 
           .ic_drdy (ip_drdy),
 
           .ic_data (ip_data),
 
           .p_srdy (p_srdy), .p_drdy (p_drdy),
 
           .p_data (p_data));
 
      end // else: !if(commit == 1)
  endgenerate
  endgenerate
 
 
  assign p_srdy = valid_b;
 
  assign p_data = hold_b;
 
 
 
endmodule // it_fifo
endmodule // it_fifo
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.