|
本帖最后由 thy110 于 2016-10-14 21:48 编辑
我的原理图如图所示
实验现象是屏幕一直是黑色,没有提示““没有信号输入”。求助
我的驱动程序如下:
1、驱动ADV7123、产生行信号和列信号
- module LCD_VS_HS(clk,rst_n,VGA_ACT,HS,VS,VGA_CLk,VGA_SYNC_N,VGA_BLANK_N,ypos,xpos);// 600 800
- `include "LCD_Parament.v"
- input clk,rst_n;
- output VGA_ACT;
- output HS,VS;
- output VGA_CLk,VGA_SYNC_N,VGA_BLANK_N;
- output [10:0] ypos,xpos;
- reg [10:0] Hcnt,Vcnt;
- reg HS,VS;
- reg [10:0] ypos;
- reg [10:0] xpos;
- reg HACT,VACT;
- always @(posedge clk or negedge rst_n)
- begin
- if(!rst_n)
- begin
- Hcnt <= 11'd0;
- HS <= 1'b0;
- xpos <=11'd0;
- HACT <= 1'b0;
- end
- else
- begin
- if(Hcnt == (`VGA_HTOTAl-1))Hcnt <= 11'd0;
- else Hcnt <= Hcnt + 1'b1;
-
- if(Hcnt <= (`VGA_HSYNC-1)) HS <= 1'b0;
- else HS <= 1'b1;
-
- if((Hcnt > (`VGA_HSYNC + `VGA_HBACK -1)) && (Hcnt <= (`VGA_HSYNC + `VGA_HBACK + `VGA_HACT -1)))
- begin
- xpos <= Hcnt-(`VGA_HSYNC + `VGA_HBACK);
- HACT <= 1'b1;
- end
- else
- begin
- xpos <=11'd0;
- HACT <= 1'b0;
- end
- end
- end
- always @(posedge clk or negedge rst_n)
- begin
- if(!rst_n)
- begin
- Vcnt <=11'd0;
- ypos <= 11'd0;
- VACT <=1'b0;
- VS <= 1'b0;
- end
- else
- begin
- if(Hcnt == (`VGA_HTOTAl-1))
- Vcnt <= Vcnt + 1'b1;
- else if(Vcnt == (`VGA_TOTAL-1))
- Vcnt <= 11'd0;
-
- if(Vcnt <= (`VGA_VSYNC-1)) VS <= 1'b0;
- else VS <= 1'b1;
-
- if((Vcnt > (`VGA_VSYNC + `VGA_VBACK -1)) && (Vcnt <= (`VGA_VSYNC + `VGA_VBACK + `VGA_VACT -1)))
- begin
- ypos <= Vcnt -(`VGA_VSYNC + `VGA_VBACK );
- VACT <= 1'b1;
- end
- else
- begin
- ypos <= 11'd0;
- VACT <= 1'b0;
- end
- end
- end
- assign VGA_ACT = HACT && VACT;
- assign VGA_CLk = clk;
- assign VGA_BLANK_N = HS & VS;
- assign VGA_SYNC_N = 1'b0;
- endmodule
复制代码
2、颜色生成
- module LCD_Display(clk,rst_n,VGA_ACT,xpos,ypos,R,G,B);
- `include "LCD_Parament.v"
- input clk,rst_n;
- input [10:0] xpos,ypos;
- input VGA_ACT;
- output [7:0] R,B,G;
- reg [23:0] RGB_data;
- always @(posedge clk or negedge rst_n)
- begin
- if(!rst_n)
- RGB_data <= 24'h000000;
- else
- begin
- if(ypos>=0 && ypos < (`LCD_YPOS/8)*1)
- RGB_data <= `RED;
- else if(ypos>=(`LCD_YPOS/8)*1 && ypos < (`LCD_YPOS/8)*2)
- RGB_data <= `GREEN;
- else if(ypos>=(`LCD_YPOS/8)*2 && ypos < (`LCD_YPOS/8)*3)
- RGB_data <= `BLUE;
- else if(ypos>=(`LCD_YPOS/8)*3 && ypos < (`LCD_YPOS/8)*4)
- RGB_data <= `WITHE;
- else if(ypos>=(`LCD_YPOS/8)*4 && ypos < (`LCD_YPOS/8)*5)
- RGB_data <= `BLACK;
- else if(ypos>=(`LCD_YPOS/8)*5 && ypos < (`LCD_YPOS/8)*6)
- RGB_data <= `YELLOW;
- else if(ypos>=(`LCD_YPOS/8)*6 && ypos < (`LCD_YPOS/8)*7)
- RGB_data <= `CYAN;
- else
- RGB_data <= `MAGENTA;
- end
- end
- assign R = RGB_data[23:16];
- assign G = RGB_data[15:8];
- assign B = RGB_data[7:0];
- endmodule
复制代码
3、顶层
- module VGA600_800(clk,rst_n,R,G,B,VGA_CLk,VGA_SYNC_N,VGA_BLANK_N,HS,VS);
- input clk,rst_n;
- output [7:0] R,G,B;
- output HS,VS;
- output VGA_CLk,VGA_SYNC_N,VGA_BLANK_N;
- wire VGA_ACT;
- wire xpos,ypos;
- wire VGA40MHZ;
- wire locked;
- VGA_40MHZ u1(.areset(!rst_n),.inclk0(clk),.c0(VGA40MHZ),.locked(locked));
- LCD_VS_HS VSHS(.clk(VGA40MHZ),.rst_n(rst_n),.VGA_ACT(VGA_ACT),.HS(HS),.VS(VS),
- .VGA_CLk(VGA_CLk),.VGA_SYNC_N(VGA_SYNC_N),.VGA_BLANK_N(VGA_BLANK_N)
- ,.ypos(ypos),.xpos(xpos));
-
- LCD_Display Display(.clk(VGA40MHZ),.rst_n(rst_n),.VGA_ACT(VGA_ACT),.xpos(xpos),.ypos(ypos),.R(R),.G(G),.B(B));
- endmodule
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|