yuangaoping 发表于 2010-1-26 10:00:42

终于点亮了我的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 的值
判断正常。

到底是什么原因呢???

tear086 发表于 2010-1-26 10:08:06

我们要看图。

yuangaoping 发表于 2010-1-26 10:21:20

手机拍的,效果比较差
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_529095.jpg
点亮我的显示器 (原文件名:IMG_016.jpg)

Jigsaw 发表于 2010-1-26 11:10:05

不错

yuhang 发表于 2010-1-26 11:47:45

我用CPLD写的

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

cinderellah 发表于 2010-1-26 12:03:22

mark

quzegang 发表于 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 吗

AVR_DIY 发表于 2010-1-26 12:17:06

不错

yuangaoping 发表于 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吗?我试试。

zbx602000 发表于 2010-1-26 12:49:49

cool .dian lu tu you ma?

zbx602000 发表于 2010-1-26 12:53:37

楼主能上传电路图看看吗?我也有个xilinx 128 cell CPLD.

hy317 发表于 2010-1-26 13:15:01

mark

abs123 发表于 2010-1-26 14:08:36

向楼主学习

avr-qq 发表于 2010-1-26 14:46:16

不错

moen 发表于 2010-1-26 15:10:00

bu cuo !

niba 发表于 2010-1-26 15:12:01

不错。。。期待更·NB的

kunnsd 发表于 2010-1-26 15:58:03

前几天朋友给了我块NEC的彩屏,型号是NL8060,800*600的,10.2寸,26万色,我用的是EP2C20和两片25616的sram做了个控制器,效果还不错
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_529243.JPG
(原文件名:DSC00994.JPG)

yuangaoping 发表于 2010-1-26 16:44:17

参考资料来了

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

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

niba 发表于 2010-1-26 19:27:18

16楼的更牛呀。。。佩服,魏坤是技术多面手呀

hiux 发表于 2010-1-27 09:05:51

学习一下.

ljt8015 发表于 2010-1-27 10:18:17

mark

czxf 发表于 2010-1-27 10:35:49

mark

dy45 发表于 2010-1-27 14:12:29

我也是昨天刚 点亮了 LCD ,800*480的 VHDL的

swarron 发表于 2010-1-29 16:39:28

very cool!

tangfree 发表于 2010-1-29 17:01:23

很强啊,fpga。

weixintec 发表于 2010-1-29 21:23:49

mark

kugel 发表于 2010-1-29 23:34:05

mark

wu283326736 发表于 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”。
对吧!

XU_MAJIA 发表于 2010-1-31 14:35:08

mark

wllf123 发表于 2010-1-31 15:05:15

mark

fy024 发表于 2010-1-31 16:49:58

mark

flashman911 发表于 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后,再次修改参数值时,发现修改后编译仍然没有改变参数名所对应的值。后来,每次修改时,我都修改参数名,就可以了,不知道楼主跟我遇到的是不是一个问题

sanzangge 发表于 2010-2-2 21:45:51

mark

yuangaoping 发表于 2010-2-2 22:50:05

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

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

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

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

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

RF_Xu 发表于 2010-2-3 00:03:54

remark

kangar0065 发表于 2010-2-7 01:51:25

我有一块光板的液晶屏,是IBM的笔记本上拆下来的,那个LVDS接口怎么连接到FPGA上去呢?请教

flashman911 发表于 2010-2-9 22:33:48

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

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

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

wangyi1e 发表于 2010-2-23 17:45:51

mark一下哦

durgy 发表于 2010-2-23 21:31:18

好!谢谢!

ringan865 发表于 2010-2-25 19:28:22

mark

bone 发表于 2010-2-25 20:25:53

既然定义了h_Back_porch,那么Whole_line这个参数还是定义为H_total比较好吧

chahu1227 发表于 2010-2-27 15:12:36

mark

ep1c3 发表于 2010-3-5 10:51:54

mark

chys01 发表于 2010-3-6 19:11:53

好东西

hscheng 发表于 2010-3-7 13:52:10

回复【16楼】kunnsd 魏坤
-----------------------------------------------------------------------

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

jackmo 发表于 2010-3-8 10:49:25

mark

czxf 发表于 2010-3-8 12:05:23

mark

