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

Subversion Repositories sdcard_mass_storage_controller

[/] [sdcard_mass_storage_controller/] [trunk/] [rtl/] [sdc_fifo/] [verilog/] [sd_fifo.v] - Diff between revs 6 and 10

Show entire file | Details | Blame | View Log

Rev 6 Rev 10
Line 1... Line 1...
 
 
 No newline at end of file
 No newline at end of file
 
module sd_fifo
 
  (
 
    input  [1:0] wb_adr_i,
 
    input [7:0]  wb_dat_i,
 
    output [7:0] wb_dat_o,
 
    input        wb_we_i,
 
    input        wb_re_i,
 
    input        wb_clk,
 
    input [1:0]  sd_adr_i,
 
    input [7:0]  sd_dat_i,
 
    output [7:0] sd_dat_o,
 
    input        sd_we_i,
 
    input        sd_re_i,
 
    input        sd_clk,
 
    output [1:4] fifo_full,
 
    output [1:4] fifo_empty,
 
    input        rst
 
   );
 
 
 
   wire [8:0]     wptr1, rptr1, wptr2, rptr2, wptr3, rptr3, wptr4, rptr4;
 
   wire [8:0]     wadr1, radr1, wadr2, radr2, wadr3, radr3, wadr4, radr4;
 
 
 
   wire          dpram_we_a, dpram_we_b;
 
   wire [10:0]    dpram_a_a, dpram_a_b;
 
 
 
   sd_counter wptr1a
 
     (
 
      .q(wptr1),
 
      .q_bin(wadr1),
 
      .cke((wb_adr_i==2'd0) & wb_we_i & !fifo_full[1]),
 
      .clk(wb_clk),
 
      .rst(rst)
 
      );
 
 
 
   sd_counter rptr1a
 
     (
 
      .q(rptr1),
 
      .q_bin(radr1),
 
      .cke((sd_adr_i==2'd0) & sd_re_i & !fifo_empty[1]),
 
      .clk(sd_clk),
 
      .rst(rst)
 
      );
 
 
 
  versatile_fifo_async_cmp
 
    #
 
    (
 
     .ADDR_WIDTH(9)
 
     )
 
    cmp1
 
    (
 
      .wptr(wptr1),
 
      .rptr(rptr1),
 
      .fifo_empty(fifo_empty[1]),
 
      .fifo_full(fifo_full[1]),
 
      .wclk(wb_clk),
 
      .rclk(sd_clk),
 
      .rst(rst)
 
      );
 
 
 
   sd_counter wptr2a
 
     (
 
      .q(wptr2),
 
      .q_bin(wadr2),
 
      .cke((sd_adr_i==2'd1) & sd_we_i & !fifo_full[2]),
 
      .clk(sd_clk),
 
      .rst(rst)
 
      );
 
 
 
   sd_counter rptr2a
 
     (
 
      .q(rptr2),
 
      .q_bin(radr2),
 
      .cke((wb_adr_i==2'd1) & wb_re_i & !fifo_empty[2]),
 
      .clk(wb_clk),
 
      .rst(rst)
 
      );
 
 
 
  versatile_fifo_async_cmp
 
    #
 
    (
 
     .ADDR_WIDTH(9)
 
     )
 
    cmp2
 
    (
 
      .wptr(wptr2),
 
      .rptr(rptr2),
 
      .fifo_empty(fifo_empty[2]),
 
      .fifo_full(fifo_full[2]),
 
      .wclk(sd_clk),
 
      .rclk(wb_clk),
 
      .rst(rst)
 
      );
 
 
 
   sd_counter wptr3a
 
     (
 
      .q(wptr3),
 
      .q_bin(wadr3),
 
      .cke((wb_adr_i==2'd2) & wb_we_i & !fifo_full[3]),
 
      .clk(wb_clk),
 
      .rst(rst)
 
      );
 
 
 
   sd_counter rptr3a
 
     (
 
      .q(rptr3),
 
      .q_bin(radr3),
 
      .cke((sd_adr_i==2'd2) & sd_re_i & !fifo_empty[3]),
 
      .clk(sd_clk),
 
      .rst(rst)
 
      );
 
 
 
  versatile_fifo_async_cmp
 
    #
 
    (
 
     .ADDR_WIDTH(9)
 
     )
 
    cmp3
 
    (
 
      .wptr(wptr3),
 
      .rptr(rptr3),
 
      .fifo_empty(fifo_empty[3]),
 
      .fifo_full(fifo_full[3]),
 
      .wclk(wb_clk),
 
      .rclk(sd_clk),
 
      .rst(rst)
 
      );
 
 
 
   sd_counter wptr4a
 
     (
 
      .q(wptr4),
 
      .q_bin(wadr4),
 
      .cke((sd_adr_i==2'd3) & sd_we_i & !fifo_full[4]),
 
      .clk(sd_clk),
 
      .rst(rst)
 
      );
 
 
 
   sd_counter rptr4a
 
     (
 
      .q(rptr4),
 
      .q_bin(radr4),
 
      .cke((wb_adr_i==2'd3) & wb_re_i & !fifo_empty[4]),
 
      .clk(wb_clk),
 
      .rst(rst)
 
      );
 
 
 
  versatile_fifo_async_cmp
 
    #
 
    (
 
     .ADDR_WIDTH(9)
 
     )
 
    cmp4
 
    (
 
      .wptr(wptr4),
 
      .rptr(rptr4),
 
      .fifo_empty(fifo_empty[4]),
 
      .fifo_full(fifo_full[4]),
 
      .wclk(sd_clk),
 
      .rclk(wb_clk),
 
      .rst(rst)
 
      );
 
 
 
   assign dpram_we_a = ((wb_adr_i==2'd0) & !fifo_full[1]) ? wb_we_i :
 
                       ((wb_adr_i==2'd2) & !fifo_full[3]) ? wb_we_i :
 
                       1'b0;
 
   assign dpram_we_b = ((sd_adr_i==2'd1) & !fifo_full[2]) ? sd_we_i :
 
                       ((sd_adr_i==2'd3) & !fifo_full[4]) ? sd_we_i :
 
                       1'b0;
 
   assign dpram_a_a = (wb_adr_i==2'd0) ? {wb_adr_i,wadr1} :
 
                      (wb_adr_i==2'd1) ? {wb_adr_i,radr2} :
 
                      (wb_adr_i==2'd2) ? {wb_adr_i,wadr3} :
 
                      {wb_adr_i,radr4};
 
   assign dpram_a_b = (sd_adr_i==2'd0) ? {sd_adr_i,radr1} :
 
                      (sd_adr_i==2'd1) ? {sd_adr_i,wadr2} :
 
                      (sd_adr_i==2'd2) ? {sd_adr_i,radr3} : //(sd_adr_i==2'd3) ? {sd_adr_i,radr3} :--->(sd_adr_i==2'd2) ? {sd_adr_i,radr3} :
 
                      {sd_adr_i,wadr4};
 
 
 
 //versatile_fifo_dual_port_ram_dc_dw
 
   versatile_fifo_dptam_dw
 
     dpram
 
     (
 
      .d_a(wb_dat_i),
 
      .q_a(wb_dat_o),
 
      .adr_a(dpram_a_a),
 
      .we_a(dpram_we_a),
 
      .clk_a(wb_clk),
 
      .q_b(sd_dat_o),
 
      .adr_b(dpram_a_b),
 
      .d_b(sd_dat_i),
 
      .we_b(dpram_we_b),
 
      .clk_b(sd_clk)
 
      );
 
 
 
endmodule // sd_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.