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

Subversion Repositories xulalx25soc

[/] [xulalx25soc/] [trunk/] [rtl/] [sdspi.v] - Diff between revs 90 and 100

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

Rev 90 Rev 100
Line 143... Line 143...
        reg             r_cmd_sent;
        reg             r_cmd_sent;
        reg     [31:0]   fifo_a_reg, fifo_b_reg;
        reg     [31:0]   fifo_a_reg, fifo_b_reg;
        //
        //
        reg             q_busy;
        reg             q_busy;
        //
        //
        reg     [7:0]    fifo_a_mem[((1<<(LGFIFOLN+2))-1):0];
        reg     [7:0]    fifo_a_mem_0[0:((1<<LGFIFOLN)-1)],
        reg     [7:0]    fifo_b_mem[((1<<(LGFIFOLN+2))-1):0];
                        fifo_a_mem_1[0:((1<<LGFIFOLN)-1)],
 
                        fifo_a_mem_2[0:((1<<LGFIFOLN)-1)],
 
                        fifo_a_mem_3[0:((1<<LGFIFOLN)-1)],
 
                        fifo_b_mem_0[0:((1<<LGFIFOLN)-1)],
 
                        fifo_b_mem_1[0:((1<<LGFIFOLN)-1)],
 
                        fifo_b_mem_2[0:((1<<LGFIFOLN)-1)],
 
                        fifo_b_mem_3[0:((1<<LGFIFOLN)-1)];
        reg     [(LGFIFOLN-1):0] fifo_wb_addr;
        reg     [(LGFIFOLN-1):0] fifo_wb_addr;
        reg     [(LGFIFOLN+1):0] rd_fifo_sd_addr;
        reg     [(LGFIFOLN+1):0] rd_fifo_sd_addr;
        reg     [(LGFIFOLN+1):0] wr_fifo_sd_addr;
        reg     [(LGFIFOLN+1):0] wr_fifo_sd_addr;
        //
        //
        reg     [(LGFIFOLN+1):0] ll_fifo_addr;
        reg     [(LGFIFOLN+1):0] ll_fifo_addr;
