原因:vga_driver模块向上层模块发送数据请求后,等待一个像素时钟周期,上层模块才能将像素点数据输送到vga_driver的pixel_data接口,故此时vga_en输出使能正好有效,则输入的pixel_data数据正好与输出的vga_rgb对齐,假设data_req没有提前一拍(如下图所示),即data_req和vga_en对齐,则前端会发送一个无效像素点数据(如1),后端会丢失一个像素点数据(如2)。
所遇bug:
问题就出在第一张图的2处,导致每一行的末尾都有一个像素点的丢失,导致vga显示异常,signaltap抓取信号如下:
由第二张图片的2,4,5可以看出,63F1h像素点数据并没有发出,进而说明以上问题。
修改正确后的代码:
//有效数据信号 assign vga_en=(((h_cnt>=H_SYNC+H_BACK)&&(h_cnt<H_SYNC+H_BACK+H_DISP))&&((v_cnt>=V_SYNC+V_BACK)&&(v_cnt<V_SYNC+V_BACK+V_DISP)))?1'b1:1'b0; //像素点数据请求信号:每一行提前一个像素周期请求 assign data_req=(((h_cnt>=H_SYNC+H_BACK-1'b1)&&(h_cnt<H_SYNC+H_BACK+H_DISP-1'b1))&&((v_cnt>=V_SYNC+V_BACK)&&(v_cnt<V_SYNC+V_BACK+V_DISP)))?1'b1:1'b0;
signaltap抓取信号如下:
如上图中的6所示,已解决上述问题。