@@ -186,6 +186,8 @@ wire [191:0] linebuf_wrdata = {emif_rd_rdata[23:0], emif_rd_rdata[55:32], emif_r
186186wire [9 :0 ] linebuf_wraddr = {blocks_copied + (line_id ? 0 : 320 )};
187187wire [19 :0 ] emif_rd_block_addr = {ypos_lb_next, blocks_copied};
188188reg line_id_brclk_sync1_reg, line_id_brclk_sync2_reg, line_id_brclk_sync3_reg;
189+ wire line_id_change = (line_id_brclk_sync2_reg != line_id_brclk_sync3_reg);
190+ reg [1 :0 ] emif_rd_timeout;
189191
190192
191193linebuf_double linebuf_rgb (
@@ -205,23 +207,29 @@ always @(posedge emif_br_clk or posedge emif_br_reset) begin
205207 if (emif_br_reset) begin
206208 emif_rd_read <= 1'b0 ;
207209 emif_rd_burstcount <= 1'b0 ;
210+ emif_rd_timeout <= 2'h0 ;
208211 end else begin
209212 if (emif_rd_burstcount > 0 ) begin // always finish read first, make sure doesn't last longer than line length
210213 if (emif_rd_readdatavalid) begin
211214 blocks_copied <= blocks_copied + 1'b1 ;
212215 emif_rd_burstcount <= emif_rd_burstcount - 1'b1 ;
216+ end else if (line_id_change) begin
217+ emif_rd_timeout <= emif_rd_timeout + 1'b1 ;
218+ if (emif_rd_timeout == 2'h3 )
219+ emif_rd_burstcount <= 0 ;
213220 end
214221 if (! emif_rd_waitrequest)
215222 emif_rd_read <= 1'b0 ;
216223`ifdef DEBUG
217- emif_rd_line_missed <= (line_id_brclk_sync2_reg != line_id_brclk_sync3_reg) ;
224+ emif_rd_line_missed <= line_id_change ;
218225`endif
219- end else if (line_id_brclk_sync2_reg != line_id_brclk_sync3_reg ) begin
226+ end else if (line_id_change ) begin
220227 blocks_copied <= 0 ;
221228 end else if (lb_enable & (blocks_copied < blocks_per_line)) begin
222229 emif_rd_read <= 1'b1 ;
223230 emif_rd_burstcount <= ((blocks_per_line- blocks_copied) > EMIF_RD_MAXBURST) ? EMIF_RD_MAXBURST : (blocks_per_line- blocks_copied);
224231 emif_rd_addr <= {3'b001 , emif_rd_block_addr, 5'h0 };
232+ emif_rd_timeout <= 2'h0 ;
225233 end
226234
227235 line_id_brclk_sync1_reg <= line_id;
0 commit comments