新手上路,过程中遇到一个问题,希望有人能给我指点迷津。
下面是按照自己的rgb_lcd显示屏(800*480)来写的显示模块代码
module lcd_display( input lcd_pclk, //时钟 input rst_n, //复位,低电平有效 input [10:0] pixel_xpos, //当前像素点横坐标 input [10:0] pixel_ypos, //当前像素点纵坐标 input [10:0] h_disp, //LCD屏水平分辨率 input [10:0] v_disp, //LCD屏垂直分辨率 output reg [23:0] pixel_data //像素数据 ); //parameter define parameter WHITE = 24‘hFFFFFF; //白色 parameter BLACK = 24‘h000000; //黑色 parameter RED = 24‘hFF0000; //红色 parameter GREEN = 24‘h00FF00; //绿色 parameter BLUE = 24‘h0000FF; //蓝色 //根据当前像素点坐标指定当前像素点颜色数据,在屏幕上显示锯齿波 always @(posedge lcd_pclk or negedge rst_n) begin if(!rst_n) pixel_data <= WHITE; // else if(pixel_ypos==240 ||(pixel_ypos==(pixel_xpos*10)) // ||(pixel_ypos==(-pixel_xpos*10+960))||(pixel_ypos==(pixel_xpos*10-960)) // ||(pixel_ypos==(-pixel_xpos*10+1920))||(pixel_ypos==(pixel_xpos*10-1920)) // ||(pixel_ypos==(-pixel_xpos*10+2880))||(pixel_ypos==(pixel_xpos*10-2880)) // ||(pixel_ypos==(-pixel_xpos*10+3840))||(pixel_ypos==(pixel_xpos*10-3840)) // ||(pixel_ypos==(-pixel_xpos*10+4800))||(pixel_ypos==(pixel_xpos*10-4800)) // ||(pixel_ypos==(-pixel_xpos*10+5760))||(pixel_ypos==(pixel_xpos*10-5760)) // ||(pixel_ypos==(-pixel_xpos*10+6720))||(pixel_ypos==(pixel_xpos*10-6720)) // ||(pixel_ypos==(-pixel_xpos*10+7680))||(pixel_ypos==(pixel_xpos*10-7680))) //锯齿波显示,但由于是乘法,跨度太大,波形显示不连续。下面换成除法 else if(pixel_ypos==240||(pixel_xpos==pixel_ypos/10) ||(pixel_xpos==(96-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+96)) //在这个过程中遇到一个很奇怪的问题, ||(pixel_xpos==(192-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+192)) //(pixel_xpos==(-pixel_ypos/10+96)) ||(pixel_xpos==(288-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+288)) //像上面那样写,波形显示不出这类线 ||(pixel_xpos==(384-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+384)) //(pixel_xpos==(96-pixel_ypos/10)) ||(pixel_xpos==(480-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+480)) //只有这样写才能显示出这类线 ||(pixel_xpos==(576-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+576)) ||(pixel_xpos==(672-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+672)) ||(pixel_xpos==(768-pixel_ypos/10))||(pixel_xpos==(pixel_ypos/10+768))) pixel_data <= RED; else pixel_data <= WHITE; end endmodule
下一步想要使用dds来实现正弦波的显示,可惜找了挺久没没见到在vivado上对dds的操作,不知道怎么去设置参数。
原文:https://www.cnblogs.com/zynq382154/p/14299520.html