搜索
bottom↓
回复: 14

VGA出不来颜色,麻烦好心人帮忙看看三基色的接口直接赋值对不,干学不久,菜鸟

[复制链接]

出0入0汤圆

发表于 2011-2-15 00:09:45 | 显示全部楼层 |阅读模式
module VGA(clk,reset,hsync,vsync,vga_r,vga_b,vga_g);
input                clk,reset;
output        hsync;                //?????????
output        vsync;                //????????????
output        vga_r,vga_b,vga_g;        //??????


//--------------------------------------------------
reg[10:0]x_cnt; //??X???
reg[9:0]y_cnt;  //??Y???

always@(posedge clk or negedge reset)
        if(!reset) x_cnt <= 11'd1;
        else if(x_cnt==11'd1040) x_cnt <= 11'd1;
                 else x_cnt <= x_cnt+1'b1;
       
always@(posedge clk or negedge reset)
        if(!reset) y_cnt <= 10'd1;
        else if(y_cnt==10'd666) y_cnt <= 10'd1;
                 else if(x_cnt==11'd1040) y_cnt <= y_cnt+1'b1;
//-------------------------------------------------
reg vsync_r,hsync_r;
always@(posedge clk or negedge reset)
begin
        if(!reset) hsync_r=1'b1;
        else if(x_cnt==11'd1) hsync_r <= 1'b0;
                        else if(x_cnt==11'd121) hsync_r <= 1'b1;
end


always@(posedge clk or negedge reset)
begin
        if(!reset) vsync_r=1'b1;
        else if(y_cnt==10'd1) vsync_r=1'b0;
                        else if(y_cnt==10'd7) vsync_r=1'b1;
end       

assign hsync = hsync_r;
assign vsync = vsync_r;


assign vga_r = 1'b1;
assign vga_g = 1'b1;
assign vga_b = 1'b0;

endmodule

屏幕出来就是黑色的,不管三基色的端口赋值0还是1 都出来没变化。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-2-15 06:55:31 | 显示全部楼层
帮顶

出65入0汤圆

发表于 2011-2-15 08:58:32 | 显示全部楼层
三基色是模拟信号!要用DA或者电阻网络来弄的!

出65入0汤圆

发表于 2011-2-15 09:00:05 | 显示全部楼层
另要注意信号的电平

出65入0汤圆

发表于 2011-2-15 09:09:03 | 显示全部楼层
按我的理解是VGA按三色原理显示的,水平扫频和垂直扫频信号确定屏幕上的一点,而后由三色信号线的模拟电压确定三色在这点的不同比例,从远处看就出现不同的颜色了!若你直接给0和1,那相当是直接加0V和满电压(印象中似乎是5V)给显示器,那就成白和黑!楼主可以做个实验,给扫频信号,在三色信号线上直接用可调电阻分压手动调节,看看显示器会不会出现全屏的不同色彩!

出65入0汤圆

发表于 2011-2-15 09:10:08 | 显示全部楼层
理解有限,望大家指正!

出65入0汤圆

发表于 2011-2-15 09:18:43 | 显示全部楼层
http://ks.cn.yahoo.com/question/1308062004219.html楼主看下这个,我理解的电平有错

出0入0汤圆

发表于 2011-2-16 12:38:25 | 显示全部楼层
首先楼主必须清楚,这样一个概念,无论是行同步信号还是列同步信号,数据有效区并不是所有
区间而只是中间的一部分区间,所以你应该设置一个valid信号用来表示计数到多少时,开始进入
显示数据有效区,而在数据无效区间,VGA三个基色信号必须全部置0,所以你的
assign vga_r = 1'b1;
assign vga_g = 1'b1;
assign vga_b = 1'b0
这三句不能这么直接赋值,

另外可能你会觉得时序图上一开始是个从高到低的跳变,所以有你这样的写法,事实上,复位的时候直接从0开始就可以了
到了一定时刻在拉高,计满再归0即可
//--------------------------------------------------
reg[10:0]x_cnt; //??X???
reg[9:0]y_cnt;  //??Y???

always@(posedge clk or negedge reset)
//if(!reset) x_cnt <= 11'd1;
if(!reset) x_cnt <= 11'd0;
//else if(x_cnt==11'd1040) x_cnt <= 11'd1;
else if(x_cnt==11'd1040) x_cnt <= 11'd0;
else x_cnt <= x_cnt+1'b1;

always@(posedge clk or negedge reset)
//if(!reset) y_cnt <= 10'd1;
if(!reset) y_cnt <= 10'd0;  
//else if(y_cnt==10'd666) y_cnt <= 10'd1;
else if(y_cnt==10'd666) y_cnt <= 10'd0;
else if(x_cnt==11'd1040) y_cnt <= y_cnt+1'b1;
//-------------------------------------------------
reg vsync_r,hsync_r;
always@(posedge clk or negedge reset)
begin
//if(!reset) hsync_r<=1'b1;
if(!reset) hsync_r<=1'b0;
//else if(x_cnt==11'd1) hsync_r <= 1'b0;
else if(x_cnt==11'd120) hsync_r <= 1'b1;
else if(x_cnt==1040) hsync_r<=1'b0;
end


always@(posedge clk or negedge reset)
begin
//if(!reset) vsync_r=1'b1;
if(!reset) vsync_r=1'b0;
//else if(y_cnt==10'd1) vsync_r=1'b0;
else if(y_cnt==10'd7) vsync_r=1'b1;
else if(y_cnt==666)  vsync_r=1'b0;
end

出0入0汤圆

发表于 2011-2-16 12:39:43 | 显示全部楼层
另外补充,这个时序是50Mhz时钟,刷新率72HZ,800*600

出0入0汤圆

 楼主| 发表于 2011-2-16 15:57:42 | 显示全部楼层
回复【7楼】zhangxin0804
-----------------------------------------------------------------------

问题已经解决了,正如zhangxin0804 前辈说的一样
就是因为扫描的区域的问题,   虽然不知道为啥无效区域必须把VGA三基色置0   
第一次提问就有怎么多好心人回答  ,感动中

出0入0汤圆

 楼主| 发表于 2011-2-16 15:58:19 | 显示全部楼层
回复【1楼】eworker
-----------------------------------------------------------------------

谢谢帮顶

出0入0汤圆

 楼主| 发表于 2011-2-16 15:59:51 | 显示全部楼层
回复【6楼】luweixuan 海漂一族
-----------------------------------------------------------------------

谢谢  luweixuan 海漂一族 查了那么多

出0入0汤圆

发表于 2011-5-9 17:16:46 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表