Line 523... Line 529...
        // Prepare reading of the FIFO for the WB bus read
        // Prepare reading of the FIFO for the WB bus read
        // Memory read #1
        // Memory read #1
        always @(posedge i_clk)
        always @(posedge i_clk)
        begin
        begin
                fifo_a_reg <= {
                fifo_a_reg <= {
                        fifo_a_mem[{ fifo_wb_addr, 2'b00 }],
                        fifo_a_mem_0[ fifo_wb_addr ],
                        fifo_a_mem[{ fifo_wb_addr, 2'b01 }],
                        fifo_a_mem_1[ fifo_wb_addr ],
                        fifo_a_mem[{ fifo_wb_addr, 2'b10 }],
                        fifo_a_mem_2[ fifo_wb_addr ],
                        fifo_a_mem[{ fifo_wb_addr, 2'b11 }] };
                        fifo_a_mem_3[ fifo_wb_addr ] };
                fifo_b_reg <= {
                fifo_b_reg <= {
                        fifo_b_mem[{ fifo_wb_addr, 2'b00 }],
                        fifo_b_mem_0[ fifo_wb_addr ],
                        fifo_b_mem[{ fifo_wb_addr, 2'b01 }],
                        fifo_b_mem_1[ fifo_wb_addr ],
                        fifo_b_mem[{ fifo_wb_addr, 2'b10 }],
                        fifo_b_mem_2[ fifo_wb_addr ],
                        fifo_b_mem[{ fifo_wb_addr, 2'b11 }] };
                        fifo_b_mem_3[ fifo_wb_addr ] };
        end
        end
 
 
        // Okay, now ... writing our FIFO ...
        // Okay, now ... writing our FIFO ...
        reg     pre_fifo_addr_inc_rd;
        reg     pre_fifo_addr_inc_rd;
        reg     pre_fifo_addr_inc_wr;
        reg     pre_fifo_addr_inc_wr;
Line 588... Line 594...
                pre_fifo_crc_a<= (ll_fifo_wr)&&(ll_out_stb)&&(ll_fifo_wr_state == 2'b01);
                pre_fifo_crc_a<= (ll_fifo_wr)&&(ll_out_stb)&&(ll_fifo_wr_state == 2'b01);
                pre_fifo_crc_b<= (ll_fifo_wr)&&(ll_out_stb)&&(ll_fifo_wr_state == 2'b10);
                pre_fifo_crc_b<= (ll_fifo_wr)&&(ll_out_stb)&&(ll_fifo_wr_state == 2'b10);
                clear_fifo_crc <= (cmd_stb)&&(i_wb_data[15]);
                clear_fifo_crc <= (cmd_stb)&&(i_wb_data[15]);
        end
        end
 
 
 
        reg                             fifo_a_wr, fifo_b_wr;
 
        reg     [3:0]                    fifo_a_wr_mask, fifo_b_wr_mask;
 
        reg     [(LGFIFOLN-1):0] fifo_a_wr_addr, fifo_b_wr_addr;
 
        reg     [31:0]                   fifo_a_wr_data, fifo_b_wr_data;
 
 
        initial         fifo_crc_err = 1'b0;
        initial         fifo_crc_err = 1'b0;
        always @(posedge i_clk)
        always @(posedge i_clk)
        begin // One and only memory write allowed
        begin // One and only memory write allowed
 
                fifo_a_wr <= 1'b0;
 
                fifo_a_wr_data <= { ll_out_dat, ll_out_dat, ll_out_dat, ll_out_dat };
                if ((write_stb)&&(i_wb_addr[1:0]==2'b10))
                if ((write_stb)&&(i_wb_addr[1:0]==2'b10))
                        {fifo_a_mem[{ fifo_wb_addr, 2'b00 }],
                begin
                        fifo_a_mem[{  fifo_wb_addr, 2'b01 }],
                        fifo_a_wr <= 1'b1;
                        fifo_a_mem[{  fifo_wb_addr, 2'b10 }],
                        fifo_a_wr_mask <= 4'b1111;
                        fifo_a_mem[{  fifo_wb_addr, 2'b11 }] }
                        fifo_a_wr_addr <= fifo_wb_addr;
                        <= i_wb_data;
                        fifo_a_wr_data <= i_wb_data;
                else if (pre_fifo_a_wr)
                end else if (pre_fifo_a_wr)
                        fifo_a_mem[{ ll_fifo_addr }] <= ll_out_dat;
                begin
 
                        fifo_a_wr <= 1'b1;
 
                        fifo_a_wr_addr <= ll_fifo_addr[(LGFIFOLN+1):2];
 
                        case(ll_fifo_addr[1:0])
 
                        2'b00: fifo_a_wr_mask <= 4'b0001;
 
                        2'b01: fifo_a_wr_mask <= 4'b0010;
 
                        2'b10: fifo_a_wr_mask <= 4'b0100;
 
                        2'b11: fifo_a_wr_mask <= 4'b1000;
 
                        endcase
 
                end
 
 
 
                if ((fifo_a_wr)&&(fifo_a_wr_mask[0]))
 
                        fifo_a_mem_0[fifo_a_wr_addr] <= fifo_a_wr_data[7:0];
 
                if ((fifo_a_wr)&&(fifo_a_wr_mask[1]))
 
                        fifo_a_mem_1[fifo_a_wr_addr] <= fifo_a_wr_data[15:8];
 
                if ((fifo_a_wr)&&(fifo_a_wr_mask[2]))
 
                        fifo_a_mem_2[fifo_a_wr_addr] <= fifo_a_wr_data[23:16];
 
                if ((fifo_a_wr)&&(fifo_a_wr_mask[3]))
 
                        fifo_a_mem_3[fifo_a_wr_addr] <= fifo_a_wr_data[31:24];
 
 
 
                fifo_b_wr <= 1'b0;
 
                fifo_b_wr_data <= { ll_out_dat, ll_out_dat, ll_out_dat, ll_out_dat };
                if ((write_stb)&&(i_wb_addr[1:0]==2'b11))
                if ((write_stb)&&(i_wb_addr[1:0]==2'b11))
                        {fifo_b_mem[{fifo_wb_addr, 2'b00 }],
                begin
                        fifo_b_mem[{ fifo_wb_addr, 2'b01 }],
                        fifo_b_wr <= 1'b1;
                        fifo_b_mem[{ fifo_wb_addr, 2'b10 }],
                        fifo_b_wr_mask <= 4'b1111;
                        fifo_b_mem[{ fifo_wb_addr, 2'b11 }] }
                        fifo_b_wr_addr <= fifo_wb_addr;
                        <= i_wb_data;
                        fifo_b_wr_data <= i_wb_data;
                else if (pre_fifo_b_wr)
                end else if (pre_fifo_b_wr)
                        fifo_b_mem[{ ll_fifo_addr }] <= ll_out_dat;
                begin
 
                        fifo_b_wr <= 1'b1;
 
                        fifo_b_wr_addr <= ll_fifo_addr[(LGFIFOLN+1):2];
 
                        case(ll_fifo_addr[1:0])
 
                        2'b00: fifo_b_wr_mask <= 4'b0001;
 
                        2'b01: fifo_b_wr_mask <= 4'b0010;
 
                        2'b10: fifo_b_wr_mask <= 4'b0100;
 
                        2'b11: fifo_b_wr_mask <= 4'b1000;
 
                        endcase
 
                end
 
 
 
                if ((fifo_b_wr)&&(fifo_b_wr_mask[0]))
 
                        fifo_b_mem_0[fifo_b_wr_addr] <= fifo_b_wr_data[7:0];
 
                if ((fifo_b_wr)&&(fifo_b_wr_mask[1]))
 
                        fifo_b_mem_1[fifo_b_wr_addr] <= fifo_b_wr_data[15:8];
 
                if ((fifo_b_wr)&&(fifo_b_wr_mask[2]))
 
                        fifo_b_mem_2[fifo_b_wr_addr] <= fifo_b_wr_data[23:16];
 
                if ((fifo_b_wr)&&(fifo_b_wr_mask[3]))
 
                        fifo_b_mem_3[fifo_b_wr_addr] <= fifo_b_wr_data[31:24];
 
 
                if (~r_cmd_busy)
                if (~r_cmd_busy)
                        ll_fifo_wr_complete <= 1'b0;
                        ll_fifo_wr_complete <= 1'b0;
 
 
                if (~r_cmd_busy)
                if (~r_cmd_busy)
Line 632... Line 683...
                        fifo_crc_err <= 1'b0;
                        fifo_crc_err <= 1'b0;
        end
        end
 
 
        always @(posedge i_clk)
        always @(posedge i_clk)
        begin // Second memory read, this time for the FIFO
        begin // Second memory read, this time for the FIFO
                fifo_a_byte <= fifo_a_mem[ ll_fifo_addr ];
                case(ll_fifo_addr[1:0])
                fifo_b_byte <= fifo_b_mem[ ll_fifo_addr ];
                2'b00: begin
 
                        fifo_a_byte<=fifo_a_mem_0[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        fifo_b_byte<=fifo_b_mem_0[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        end
 
                2'b01: begin
 
                        fifo_a_byte<=fifo_a_mem_1[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        fifo_b_byte<=fifo_b_mem_1[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        end
 
                2'b10: begin
 
                        fifo_a_byte<=fifo_a_mem_2[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        fifo_b_byte<=fifo_b_mem_2[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        end
 
                2'b11: begin
 
                        fifo_a_byte<=fifo_a_mem_3[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        fifo_b_byte<=fifo_b_mem_3[ll_fifo_addr[(LGFIFOLN+1):2]];
 
                        end
 
                endcase
        end
        end
 
 
        reg     [(LGFIFOLN-1):0] r_blklimit;
        reg     [(LGFIFOLN-1):0] r_blklimit;
        wire    [(LGFIFOLN+1):0] w_blklimit;
        wire    [(LGFIFOLN+1):0] w_blklimit;
        always @(posedge i_clk)
        always @(posedge i_clk)

powered by: WebSVN 2.1.0

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