MyFPGA Forum

 找回密码
 注册
搜索
查看: 7713|回复: 7
打印 上一主题 下一主题

关于VGA显示

[复制链接]
跳转到指定楼层
1#
发表于 2010-8-16 09:53:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请帮我分析分析,谢谢了
.WR1_DATA({sCCD_R[11:7], sCCD_G[11:6],  sCCD_B[11:7]}),//16位
.WR1(sCCD_DVAL),
.WR1_ADDR(0),
.WR1_MAX_ADDR(480*340),
.WR1_LENGTH(9'h100),
.WR1_LOAD(!DLY_RST_0),
.WR1_CLK(CCD_PIXCLK),
//        FIFO Write S2
.WR2_DATA({sCCD_R[11:7], sCCD_G[11:6],  sCCD_B[11:7]}),//将write1再写入write2
.WR2(sCCD_DVAL),
.WR2_ADDR(22'h100000),
.WR2_MAX_ADDR(22'h100000+480*340),
.WR2_LENGTH(9'h100),
.WR2_LOAD(!DLY_RST_0),
.WR2_CLK(~CCD_PIXCLK),                  
//        FIFO Read Side 1
.RD1_DATA(Read_DATA3),//送往vga显示输出.RD1(Read),
.RD1_ADDR(0),
.RD1_MAX_ADDR(480*340),
.RD1_LENGTH(9'h100),
.RD1_LOAD(!DLY_RST_0),
.RD1_CLK(~VGA_CTRL_CLK),
//        FIFO Read Side 2
.RD2_DATA(GPIO0_D[15:0]), //送往GPIO0数据给NIOS处理.
.RD2_ADDR(22'h100000),
.RD2_MAX_ADDR(22'h100000+480*340),
.RD2_LENGTH(9'h100),
.RD2_LOAD(!DLY_RST_0),
.RD2_CLK(GPIO0_D[31]),//NIOS控制的时钟

write1的内容送vga显示,write2的内容送NIOS处理

我将write1的内容再写入到write2,之后从write2读出数据送NIOS处理,rgb数据打包为bmp图片存储起来
问题是:
1.最后显示的bmp图片是彩色的,跟雪花一样。送往显示屏的是好的。NIOS算法这边的程序是正确的,问题就出在发送数据这边。
2.当我按下暂停键时候write2里面的数据不变了,这个时候数据发送出去,出现雪花难道是发送数据的地址没有+1吗?发送的全是地址开始处的16位数据?
3.如果每发送一次地址+1,那么我用nios产生时钟,时钟到达则从write2里面发送一次16位数据给nios。这样的话write2里面的数据就会全部送往NIOS,那么为什么还要出现雪花呢?
4.我这样认为的:按下暂停键,write2里面的内容就不变了(vga显示的图像也暂停了),这个时候NIOS控制时钟,时钟下降沿到达则发送一次.RD2_DATA(GPIO0_D[15:0])数据,然后将数据填入到数组里面,接着第二次循环等等,直到数组填满,这样NIOS就全部拿到了采集的vga数据打包为bmp
5.我的这种想法对吗?特别是地址+1这个地方,是自动+1,还是得我来控制+1呢?
2#
 楼主| 发表于 2010-8-16 09:54:28 | 只看该作者
3#
发表于 2010-8-16 10:04:13 | 只看该作者
首先这个应该只需要一个 write port 就足够,
稍稍修改如下…

.WR1_DATA({sCCD_R[11:7], sCCD_G[11:6],  sCCD_B[11:7]}),//16位
.WR1(sCCD_DVAL),
.WR1_ADDR(0),
.WR1_MAX_ADDR(480*340),
.WR1_LENGTH(9'h100),
.WR1_LOAD(!DLY_RST_0),
.WR1_CLK(CCD_PIXCLK),
              
//        FIFO Read Side 1
.RD1_DATA(Read_DATA3),//送往vga显示输出.RD1(Read),
.RD1_ADDR(0),
.RD1_MAX_ADDR(480*340),
.RD1_LENGTH(9'h100),
.RD1_LOAD(!DLY_RST_0),
.RD1_CLK(~VGA_CTRL_CLK),
//        FIFO Read Side 2
.RD2_DATA(GPIO0_D[15:0]), //送往GPIO0数据给NIOS处理.
.RD2_ADDR(22'h0),
.RD2_MAX_ADDR(22'h480*340),
.RD2_LENGTH(9'h100),
.RD2_LOAD(!DLY_RST_0),
.RD2_CLK(GPIO0_D[31]),//NIOS控制的时钟
4#
发表于 2010-8-16 10:06:34 | 只看该作者
2.当我按下暂停键时候write2里面的数据不变了,这个时候数据发送出去,出现雪花难道是发送数据的地址没有+1吗?发送的全是地址开始处的16位数据?
当你按下暂停键时, sCCD_DVAL 就会变成 low, 是根本不会写入的喔~
5#
发表于 2010-8-16 10:09:05 | 只看该作者
3.如果每发送一次地址+1,那么我用nios产生时钟,时钟到达则从write2里面发送一次16位数据给nios。这样的话write2里面的数据就会全部送往NIOS,那么为什么还要出现雪花呢?
4.我这样认为的:按下暂停键,write2里面的内容就不变了(vga显示的图像也暂停了),这个时候NIOS控制时钟,时钟下降沿到达则发送一次.RD2_DATA(GPIO0_D[15:0])数据,然后将数据填入到数组里面,接着第二次循环等等,直到数组填满,这样NIOS就全部拿到了采集的vga数据打包为bmp
5.我的这种想法对吗?特别是地址+1这个地方,是自动+1,还是得我来控制+1呢?


这里 SDRAM 的地址是 SDRAM Controller 内部会根据你设定的 Length 自动往上加的动作喔!
6#
 楼主| 发表于 2010-8-16 12:10:18 | 只看该作者
回复 5# Pocahontas


    多谢指点,我的问题搞定了,非常感谢
7#
发表于 2010-8-16 18:52:10 | 只看该作者
.RD1_DATA(Read_DATA3),//送往vga显示输出.RD1(Read),
.RD1_ADDR(0),
.RD1_MAX_ADDR(480*340),
你的显示器是480*340的分辨率吗?

.RD2_DATA(GPIO0_D[15:0]), //送往GPIO0数据给NIOS处理
你这个NIOS是和GPIO0相连吗?
8#
发表于 2011-3-18 18:57:13 | 只看该作者
timing 可參考
http://tinyvga.com/vga-timing/800x600@60Hz

以Clock, HS, VS 應該就可以把Display 資料抓出. 沒問題的

建議可以對Clock 加個timing constrain
create_clock -period "40 MHZ" [get_ports VGA_CLOCK]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-4 11:37 , Processed in 0.042192 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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