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

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [rtl/] [RTL_VB/] [fifo_rx.v] - Diff between revs 33 and 34

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

Rev 33 Rev 34
Line 52... Line 52...
        reg [AWIDTH-1:0] rd_ptr;
        reg [AWIDTH-1:0] rd_ptr;
 
 
        reg block_read;
        reg block_read;
        reg block_write;
        reg block_write;
 
 
        wire [AWIDTH-1:0] wr;
 
        wire [AWIDTH-1:0] rd;
 
 
 
        reg [AWIDTH-1:0] credit_counter;
        reg [AWIDTH-1:0] credit_counter;
 
 
//Write pointer
//Write pointer
        always@(posedge clock or negedge reset)
        always@(posedge clock or negedge reset)
        begin
        begin
                if (!reset)
                if (!reset)
                begin
                begin
                        wr_ptr <= {(AWIDTH){1'b0}};
                        wr_ptr <= {(AWIDTH){1'b0}};
 
                        mem[0] <= {(DWIDTH){1'b0}};
 
                        mem[1] <= {(DWIDTH){1'b0}};
 
                        mem[2] <= {(DWIDTH){1'b0}};
 
                        mem[3] <= {(DWIDTH){1'b0}};
 
                        mem[4] <= {(DWIDTH){1'b0}};
 
                        mem[5] <= {(DWIDTH){1'b0}};
 
                        mem[6] <= {(DWIDTH){1'b0}};
 
                        mem[7] <= {(DWIDTH){1'b0}};
 
                        mem[8] <= {(DWIDTH){1'b0}};
 
                        mem[9] <= {(DWIDTH){1'b0}};
 
                        mem[10] <= {(DWIDTH){1'b0}};
 
 
 
                        mem[11] <= {(DWIDTH){1'b0}};
 
                        mem[12] <= {(DWIDTH){1'b0}};
 
                        mem[13] <= {(DWIDTH){1'b0}};
 
                        mem[14] <= {(DWIDTH){1'b0}};
 
                        mem[15] <= {(DWIDTH){1'b0}};
 
                        mem[16] <= {(DWIDTH){1'b0}};
 
                        mem[17] <= {(DWIDTH){1'b0}};
 
                        mem[18] <= {(DWIDTH){1'b0}};
 
                        mem[19] <= {(DWIDTH){1'b0}};
 
                        mem[20] <= {(DWIDTH){1'b0}};
 
                        mem[21] <= {(DWIDTH){1'b0}};
 
 
 
                        mem[22] <= {(DWIDTH){1'b0}};
 
                        mem[23] <= {(DWIDTH){1'b0}};
 
                        mem[24] <= {(DWIDTH){1'b0}};
 
                        mem[25] <= {(DWIDTH){1'b0}};
 
                        mem[26] <= {(DWIDTH){1'b0}};
 
                        mem[27] <= {(DWIDTH){1'b0}};
 
                        mem[28] <= {(DWIDTH){1'b0}};
 
                        mem[29] <= {(DWIDTH){1'b0}};
 
                        mem[30] <= {(DWIDTH){1'b0}};
 
                        mem[31] <= {(DWIDTH){1'b0}};
 
                        mem[32] <= {(DWIDTH){1'b0}};
 
 
 
 
 
                        mem[33] <= {(DWIDTH){1'b0}};
 
                        mem[34] <= {(DWIDTH){1'b0}};
 
                        mem[35] <= {(DWIDTH){1'b0}};
 
                        mem[36] <= {(DWIDTH){1'b0}};
 
                        mem[37] <= {(DWIDTH){1'b0}};
 
                        mem[38] <= {(DWIDTH){1'b0}};
 
                        mem[39] <= {(DWIDTH){1'b0}};
 
                        mem[40] <= {(DWIDTH){1'b0}};
 
                        mem[41] <= {(DWIDTH){1'b0}};
 
                        mem[42] <= {(DWIDTH){1'b0}};
 
                        mem[43] <= {(DWIDTH){1'b0}};
 
 
 
                        mem[44] <= {(DWIDTH){1'b0}};
 
                        mem[45] <= {(DWIDTH){1'b0}};
 
                        mem[46] <= {(DWIDTH){1'b0}};
 
                        mem[47] <= {(DWIDTH){1'b0}};
 
                        mem[48] <= {(DWIDTH){1'b0}};
 
                        mem[49] <= {(DWIDTH){1'b0}};
 
                        mem[50] <= {(DWIDTH){1'b0}};
 
                        mem[51] <= {(DWIDTH){1'b0}};
 
                        mem[52] <= {(DWIDTH){1'b0}};
 
                        mem[53] <= {(DWIDTH){1'b0}};
 
                        mem[54] <= {(DWIDTH){1'b0}};
 
 
 
                        mem[55] <= {(DWIDTH){1'b0}};
 
                        mem[56] <= {(DWIDTH){1'b0}};
 
                        mem[57] <= {(DWIDTH){1'b0}};
 
                        mem[58] <= {(DWIDTH){1'b0}};
 
                        mem[59] <= {(DWIDTH){1'b0}};
 
                        mem[60] <= {(DWIDTH){1'b0}};
 
                        mem[61] <= {(DWIDTH){1'b0}};
 
                        mem[62] <= {(DWIDTH){1'b0}};
 
                        mem[63] <= {(DWIDTH){1'b0}};
                        block_write <= 1'b0;
                        block_write <= 1'b0;
                        overflow_credit_error<=1'b0;
                        overflow_credit_error<=1'b0;
                end
                end
                else
                else
                begin
                begin
                        if(block_write)
                        if(block_write)
                        begin
                        begin
                                if(!wr_en)
                                if(!wr_en)
 
                                begin
                                        block_write <= 1'b0;
                                        block_write <= 1'b0;
 
                                        wr_ptr <= wr_ptr + 6'd1;
 
                                end
 
                                //mem[wr_ptr-6'd1]<=data_in;
                        end
                        end
                        else if (wr_en && !f_full)
                        else if (wr_en && !f_full)
                        begin
                        begin
                                block_write <= 1'b1;
                                block_write <= 1'b1;
                                mem[wr_ptr]<=data_in;
                                mem[wr_ptr]<=data_in;
                                wr_ptr <= wr;
 
                        end
                        end
 
 
                        if(wr_en && credit_counter > 6'd55)
                        if(wr_en && credit_counter > 6'd55)
                        begin
                        begin
 
 
Line 102... Line 173...
                        credit_counter <= 6'd55;
                        credit_counter <= 6'd55;
                end
                end
                else
                else
                begin
                begin
 
 
                        if (wr_en && !f_full && !block_write)
                        if((wr_en && !f_full && !block_write) && (rd_en && !f_empty && !block_read))
                        begin
 
                                if(rd_en && !f_empty && !block_read)
 
                                begin
                                begin
                                        counter <= counter;
                                if(rd_ptr == 6'd8 || rd_ptr == 6'd16 || rd_ptr == 6'd24 || rd_ptr == 6'd32 || rd_ptr == 6'd40 || rd_ptr == 6'd48 || rd_ptr == 6'd56 || rd_ptr == 6'd63)
                                end
                                        credit_counter   <= credit_counter - 6'd1 + 6'd8;
                                else
                                else
                                begin
                                        credit_counter   <= credit_counter - 6'd1;
                                        counter <= counter + 6'd1;
 
                                end
                                end
 
                        else if (wr_en && !f_full && !block_write)
 
                        begin
                                credit_counter <= credit_counter - 6'd1;
                                credit_counter <= credit_counter - 6'd1;
 
 
                        end
                        end
                        else if(rd_en && !f_empty && !block_read)
                        else if(rd_en && !f_empty && !block_read)
                        begin
                        begin
                                if(rd_ptr == 6'd8 || rd_ptr == 6'd16 || rd_ptr == 6'd24 || rd_ptr == 6'd32 || rd_ptr == 6'd40 || rd_ptr == 6'd48 || rd_ptr == 6'd56 || rd_ptr == 6'd63)
                                if(rd_ptr == 6'd8 || rd_ptr == 6'd16 || rd_ptr == 6'd24 || rd_ptr == 6'd32 || rd_ptr == 6'd40 || rd_ptr == 6'd48 || rd_ptr == 6'd56 || rd_ptr == 6'd63)
 
                                begin
                                        credit_counter <= credit_counter + 6'd8;
                                        credit_counter <= credit_counter + 6'd8;
 
                                end
 
                        end
 
                        else
 
                                credit_counter <= credit_counter;
 
 
 
                        if((wr_en && !f_full && !block_write) && (rd_en && !f_empty && !block_read))
 
                        begin
 
                                counter <= counter;
 
                        end
 
                        else if (wr_en && !f_full && !block_write)
 
                        begin
 
                                counter <= counter + 6'd1;
 
                        end
 
                        else if(rd_en && !f_empty && !block_read)
 
                        begin
                                counter <= counter - 6'd1;
                                counter <= counter - 6'd1;
                        end
                        end
 
                        else
 
                        begin
 
                                counter <= counter;
 
                        end
 
 
                        if(counter == 6'd63)
                        if(counter == 6'd63)
                        begin
                        begin
                                f_full <= 1'b1;
                                f_full <= 1'b1;
                        end
                        end
Line 144... Line 228...
                        end
                        end
                        else
                        else
                        begin
                        begin
                                f_empty <= 1'b0;
                                f_empty <= 1'b0;
                        end
                        end
 
 
                end
                end
        end
        end
 
 
//Read pointer
//Read pointer
        always@(posedge clock or negedge reset)
        always@(posedge clock or negedge reset)
Line 170... Line 253...
                        else
                        else
                        begin
                        begin
                                open_slot_fct<= 1'b0;
                                open_slot_fct<= 1'b0;
                        end
                        end
 
 
                        if(block_read == 1)
                        if(block_read)
                        begin
                        begin
                                if(!rd_en)
                                if(!rd_en)
 
                                begin
                                        block_read<= 1'b0;
                                        block_read<= 1'b0;
 
                                end
                                data_out  <= mem[rd_ptr];
 
                        end
                        end
                        else
                        else
                        if(rd_en && !f_empty)
                        if(rd_en && !f_empty)
                        begin
                        begin
                                rd_ptr <= rd;
 
                                block_read<= 1'b1;
                                block_read<= 1'b1;
 
                                rd_ptr <= rd_ptr+ 6'd1;
                        end
                        end
                        else
 
                        begin
 
                                data_out  <= mem[rd_ptr];
                                data_out  <= mem[rd_ptr];
                        end
 
                end
                end
        end
        end
 
 
        //assign f_empty   = ((wr_ptr - rd_ptr) == 6'd0)?1'b1:1'b0;
        //assign f_empty   = ((wr_ptr - rd_ptr) == 6'd0)?1'b1:1'b0;
        assign wr        = (wr_en && !f_full)?wr_ptr + 6'd1:wr_ptr + 6'd0;
        //assign wr        = (wr_en && !f_full)?wr_ptr + 6'd1:wr_ptr + 6'd0;
        assign rd        = (rd_en && !f_empty)?rd_ptr+ 6'd1:rd_ptr + 6'd0;
        //assign rd        = (rd_en && !f_empty)?rd_ptr+ 6'd1:rd_ptr + 6'd0;
 
 
endmodule
endmodule
 
 
 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.