⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 afifo36_internal.v

📁 DDR2源代码 DDR2源代码 DDR2源代码
💻 V
📖 第 1 页 / 共 5 页
字号:
                                          ^do_buf[30]^do_buf[31]^do_buf[32]^do_buf[37]^do_buf[38]^do_buf[39]                                          ^do_buf[40]^do_buf[45]^do_buf[46]^do_buf[47]^do_buf[48]                                          ^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56]                                          ^do_buf[60]^do_buf[61]^do_buf[62]^do_buf[63];				dopr_ecc[3] = do_buf[4]^do_buf[5]^do_buf[6]^do_buf[7]^do_buf[8]^do_buf[9]		                          ^do_buf[10]^do_buf[18]^do_buf[19]                                          ^do_buf[20]^do_buf[21]^do_buf[22]^do_buf[23]^do_buf[24]^do_buf[25]                                          ^do_buf[33]^do_buf[34]^do_buf[35]^do_buf[36]^do_buf[37]^do_buf[38]                                          ^do_buf[39]^do_buf[40]^do_buf[49]^do_buf[50]                                          ^do_buf[51]^do_buf[52]^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56];			dopr_ecc[4] = do_buf[11]^do_buf[12]^do_buf[13]^do_buf[14]^do_buf[15]^do_buf[16]                                          ^do_buf[17]^do_buf[18]^do_buf[19]^do_buf[20]^do_buf[21]^do_buf[22]				          ^do_buf[23]^do_buf[24]^do_buf[25]^do_buf[41]^do_buf[42]^do_buf[43]				          ^do_buf[44]^do_buf[45]^do_buf[46]^do_buf[47]^do_buf[48]^do_buf[49]				          ^do_buf[50]^do_buf[51]^do_buf[52]^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56];			dopr_ecc[5] = do_buf[26]^do_buf[27]^do_buf[28]^do_buf[29]				          ^do_buf[30]^do_buf[31]^do_buf[32]^do_buf[33]^do_buf[34]^do_buf[35]				          ^do_buf[36]^do_buf[37]^do_buf[38]^do_buf[39]^do_buf[40]				          ^do_buf[41]^do_buf[42]^do_buf[43]^do_buf[44]^do_buf[45]				          ^do_buf[46]^do_buf[47]^do_buf[48]^do_buf[49]^do_buf[50]				          ^do_buf[51]^do_buf[52]^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56];			dopr_ecc[6] = do_buf[57]^do_buf[58]^do_buf[59]				          ^do_buf[60]^do_buf[61]^do_buf[62]^do_buf[63];			dopr_ecc[7] = dop_buf[0]^dop_buf[1]^dop_buf[2]^dop_buf[3]^dop_buf[4]^dop_buf[5]				          ^dop_buf[6]^do_buf[0]^do_buf[1]^do_buf[2]^do_buf[3]^do_buf[4]				          ^do_buf[5]^do_buf[6]^do_buf[7]^do_buf[8]^do_buf[9]^do_buf[10]				          ^do_buf[11]^do_buf[12]^do_buf[13]^do_buf[14]^do_buf[15]^do_buf[16]				          ^do_buf[17]^do_buf[18]^do_buf[19]^do_buf[20]^do_buf[21]^do_buf[22]				          ^do_buf[23]^do_buf[24]^do_buf[25]^do_buf[26]^do_buf[27]^do_buf[28]				          ^do_buf[29]^do_buf[30]^do_buf[31]^do_buf[32]^do_buf[33]^do_buf[34]				          ^do_buf[35]^do_buf[36]^do_buf[37]^do_buf[38]^do_buf[39]^do_buf[40]				          ^do_buf[41]^do_buf[42]^do_buf[43]^do_buf[44]^do_buf[45]^do_buf[46]				          ^do_buf[47]^do_buf[48]^do_buf[49]^do_buf[50]^do_buf[51]^do_buf[52]				          ^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56]^do_buf[57]^do_buf[58]				          ^do_buf[59]^do_buf[60]^do_buf[61]^do_buf[62]^do_buf[63];			    			syndrome = dopr_ecc ^ dop_buf;	  			if (syndrome !== 0) begin			    			    if (syndrome[7]) begin  // dectect single bit error								ecc_bit_position = {do_buf[63:57], dop_buf[6], do_buf[56:26], dop_buf[5], do_buf[25:11], dop_buf[4], do_buf[10:4], dop_buf[3], do_buf[3:1], dop_buf[2], do_buf[0], dop_buf[1:0], dop_buf[7]};								ecc_bit_position[syndrome[6:0]] = ~ecc_bit_position[syndrome[6:0]]; // correct single bit error in the output 								di_in_ecc_corrected = {ecc_bit_position[71:65], ecc_bit_position[63:33], ecc_bit_position[31:17], ecc_bit_position[15:9], ecc_bit_position[7:5], ecc_bit_position[3]}; // correct single bit error in the memory								do_buf = di_in_ecc_corrected;								dip_in_ecc_corrected = {ecc_bit_position[0], ecc_bit_position[64], ecc_bit_position[32], ecc_bit_position[16], ecc_bit_position[8], ecc_bit_position[4], ecc_bit_position[2:1]}; // correct single bit error in the parity memory				dop_buf = dip_in_ecc_corrected;								dbiterr_out = 0;				sbiterr_out = 1;							    end			    else if (!syndrome[7]) begin  // double bit error				sbiterr_out = 0;				dbiterr_out = 1;							    end			end // if (syndrome !== 0)			else begin			    dbiterr_out = 0;			    sbiterr_out = 0;			    			end // else: !if(syndrome !== 0)					    end // if (EN_ECC_READ == "TRUE")		    // end ecc decode		    		    do_in = do_buf;		    dop_in = dop_buf;				    #1;		    rdcount_out = (rdcount_out + 1) % addr_limit;		    if (rdcount_out == 0) begin			rdcount_flag = ~rdcount_flag;		    end		end	    end	    if (fwft == 1'b1) begin		if ((rden_reg == 1'b1) && (rd_addr != rd_prefetch)) begin		    rd_prefetch = (rd_prefetch + 1) % addr_limit;		    if (rd_prefetch == 0)			rdprefetch_flag = ~rdprefetch_flag;		end		if ((rd_prefetch == rd_addr) && (rd_addr != rdcount_out)) begin		    do_out = do_in;		    if (DATA_WIDTH != 4) 			dop_out = dop_in;		    rd_addr = (rd_addr + 1) % addr_limit;		    if (rd_addr == 0)			rd_flag = ~rd_flag;		end		if (((rd_addr == rdcount_out) && (empty_ram[3] == 1'b0)) ||		    ((rden_reg == 1'b1) && (empty_ram[1] == 1'b0)) ||		    ((rden_reg == 1'b0) && (empty_ram[1] == 1'b0) && (rd_addr == rdcount_out))) begin		    		    do_buf = mem[rdcount_out];		    dop_buf = memp[rdcount_out];				    // ECC decode		    if (EN_ECC_READ == "TRUE") begin						// regenerate parity			dopr_ecc[0] = do_buf[0]^do_buf[1]^do_buf[3]^do_buf[4]^do_buf[6]^do_buf[8]					  ^do_buf[10]^do_buf[11]^do_buf[13]^do_buf[15]^do_buf[17]^do_buf[19]					  ^do_buf[21]^do_buf[23]^do_buf[25]^do_buf[26]^do_buf[28]            				  ^do_buf[30]^do_buf[32]^do_buf[34]^do_buf[36]^do_buf[38]		                          ^do_buf[40]^do_buf[42]^do_buf[44]^do_buf[46]^do_buf[48]		                          ^do_buf[50]^do_buf[52]^do_buf[54]^do_buf[56]^do_buf[57]^do_buf[59]		                          ^do_buf[61]^do_buf[63];			dopr_ecc[1] = do_buf[0]^do_buf[2]^do_buf[3]^do_buf[5]^do_buf[6]^do_buf[9]                                          ^do_buf[10]^do_buf[12]^do_buf[13]^do_buf[16]^do_buf[17]                                          ^do_buf[20]^do_buf[21]^do_buf[24]^do_buf[25]^do_buf[27]^do_buf[28]                                          ^do_buf[31]^do_buf[32]^do_buf[35]^do_buf[36]^do_buf[39]                                          ^do_buf[40]^do_buf[43]^do_buf[44]^do_buf[47]^do_buf[48]                                          ^do_buf[51]^do_buf[52]^do_buf[55]^do_buf[56]^do_buf[58]^do_buf[59]                                          ^do_buf[62]^do_buf[63];			dopr_ecc[2] = do_buf[1]^do_buf[2]^do_buf[3]^do_buf[7]^do_buf[8]^do_buf[9]                                          ^do_buf[10]^do_buf[14]^do_buf[15]^do_buf[16]^do_buf[17]                                          ^do_buf[22]^do_buf[23]^do_buf[24]^do_buf[25]^do_buf[29]                                          ^do_buf[30]^do_buf[31]^do_buf[32]^do_buf[37]^do_buf[38]^do_buf[39]                                          ^do_buf[40]^do_buf[45]^do_buf[46]^do_buf[47]^do_buf[48]                                          ^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56]                                          ^do_buf[60]^do_buf[61]^do_buf[62]^do_buf[63];				dopr_ecc[3] = do_buf[4]^do_buf[5]^do_buf[6]^do_buf[7]^do_buf[8]^do_buf[9]		                          ^do_buf[10]^do_buf[18]^do_buf[19]                                          ^do_buf[20]^do_buf[21]^do_buf[22]^do_buf[23]^do_buf[24]^do_buf[25]                                          ^do_buf[33]^do_buf[34]^do_buf[35]^do_buf[36]^do_buf[37]^do_buf[38]                                          ^do_buf[39]^do_buf[40]^do_buf[49]^do_buf[50]                                          ^do_buf[51]^do_buf[52]^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56];			dopr_ecc[4] = do_buf[11]^do_buf[12]^do_buf[13]^do_buf[14]^do_buf[15]^do_buf[16]                                          ^do_buf[17]^do_buf[18]^do_buf[19]^do_buf[20]^do_buf[21]^do_buf[22]				          ^do_buf[23]^do_buf[24]^do_buf[25]^do_buf[41]^do_buf[42]^do_buf[43]				          ^do_buf[44]^do_buf[45]^do_buf[46]^do_buf[47]^do_buf[48]^do_buf[49]				          ^do_buf[50]^do_buf[51]^do_buf[52]^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56];			dopr_ecc[5] = do_buf[26]^do_buf[27]^do_buf[28]^do_buf[29]				          ^do_buf[30]^do_buf[31]^do_buf[32]^do_buf[33]^do_buf[34]^do_buf[35]				          ^do_buf[36]^do_buf[37]^do_buf[38]^do_buf[39]^do_buf[40]				          ^do_buf[41]^do_buf[42]^do_buf[43]^do_buf[44]^do_buf[45]				          ^do_buf[46]^do_buf[47]^do_buf[48]^do_buf[49]^do_buf[50]				          ^do_buf[51]^do_buf[52]^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56];			dopr_ecc[6] = do_buf[57]^do_buf[58]^do_buf[59]				          ^do_buf[60]^do_buf[61]^do_buf[62]^do_buf[63];			dopr_ecc[7] = dop_buf[0]^dop_buf[1]^dop_buf[2]^dop_buf[3]^dop_buf[4]^dop_buf[5]				          ^dop_buf[6]^do_buf[0]^do_buf[1]^do_buf[2]^do_buf[3]^do_buf[4]				          ^do_buf[5]^do_buf[6]^do_buf[7]^do_buf[8]^do_buf[9]^do_buf[10]				          ^do_buf[11]^do_buf[12]^do_buf[13]^do_buf[14]^do_buf[15]^do_buf[16]				          ^do_buf[17]^do_buf[18]^do_buf[19]^do_buf[20]^do_buf[21]^do_buf[22]				          ^do_buf[23]^do_buf[24]^do_buf[25]^do_buf[26]^do_buf[27]^do_buf[28]				          ^do_buf[29]^do_buf[30]^do_buf[31]^do_buf[32]^do_buf[33]^do_buf[34]				          ^do_buf[35]^do_buf[36]^do_buf[37]^do_buf[38]^do_buf[39]^do_buf[40]				          ^do_buf[41]^do_buf[42]^do_buf[43]^do_buf[44]^do_buf[45]^do_buf[46]				          ^do_buf[47]^do_buf[48]^do_buf[49]^do_buf[50]^do_buf[51]^do_buf[52]				          ^do_buf[53]^do_buf[54]^do_buf[55]^do_buf[56]^do_buf[57]^do_buf[58]				          ^do_buf[59]^do_buf[60]^do_buf[61]^do_buf[62]^do_buf[63];			    			syndrome = dopr_ecc ^ dop_buf;	  			if (syndrome !== 0) begin			    			    if (syndrome[7]) begin  // dectect single bit error								ecc_bit_position = {do_buf[63:57], dop_buf[6], do_buf[56:26], dop_buf[5], do_buf[25:11], dop_buf[4], do_buf[10:4], dop_buf[3], do_buf[3:1], dop_buf[2], do_buf[0], dop_buf[1:0], dop_buf[7]};								ecc_bit_position[syndrome[6:0]] = ~ecc_bit_position[syndrome[6:0]]; // correct single bit error in the output 								di_in_ecc_corrected = {ecc_bit_position[71:65], ecc_bit_position[63:33], ecc_bit_position[31:17], ecc_bit_position[15:9], ecc_bit_position[7:5], ecc_bit_position[3]}; // correct single bit error in the memory								do_buf = di_in_ecc_corrected;								dip_in_ecc_corrected = {ecc_bit_position[0], ecc_bit_position[64], ecc_bit_position[32], ecc_bit_position[16], ecc_bit_position[8], ecc_bit_position[4], ecc_bit_position[2:1]}; // correct single bit error in the parity memory				dop_buf = dip_in_ecc_corrected;				dbiterr_out = 0;				sbiterr_out = 1;							    end			    else if (!syndrome[7]) begin  // double bit error				sbiterr_out = 0;				dbiterr_out = 1;				    			    end			end // if (syndrome !== 0)			else begin			    dbiterr_out = 0;			    sbiterr_out = 0;			    			end // else: !if(syndrome !== 0)					    end // if (EN_ECC_READ == "TRUE")		    // end ecc decode	   		    do_in = do_buf;		    dop_in = dop_buf;				    #1;		    rdcount_out = (rdcount_out + 1) % addr_limit;		    if (rdcount_out == 0)			rdcount_flag = ~rdcount_flag;		end	    end // if (fwft == 1'b1)	    	    	    rderr_out = (rden_reg == 1'b1) && (empty_out == 1'b1);	    almostempty_out = almostempty_int[3];	    if ((((rdcount_out + ae_empty) >= wr_addr) && (rdcount_flag == awr_flag)) || (((rdcount_out + ae_empty) >= (wr_addr + addr_limit)) && (rdcount_flag != awr_flag))) begin		almostempty_int[3] = 1'b1;		almostempty_int[2] = 1'b1;		almostempty_int[1] = 1'b1;		almostempty_int[0] = 1'b1;	    end	    else if (almostempty_int[2] == 1'b0) begin		if (rdcount_out <= rdcount_out + ae_empty || rdcount_flag != awr_flag) begin		    almostempty_int[3] = almostempty_int[0];		    almostempty_int[0] = 1'b0;		    end	    end	    	    if ((((rdcount_out + addr_limit) > (wr_addr + ae_full)) && (rdcount_flag == awr_flag)) || ((rdcount_out > (wr_addr + ae_full)) && (rdcount_flag != awr_flag))) begin		if (((rden_reg == 1'b1) && (empty_out == 1'b0)) || ((((rd_addr + 1) % addr_limit) == rdcount_out) && (almostfull_int[1] == 1'b1))) begin		    almostfull_int[2] = almostfull_int[1];		    almostfull_int[1] = 1'b0;		end	    end	    else begin		almostfull_int[2] = 1'b1;		almostfull_int[1] = 1'b1;	    end	    if (fwft == 1'b0) begin		if ((rdcount_out == rd_addr) && (rdcount_flag == rd_flag)) begin		    empty_out = 1'b1;		end		else begin		    empty_out = 1'b0;		end	    end // if (fwft == 1'b0)	    else if (fwft == 1'b1) begin		if ((rd_prefetch == rd_addr) && (rdprefetch_flag == rd_flag)) begin		    empty_out = 1'b1;		end		else begin		    empty_out = 1'b0;		end	    end	    if ((rdcount_out == wr_addr) && (rdcount_flag == awr_flag)) begin		empty_ram[2] = 1'b1;		empty_ram[1] = 1'b1;		empty_ram[0] = 1'b1;	    end	    else begin		empty_ram[2] = empty_ram[1];		empty_ram[1] = empty_ram[0];		empty_ram[0] = 1'b0;	    end	    	    if ((rdcount_out == wr1_addr) && (rdcount_flag == wr1_flag)) begin		empty_ram[3] = 1'b1;	    end	    else begin		empty_ram[3] = 1'b0;	    end	    wr1_addr = wr_addr;	    wr1_flag = awr_flag;	end // if (sync == 1'b0)    end // always @ (posedge rdclk_in)        always @(posedge wrclk_in) begin	if (sync == 1'b1) begin	    if (wren_in == 1'b1) begin		if (full_out == 1'b0) begin		    // ECC encode		    if (EN_ECC_WRITE == "TRUE") begin	  			dip_ecc[0] = di_in[0]^di_in[1]^di_in[3]^di_in[4]^di_in[6]^di_in[8]		                 ^di_in[10]^di_in[11]^di_in[13]^di_in[15]^di_in[17]^di_in[19]		                 ^di_in[21]^di_in[23]^di_in[25]^di_in[26]^di_in[28]            	                 ^di_in[30]^di_in[32]^di_in[34]^di_in[36]^di_in[38]		                 ^di_in[40]^di_in[42]^di_in[44]^di_in[46]^di_in[48]		                 ^di_in[50]^di_in[52]^di_in[54]^di_in[56]^di_in[57]^di_in[59]		                 ^di_in[61]^di_in[63];			dip_ecc[1] = di_in[0]^di_in[2]^di_in[3]^di_in[5]^di_in[6]^di_in[9]                                 ^di_in[10]^di_in[12]^di_in[13]^di_in[16]^di_in[17]                                 ^di_in[20]^di_in[21]^di_in[24]^di_in[25]^di_in[27]^di_in[28]                                 ^di_in[31]^di_in[32]^di_in[35]^di_in[36]^di_in[39]                                 ^di_in[40]^di_in[43]^di_in[44]^di_in[47]^di_in[48]                                 ^di_in[51]^di_in[52]^di_in[55]^di_in[56]^di_in[58]^di_in[59]                                 ^di_in[62]^di_in[63];			dip_ecc[2] = di_in[1]^di_in[2]^di_in[3]^di_in[7]^di_in[8]^di_in[9]                                 ^di_in[10]^di_in[14]^di_in[15]^di_in[16]^di_in[17]                                 ^di_in[22]^di_in[23]^di_in[24]^di_in[25]^di_in[29]                                 ^di_in[30]^di_in[31]^di_in[32]^di_in[37]^di_in[38]^di_in[39]                                 ^di_in[40]^di_in[45]^di_in[46]^di_in[47]^di_in[48]                                 ^di_in[53]^di_in[54]^di_in[55]^di_in[56]                                 ^di_in[60]^di_in[61]^di_in[62]^di_in[63];				dip_ecc[3] = di_in[4]^di_in[5]^di_in[6]^di_in[7]^di_in[8]^di_in[9]			         ^di_in[10]^di_in[18]^di_in[19]                                 ^di_in[20]^di_in[21]^di_in[22]^di_in[23]^di_in[24]^di_in[25]                                 ^di_in[33]^di_in[34]^di_in[35]^di_in[36]^di_in[37]^di_in[38]^di_in[39]                                 ^di_in[40]^di_in[49]                                 ^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56];			dip_ecc[4] = di_in[11]^di_in[12]^di_in[13]^di_in[14]^di_in[15]^di_in[16]^di_in[17]^di_in[18]^di_in[19]                                 ^di_in[20]^di_in[21]^di_in[22]^di_in[23]^di_in[24]^di_in[25]                                 ^di_in[41]^di_in[42]^di_in[43]^di_in[44]^di_in[45]^di_in[46]^di_in[47]^di_in[48]^di_in[49]                                 ^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56];			dip_ecc[5] = di_in[26]^di_in[27]^di_in[28]^di_in[29]                                 ^di_in[30]^di_in[31]^di_in[32]^di_in[33]^di_in[34]^di_in[35]^di_in[36]^di_in[37]^di_in[38]^di_in[39]                                 ^di_in[40]^di_in[41]^di_in[42]^di_in[43]^di_in[44]^di_in[45]^di_in[46]^di_in[47]^di_in[48]^di_in[49]                                 ^di_in[50]^di_in[51]^di_in[52]^di_in[53]^di_in[54]^di_in[55]^di_in[56];			dip_ecc[6] = di_in[57]^di_in[58]^di_in[59]			         ^di_in[60]^di_in[61]^di_in[62]^di_in[63];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -