MyFPGA Forum
标题:
关于VGA显示
[打印本页]
作者:
WPZAC
时间:
2010-8-16 09:53
标题:
关于VGA显示
请帮我分析分析,谢谢了
.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呢?
作者:
WPZAC
时间:
2010-8-16 09:54
1.jpg
(900.05 KB, 下载次数: 562)
下载附件
保存到相册
2010-8-16 09:54 上传
作者:
Pocahontas
时间:
2010-8-16 10:04
首先这个应该只需要一个 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控制的时钟
作者:
Pocahontas
时间:
2010-8-16 10:06
2.当我按下暂停键时候write2里面的数据不变了,这个时候数据发送出去,出现雪花难道是发送数据的地址没有+1吗?发送的全是地址开始处的16位数据?
当你按下暂停键时, sCCD_DVAL 就会变成 low, 是根本不会写入的喔~
作者:
Pocahontas
时间:
2010-8-16 10:09
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 自动往上加的动作喔!
作者:
WPZAC
时间:
2010-8-16 12:10
回复
5#
Pocahontas
多谢指点,我的问题搞定了,非常感谢
作者:
yuhengzhou
时间:
2010-8-16 18:52
.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相连吗?
作者:
自由人2008
时间:
2011-3-18 18:57
timing 可參考
http://tinyvga.com/vga-timing/800x600@60Hz
以Clock, HS, VS 應該就可以把Display 資料抓出. 沒問題的
建議可以對Clock 加個timing constrain
create_clock -period "40 MHZ" [get_ports VGA_CLOCK]
欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/)
Powered by Discuz! X3