mysunmax 发表于 2012-4-19 14:00:44

VGA显存问题讨论~

我想把VGA的驱动变成IP,挂到PLB总线上,由Microblaze读取DDR中的图像数据传送给RAM显存。(以前是直接将图片全存到ram中,现在想试一下缓存的方法)显存:由于使用的是spartan 3e 500e,内部ram金贵,所以要想一个办法实现,首先在fpga内部开辟两行的图像存储空间,然后用点时钟轮流去读取这两行,当a行读完则加载b行,轮流执行(使用双口ram)。现在RAM的缓存实现了,VGA驱动搞定了,还没组装,哈哈。。心中没底,不知道可行否,希望大牛们出来给些意见,或者针对显存这种模式是否有更好的办法,在这小弟谢过啦~{:smile:} 。

shangdawei 发表于 2012-4-19 15:15:31

能否分享你的代码, 或者提供一个示意图 ?

NJ8888 发表于 2012-4-19 16:51:31

没用过DDR

htjgdw 发表于 2012-4-19 17:08:12

想问下楼主,spartan-3e 500e实现microblaze软核CPU要占用多少内部资源?

wye11083 发表于 2012-4-19 17:11:28

这样最好了,而且可以每行一个内存突发占用,速度更快。我的片子太老,只够缓存一行(我还要用做FIFO等),我正在考虑每行突发一次。只是Cache得做些优化了,要不然CPU会暂停。

simmconn 发表于 2012-4-22 03:33:27

用CPU传每一笔数据到VGA控制器会比较慢。通常的做法是在外部RAM里开两个屏幕大小的显存(double buffering),然后外部RAM控制器至少有两个以上的端口,一个给CPU用,一个给VGA控制器用。VGA控制器按扫描输出的需要定时自动读取一块显存的内容(也就是通常说的DMA模式)。CPU负责写另一块显存,写好了再交换。两块显存的交换可以用软件,也可以用硬件控制。作为VGA控制器的一部分,内部RAM用来做行存储器(FIFO或简单的buffer都可以),以突发方式读取显存,提高外部RAM总线的利用率。这种做法的好处是将CPU与VGA控制器在时间分配上解藕,适合于每幅图片CPU处理时间不定的情况。

wangshaosh123 发表于 2012-4-22 16:08:14

EDK里面有个IP支持VGA的你研究一下

newbier 发表于 2012-4-22 16:30:53

6楼才是最常见的做法

mysunmax 发表于 2012-4-22 17:52:30

simmconn 发表于 2012-4-22 03:33 static/image/common/back.gif
用CPU传每一笔数据到VGA控制器会比较慢。通常的做法是在外部RAM里开两个屏幕大小的显存(double buffering ...

谢谢你的建议,现在VGA控制和他内部的行缓存调差不多了,就是码流比较难控制。希望再给些建议,哈哈。

bad_fpga 发表于 2012-4-24 12:08:05

关注,不错的设计

simmconn 发表于 2012-4-26 16:04:34

mysunmax 发表于 2012-4-22 17:52 static/image/common/back.gif
谢谢你的建议,现在VGA控制和他内部的行缓存调差不多了,就是码流比较难控制。希望再给些建议,哈哈。 ...

不清楚你说的“码流比较难控制”指的具体是哪部分的码流。如果你用简单的行缓存(而不是FIFO),而且外部RAM足够快的话,可以在行消隐期填充缓存,行正程读出显示,这样VGA控制器对外存的使用时序就很固定。如果外部RAM不够快,那么行缓存可以用FIFO方式,可以随时利用外部RAM空闲的时间填充显示数据。用FIFO方式外存渎指针的管理稍微麻烦一些。
页: [1]
查看完整版本: VGA显存问题讨论~