终于点亮了我的LCD显示器,1024*768@60Hz,verilog语言,EP2C8,全部源码
昨天几乎一晚没睡,参考了很多代码,现在只是点亮了,没进行美化,我是新手,大家别拍砖,呵呵。module vga(
clock,
switch,
disp_RGB,
hsync,
vsync
);
input clock; //系统输入时钟
input switch;
output disp_RGB; //VGA数据输出
//disp_RGB:蓝
//disp_RGB:红
//disp_RGB:绿
output hsync; //VGA行同步信号
output vsync; //VGA场同步信号
reg hcount; //VGA行扫描计数器
reg vcount; //VGA场扫描计数器
reg data;
reg h_dat;
reg v_dat;
wire dat_act;
wire hsync;
wire vsync;
//VGA行、场扫描时序参数表
parameter //1024*768@60Hz//65M
h_Front_porch = 12'd24,
h_Sync_pulse = 12'd136,
h_Back_porch = 12'd160,
Whole_line = 12'd1344,
v_Front_porch = 12'd3,
v_Sync_pulse = 12'd6,
v_Back_porch = 12'd29,
Whole_frame = 12'd806;
//************************VGA驱动部分*******************************
//行场扫描
//行扫描 hcount 从0开始计数到 Whole_line
//场扫描 vcount 从0开始计数到 Whole_frame
always @(posedge clock)
begin
// if (hcount == Whole_line) //行扫描计数到Whole line
if (hcount == 12'd1344) //行扫描计数到Whole line
begin
hcount <= 1'd0;
// if (vcount == Whole_frame) //场扫描计数到Whole frame
if (vcount == 12'd806) //场扫描计数到Whole frame
vcount <= 1'd0;
else
vcount <= vcount + 1'd1;
end
else
begin
hcount <= (hcount + 1'd1);
end
end
//同步信号输出
reg hsync_r,vsync_r;
always @(posedge clock)
begin
hsync_r <= (hcount > h_Sync_pulse);
vsync_r <= (vcount > v_Sync_pulse);
end
assign hsync = hsync_r;//产生行同步信号(低电平)
assign vsync = vsync_r;//产生场同步信号(低电平)
//数据输出
assign dat_act = ((hcount >= (h_Sync_pulse + h_Back_porch)) && (hcount < (Whole_line - h_Front_porch)))
&& ((vcount >= (v_Sync_pulse + v_Back_porch)) && (vcount < (Whole_frame - v_Front_porch)));
assign disp_RGB = (dat_act) ?data : 3'h00;
//************************显示数据处理部分*******************************
always @(posedge clock)
begin
case(switch)
2'd0: data <= h_dat; //选择横彩条
2'd1: data <= v_dat; //选择竖彩条
2'd2: data <= (v_dat ^ h_dat); //产生棋盘格
2'd3: data <= (v_dat ~^ h_dat); //产生棋盘格
endcase
end
always @(posedge clock) //产生竖彩条
begin
if(hcount < 223)
v_dat <= 3'h7; //白
else if(hcount < 303)
v_dat <= 3'h6; //黄
else if(hcount < 383)
v_dat <= 3'h5; //青
else if(hcount < 463)
v_dat <= 3'h4; //绿
else if(hcount < 543)
v_dat <= 3'h3; //紫
else if(hcount < 623)
v_dat <= 3'h2; //红
else if(hcount < 703)
v_dat <= 3'h1; //蓝
else
v_dat <= 3'h0; //黑
end
always @(posedge clock) //产生横彩条
begin
if(vcount < 94)
h_dat <= 3'h7; //白
else if(vcount < 154)
h_dat <= 3'h6; //黄
else if(vcount < 214)
h_dat <= 3'h5; //青
else if(vcount < 274)
h_dat <= 3'h4; //绿
else if(vcount < 334)
h_dat <= 3'h3; //紫
else if(vcount < 394)
h_dat <= 3'h2; //红
else if(vcount < 454)
h_dat <= 3'h1; //蓝
else
h_dat <= 3'h0; //黑
end
endmodule
点击此处下载 ourdev_529077.rar(文件大小:1.07M) (原文件名:VGA_1024_768.rar)
顺便请教,参数定义parameter的使用,百思不解,请高手指点
程序中:
if (hcount == Whole_line) //判断hcount计数是否达到 Whole_line 的值
使用不正常,但是
if (hcount == 12'd1344) //判断hcount计数是否达到 Whole_line 的值
判断正常。
到底是什么原因呢??? 我们要看图。 手机拍的,效果比较差
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_529095.jpg
点亮我的显示器 (原文件名:IMG_016.jpg) 不错 我用CPLD写的
点击此处下载 ourdev_529139.rar(文件大小:1K) (原文件名:VGA_CON.rar) mark if (hcount == Whole_line) //判断hcount计数是否达到 Whole_line 的值
使用不正常,但是
if (hcount == 12'd1344) //判断hcount计数是否达到 Whole_line 的值
判断正常。
Whole_line 是`define Whole_line 12'd1344 吗 不错 我在程序中已经定义了:
//VGA行、场扫描时序参数表
parameter //1024*768@60Hz//65M
h_Front_porch = 12'd24,
h_Sync_pulse= 12'd136,
h_Back_porch = 12'd160,
Whole_line = 12'd1344,
v_Front_porch = 12'd3,
v_Sync_pulse = 12'd6,
v_Back_porch = 12'd29,
Whole_frame = 12'd806;
能用define吗?我试试。 cool .dian lu tu you ma? 楼主能上传电路图看看吗?我也有个xilinx 128 cell CPLD. mark 向楼主学习 不错 bu cuo ! 不错。。。期待更·NB的 前几天朋友给了我块NEC的彩屏,型号是NL8060,800*600的,10.2寸,26万色,我用的是EP2C20和两片25616的sram做了个控制器,效果还不错
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_529243.JPG
(原文件名:DSC00994.JPG) 参考资料来了
参考接线图ourdev_529261.pdf(文件大小:389K) (原文件名:MNE_2202_-_Project.pdf)
学东西学杂了,什么资料都搜集,现在是解决入门的问题呢。
很羡慕现在的年轻人,有理想就能有条件。现在脑瓜明显不如从前灵光了,接触新事物需要费太大的精力,呵呵,学无止境。 16楼的更牛呀。。。佩服,魏坤是技术多面手呀 学习一下. mark mark 我也是昨天刚 点亮了 LCD ,800*480的 VHDL的 very cool! 很强啊,fpga。 mark mark 回复【楼主位】yuangaoping 袁高平
-----------------------------------------------------------------------
always @(posedge clock)
begin
hsync_r <= (hcount > h_Sync_pulse);
vsync_r <= (vcount > v_Sync_pulse);
end
你的这个vsync_r ,hsync_r 开始的时候没有初始化的啊,开始应该是“1”在一段时间的“0”,再就是“1”。
对吧! mark mark mark 程序中:
if (hcount == Whole_line) //判断hcount计数是否达到 Whole_line 的值
使用不正常,但是
if (hcount == 12'd1344) //判断hcount计数是否达到 Whole_line 的值
判断正常。
到底是什么原因呢???
回复【楼主位】yuangaoping 袁高平
-----------------------------------------------------------------------
Whole_line楼主是不是用的paprameter定义的啊?
我之前遇到过一个类似的问题。我用的是Quartus6.0
定义了parameter后,再次修改参数值时,发现修改后编译仍然没有改变参数名所对应的值。后来,每次修改时,我都修改参数名,就可以了,不知道楼主跟我遇到的是不是一个问题 mark 【31楼】 flashman911
Whole_line楼主是不是用的paprameter定义的啊?
我之前遇到过一个类似的问题。我用的是Quartus6.0
定义了parameter后,再次修改参数值时,发现修改后编译仍然没有改变参数名所对应的值。后来,每次修改时,我都修改参数名,就可以了,不知道楼主跟我遇到的是不是一个问题
-----------------------------------------------------------------------
谢谢了,你提的是正确的。
我用的是Quartus9.1,之前始终找不到原因。(这下终于明白了,一直以为是我人品不好呢,呵呵。)刚试了下,真的是这个原因呀。
本来程序中把所有显示模式全部使用paprameter定义完了,结果在换参数的时候发现出错。
具体参数设置参考的网站:
http://www.tinyvga.com/vga-timing remark 我有一块光板的液晶屏,是IBM的笔记本上拆下来的,那个LVDS接口怎么连接到FPGA上去呢?请教 回复【32楼】sanzangge
我用的是Quartus9.1,之前始终找不到原因。(这下终于明白了,一直以为是我人品不好呢,呵呵。)刚试了下,真的是这个原因呀。
本来程序中把所有显示模式全部使用paprameter定义完了,结果在换参数的时候发现出错
-----------------------------------------------------------------------
呵呵,解决就好了。我用的是6.0。呵呵,我还以为只是低版本存在这个问题呢。哎,altera弄得这个太悲剧了。真是不应该出这个问题啊 mark一下哦 好!谢谢! mark 既然定义了h_Back_porch,那么Whole_line这个参数还是定义为H_total比较好吧 mark mark 好东西 回复【16楼】kunnsd 魏坤
-----------------------------------------------------------------------
请问,你的10.2寸屏是2块SRAM做显存切换吗?那刷屏有多快啊? mark mark Mark mark mark 学习 看看了 mark 学习 mark mark! mark正在搞这个 mark mark 正在学习! mark 记号~~ 很好! MARK mark 记录 谢谢 mark mark 谢谢共享!收藏了 记号一下 回复【楼主位】yuangaoping
-----------------------------------------------------------------------
ddddddddddd mark一下。 mark mark cool mark~~ mark 手头上也有一块NEC的屏,有时间试试 mark 学习了。 使用parameter并生成了symbol的话,可能会出现源程序中参数定义parameter定义的值和symbol中存储的值不一致的情况
修改了源程序的parameter的值并执行更新symbol的操作,并不能修改symbol中存储的值,除非把symbol删掉再重新生成
Quartus II在综合的时候,调取的是symbol中的值,而不是源程序中定义的值,lz的问题可能是这个原因造成的
所以,源程序中定义并修改了parameter的话,一定要注意和symbol保持一致 好东西 mark special mark 学习了!!! mark mark 楼主的屏那买的 本人想要多少钱???? mark 具体参数设置参考的网站:
http://www.tinyvga.com/vga-timing
MARK mark 学习 mark 盖章 mark 一下,有空试试 楼主哥,我在研究你的程序,没有改动,直接下载:产生的竖条 前面的白,黄没有了部分
白色直接没有显示 从最边缘开始显示黄颜色的,而且只有几列的
不值什么原因啊 不错! 先留个印,等过段时间空了好好看下,一直很想做这些方面的东西玩玩,嘿嘿 mk 留着准备点亮LVDS的屏 mark
1
1
1
1
11
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1 cool!!!
页:
[1]
2