搜索
bottom↓
回复: 178

终于点亮了我的LCD显示器,1024*768@60Hz,verilog语言,EP2C8,全部源码

[复制链接]

出0入0汤圆

发表于 2010-1-26 10:00:42 | 显示全部楼层 |阅读模式
昨天几乎一晚没睡,参考了很多代码,现在只是点亮了,没进行美化,我是新手,大家别拍砖,呵呵。

module vga(
                        clock,
                        switch,
                        disp_RGB,
                        hsync,
                        vsync
);
input                clock;                                        //系统输入时钟
input                [1:0]switch;
output                 [2:0]disp_RGB;                        //VGA数据输出
//disp_RGB[0]:蓝
//disp_RGB[1]:红
//disp_RGB[2]:绿
output                hsync;                                        //VGA行同步信号
output                vsync;                                        //VGA场同步信号

reg [11:0]        hcount;                                        //VGA行扫描计数器
reg [11:0]  vcount;                                        //VGA场扫描计数器
reg [2:0]   data;
reg        [2:0]        h_dat;
reg [2:0]   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[1:0])
                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 的值
判断正常。

到底是什么原因呢???

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2010-1-26 10:08:06 | 显示全部楼层
我们要看图。

出0入0汤圆

 楼主| 发表于 2010-1-26 10:21:20 | 显示全部楼层
手机拍的,效果比较差

点亮我的显示器 (原文件名:IMG_016.jpg)

出0入0汤圆

发表于 2010-1-26 11:10:05 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-1-26 11:47:45 | 显示全部楼层
我用CPLD写的

点击此处下载 ourdev_529139.rar(文件大小:1K) (原文件名:VGA_CON.rar)

出0入0汤圆

