设计了个VGA控制IP,由一个FIFO、一个VGA时序控制器、一个主端口、一个从端口组成。 在没有CPU的情况下能从SDRAM中读出数据正常显示,加了CPU后因为CPU也要用SDRAM,产生了冲突。
SDRAM时钟:100MHz,速度略小于200MB/S。
VGA时钟:50MHz,读32位FIFO时钟:25MHz。因为用两个字节(16bit)存放一个点的RGB值。速度略小于100MB/S。
我想到的解决办法是:当FIFO快空时产生中断告诉CPU,让CPU等待(让出总线控制权),VGA控制器开始读SDRAM,总线将数据写入FIFO中。当FIFO快满时,CPU检测到标志改变,跳出中断函数,继续执行程序(获得总线控制权),同时VGA暂停读数据让出总线控制权,然后FIFO快空时……
我已经实现的:当FIFO快空时,VGA端的主端口read_n有效,地址接着累加;当FIFO快满时,VGA主端口read_n无效,输出地址暂时为0。目前没有用中断。
我想问的:具体怎么让出总线的控制权?是不是让read无效就行了?当我加入了CPU后程序没有任何反应,我觉得是SDRAM让CPU一直在等待,CPU被无限挂起。我就是想让VGA控制器与CPU共享一块SDRAM。望高手指点迷津。
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
SOPC中的各模块通过Altera公司开发的Avalon总线互连。任何一个挂接在Avalon总线上的模块都必须符合Avalon总线规范,即包含特定的信号类型clk,reset,chipselect,write,writedata等,并满足一定建立保持时间和等待周期的读写模式。一个典型模块的Controller Core由硬件和驱动软件两部分构成。
楼上正解,我也在为总线控制权的问题犯愁,期待中。。。。