guke 发表于 2010-3-15 21:57:20

Mark

liitom 发表于 2010-3-16 11:52:09

mark

yangang 发表于 2010-3-16 11:57:41

mark

li20030505 发表于 2010-3-16 11:59:35

学习

zsw3979 发表于 2010-3-19 19:27:36

看看了

uplinux 发表于 2010-3-21 16:40:57

mark

minni1223 发表于 2010-4-8 20:15:41

学习

myfriend6042 发表于 2010-4-9 12:36:43

mark

sagetom 发表于 2010-4-9 22:46:12

mark!

caozhu 发表于 2010-4-9 23:13:06

mark正在搞这个

loongsuns 发表于 2010-4-9 23:14:42

mark

radiation 发表于 2010-5-1 11:07:16

mark 正在学习!

kunpeng032 发表于 2010-5-4 10:01:35

mark

zbjzxc 发表于 2010-5-4 11:18:35

记号~~

FlashNuk 发表于 2010-5-4 11:52:06

很好!

lghtjpu 发表于 2010-5-4 12:04:08

MARK

marrt.80 发表于 2010-5-4 13:20:56

mark

zzjjhh250 发表于 2010-5-15 17:50:59

记录 谢谢

lostmj 发表于 2010-5-15 19:23:31

mark

zhiyuan1106 发表于 2010-5-15 20:06:46

mark

yangyi 发表于 2010-5-16 07:33:19

谢谢共享!收藏了

weixintec 发表于 2010-5-16 09:04:52

记号一下

hongyancl 发表于 2010-5-16 09:07:15

回复【楼主位】yuangaoping
-----------------------------------------------------------------------

ddddddddddd

gz_dailin 发表于 2010-5-16 11:34:41

mark一下。

D.lovers 发表于 2010-5-16 12:16:24

mark

ringan865 发表于 2010-5-25 18:00:15

mark

luy3728000 发表于 2010-5-26 19:33:56

cool

cu_ice 发表于 2010-5-26 20:28:40

mark~~

jhzhao2004 发表于 2010-5-26 20:59:04

mark

cuso4 发表于 2010-5-29 16:46:33

手头上也有一块NEC的屏,有时间试试

yuhui 发表于 2010-5-29 16:50:58

mark

luan_dahai 发表于 2010-6-16 16:58:43

学习了。

TeWu 发表于 2010-6-16 17:49:29

使用parameter并生成了symbol的话,可能会出现源程序中参数定义parameter定义的值和symbol中存储的值不一致的情况
修改了源程序的parameter的值并执行更新symbol的操作,并不能修改symbol中存储的值,除非把symbol删掉再重新生成

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

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

notalklu 发表于 2010-6-16 21:37:19

好东西 mark

xeptf6 发表于 2010-7-9 00:15:13

special mark

oceanx 发表于 2010-7-9 09:15:52

学习了!!!

quzegang 发表于 2010-7-9 13:47:17

mark

moon0213 发表于 2010-7-10 19:44:45

mark

YFM_LMM 发表于 2010-7-10 21:56:11

楼主的屏那买的 本人想要多少钱????

shangdawei 发表于 2010-7-11 12:34:32

mark

shangdawei 发表于 2010-7-11 22:57:55

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

MARK

yuex1n 发表于 2010-7-12 00:58:00

mark

liitom 发表于 2010-7-12 10:23:50

学习

281229961 发表于 2010-8-10 17:11:26

mark

capron 发表于 2010-8-10 18:16:59

盖章

eeko2005 发表于 2010-8-10 22:39:40

mark 一下,有空试试

281229961 发表于 2010-8-11 10:35:39

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

bjj9217 发表于 2010-8-11 11:46:19

不错!

brightegg 发表于 2010-8-11 13:52:53

先留个印,等过段时间空了好好看下,一直很想做这些方面的东西玩玩,嘿嘿

lsw0136 发表于 2010-8-11 15:59:55

mk

rlogin 发表于 2010-8-12 02:14:53

留着准备点亮LVDS的屏

bj-stm8 发表于 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

Sybia 发表于 2010-9-5 23:22:22

cool!!!
页: [1] 2
查看完整版本: 终于点亮了我的LCD显示器,1024*768@60Hz,verilog语言,EP2C8,全部源码