发表于 2010-1-26 12:03:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-26 12:05:52 | 显示全部楼层
if (hcount == Whole_line) //判断hcount计数是否达到 Whole_line 的值
使用不正常,但是  
if (hcount == 12'd1344) //判断hcount计数是否达到 Whole_line 的值
判断正常。

Whole_line 是`define Whole_line 12'd1344 吗

出0入0汤圆

发表于 2010-1-26 12:17:06 | 显示全部楼层
不错

出0入0汤圆

 楼主| 发表于 2010-1-26 12:18:22 | 显示全部楼层
我在程序中已经定义了:

//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吗?我试试。

出0入0汤圆

发表于 2010-1-26 12:49:49 | 显示全部楼层
cool .dian lu tu you ma?

出0入0汤圆

发表于 2010-1-26 12:53:37 | 显示全部楼层
楼主能上传电路图看看吗?我也有个xilinx 128 cell CPLD.

出0入0汤圆

发表于 2010-1-26 13:15:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-26 14:08:36 | 显示全部楼层
向楼主学习

出0入0汤圆

发表于 2010-1-26 14:46:16 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-1-26 15:10:00 | 显示全部楼层
bu cuo !

出0入0汤圆

发表于 2010-1-26 15:12:01 | 显示全部楼层
不错。。。期待更·NB的

出0入21汤圆

发表于 2010-1-26 15:58:03 | 显示全部楼层
前几天朋友给了我块NEC的彩屏,型号是NL8060,800*600的,10.2寸,26万色,我用的是EP2C20和两片25616的sram做了个控制器,效果还不错

(原文件名:DSC00994.JPG)

出0入0汤圆

 楼主| 发表于 2010-1-26 16:44:17 | 显示全部楼层
参考资料来了

参考接线图ourdev_529261.pdf(文件大小:389K) (原文件名:MNE_2202_-_Project.pdf)

学东西学杂了,什么资料都搜集,现在是解决入门的问题呢。
很羡慕现在的年轻人,有理想就能有条件。现在脑瓜明显不如从前灵光了,接触新事物需要费太大的精力,呵呵,学无止境。

出0入0汤圆

发表于 2010-1-26 19:27:18 | 显示全部楼层
16楼的更牛呀。。。佩服,魏坤是技术多面手呀

出0入0汤圆

发表于 2010-1-27 09:05:51 | 显示全部楼层
学习一下.

出0入0汤圆

发表于 2010-1-27 10:18:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-27 10:35:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-27 14:12:29 | 显示全部楼层
我也是昨天刚 点亮了 LCD ,800*480的 VHDL的

出0入0汤圆

发表于 2010-1-29 16:39:28 | 显示全部楼层
very cool!

出0入0汤圆

发表于 2010-1-29 17:01:23 | 显示全部楼层
很强啊,fpga。

出0入0汤圆

发表于 2010-1-29 21:23:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-29 23:34:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-31 10:58:54 | 显示全部楼层
回复【楼主位】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”。
对吧!

出0入0汤圆

发表于 2010-1-31 14:35:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-31 15:05:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-31 16:49:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-2 19:24:36 | 显示全部楼层
程序中:
if (hcount == Whole_line) //判断hcount计数是否达到 Whole_line 的值
使用不正常,但是  

if (hcount == 12'd1344) //判断hcount计数是否达到 Whole_line 的值
判断正常。

到底是什么原因呢???
回复【楼主位】yuangaoping 袁高平
-----------------------------------------------------------------------

Whole_line楼主是不是用的paprameter定义的啊?
我之前遇到过一个类似的问题。我用的是Quartus6.0
定义了parameter后,再次修改参数值时,发现修改后编译仍然没有改变参数名所对应的值。后来,每次修改时,我都修改参数名,就可以了,不知道楼主跟我遇到的是不是一个问题

出0入0汤圆

发表于 2010-2-2 21:45:51 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-2-2 22:50:05 | 显示全部楼层
【31楼】 flashman911
Whole_line楼主是不是用的paprameter定义的啊?
我之前遇到过一个类似的问题。我用的是Quartus6.0
定义了parameter后,再次修改参数值时,发现修改后编译仍然没有改变参数名所对应的值。后来,每次修改时,我都修改参数名,就可以了,不知道楼主跟我遇到的是不是一个问题
-----------------------------------------------------------------------

谢谢了,你提的是正确的。

我用的是Quartus9.1,之前始终找不到原因。(这下终于明白了,一直以为是我人品不好呢,呵呵。)刚试了下,真的是这个原因呀。

本来程序中把所有显示模式全部使用paprameter定义完了,结果在换参数的时候发现出错。

具体参数设置参考的网站:
http://www.tinyvga.com/vga-timing

出0入0汤圆

发表于 2010-2-3 00:03:54 | 显示全部楼层
remark

出0入0汤圆

发表于 2010-2-7 01:51:25 | 显示全部楼层
我有一块光板的液晶屏,是IBM的笔记本上拆下来的,那个LVDS接口怎么连接到FPGA上去呢?请教

出0入0汤圆

发表于 2010-2-9 22:33:48 | 显示全部楼层
回复【32楼】sanzangge
我用的是Quartus9.1,之前始终找不到原因。(这下终于明白了,一直以为是我人品不好呢,呵呵。)刚试了下,真的是这个原因呀。

本来程序中把所有显示模式全部使用paprameter定义完了,结果在换参数的时候发现出错
-----------------------------------------------------------------------

呵呵,解决就好了。我用的是6.0。呵呵,我还以为只是低版本存在这个问题呢。哎,altera弄得这个太悲剧了。真是不应该出这个问题啊

出0入0汤圆

发表于 2010-2-23 17:45:51 | 显示全部楼层
mark一下哦

出0入0汤圆

发表于 2010-2-23 21:31:18 | 显示全部楼层
好!谢谢!

出0入0汤圆

发表于 2010-2-25 19:28:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-25 20:25:53 | 显示全部楼层
既然定义了h_Back_porch,那么Whole_line这个参数还是定义为H_total比较好吧

出0入0汤圆

发表于 2010-2-27 15:12:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-5 10:51:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-6 19:11:53 | 显示全部楼层
好东西

出0入0汤圆

发表于 2010-3-7 13:52:10 | 显示全部楼层
回复【16楼】kunnsd 魏坤
-----------------------------------------------------------------------

请问,你的10.2寸屏是2块SRAM做显存切换吗?那刷屏有多快啊?

出0入0汤圆

发表于 2010-3-8 10:49:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-8 12:05:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-15 21:57:20 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-3-16 11:52:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-16 11:57:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-16 11:59:35 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-3-19 19:27:36 | 显示全部楼层
看看了

出0入0汤圆

发表于 2010-3-21 16:40:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-8 20:15:41 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-4-9 12:36:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-9 22:46:12 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-4-9 23:13:06 | 显示全部楼层
mark  正在搞这个

出0入0汤圆

发表于 2010-4-9 23:14:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-1 11:07:16 | 显示全部楼层
mark 正在学习!

出0入0汤圆

发表于 2010-5-4 10:01:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-4 11:18:35 | 显示全部楼层
记号~~

出0入0汤圆

发表于 2010-5-4 11:52:06 | 显示全部楼层
很好!

出0入0汤圆

发表于 2010-5-4 12:04:08 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-5-4 13:20:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-15 17:50:59 | 显示全部楼层
记录 谢谢

出0入0汤圆

发表于 2010-5-15 19:23:31 | 显示全部楼层
mark

出20入0汤圆

发表于 2010-5-15 20:06:46 | 显示全部楼层
mark

出10入10汤圆

发表于 2010-5-16 07:33:19 | 显示全部楼层
谢谢共享!收藏了

出0入0汤圆

发表于 2010-5-16 09:04:52 | 显示全部楼层
记号一下

出0入0汤圆

发表于 2010-5-16 09:07:15 | 显示全部楼层
回复【楼主位】yuangaoping
-----------------------------------------------------------------------

ddddddddddd

出0入0汤圆

发表于 2010-5-16 11:34:41 | 显示全部楼层
mark一下。

出0入4汤圆

发表于 2010-5-16 12:16:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-25 18:00:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-26 19:33:56 | 显示全部楼层
cool

出0入0汤圆

发表于 2010-5-26 20:28:40 | 显示全部楼层
mark~~

出0入0汤圆

发表于 2010-5-26 20:59:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-29 16:46:33 | 显示全部楼层
手头上也有一块NEC的屏,有时间试试

出0入0汤圆

发表于 2010-5-29 16:50:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-16 16:58:43 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2010-6-16 17:49:29 | 显示全部楼层
使用parameter并生成了symbol的话,可能会出现源程序中参数定义parameter定义的值和symbol中存储的值不一致的情况
修改了源程序的parameter的值并执行更新symbol的操作,并不能修改symbol中存储的值,除非把symbol删掉再重新生成

Quartus II在综合的时候,调取的是symbol中的值,而不是源程序中定义的值,lz的问题可能是这个原因造成的

所以,源程序中定义并修改了parameter的话,一定要注意和symbol保持一致

出0入0汤圆

发表于 2010-6-16 21:37:19 | 显示全部楼层
好东西 mark

出0入0汤圆

发表于 2010-7-9 00:15:13 | 显示全部楼层
special mark

出0入0汤圆

发表于 2010-7-9 09:15:52 | 显示全部楼层
学习了!!!

出0入0汤圆

发表于 2010-7-9 13:47:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-10 19:44:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-10 21:56:11 | 显示全部楼层
楼主的屏那买的 本人想要多少钱????

出0入0汤圆

发表于 2010-7-11 12:34:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-11 22:57:55 | 显示全部楼层
具体参数设置参考的网站:
http://www.tinyvga.com/vga-timing

MARK

出0入0汤圆

发表于 2010-7-12 00:58:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-12 10:23:50 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-8-10 17:11:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-10 18:16:59 | 显示全部楼层
盖章

出0入0汤圆

发表于 2010-8-10 22:39:40 | 显示全部楼层
mark 一下,有空试试

出0入0汤圆

发表于 2010-8-11 10:35:39 | 显示全部楼层
楼主哥,我在研究你的程序,没有改动,直接下载:产生的竖条 前面的白,黄没有了部分
             白色直接没有显示 从最边缘开始显示黄颜色的,而且只有几列的
不值什么原因啊

出0入46汤圆

发表于 2010-8-11 11:46:19 | 显示全部楼层
不错!

出0入0汤圆

发表于 2010-8-11 13:52:53 | 显示全部楼层
先留个印,等过段时间空了好好看下,一直很想做这些方面的东西玩玩,嘿嘿

出0入0汤圆

发表于 2010-8-11 15:59:55 | 显示全部楼层
mk

出0入0汤圆

发表于 2010-8-12 02:14:53 | 显示全部楼层
留着准备点亮LVDS的屏

出0入0汤圆

发表于 2010-8-12 06:31:18 | 显示全部楼层
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

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-24 09:30

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

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