在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 4701|回复: 6

[原创] PCI9054的DMA由本地总线挂载CPU启动的疑惑。

[复制链接]
发表于 2010-3-15 17:40:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我设计的PCI9054板卡外接一个FPGA。FPGA里面设计一个NIOS ,通过FPGA内部FIFO与9054的相连。现在有一个问题:我的FIFO大小是4K字节。如果NIOS要上传的数据大约是20M字节/秒的话,如何设计DMA传输?如果采用DMA和中断结合的话,假设由PC设置9054DMA寄存器,然后启动DMA。DMA大小设置成4k。DMA传输结束后在DMA结束中断中继续设置下一次的中断,进行了N次后报告一次给应用程序。这样的话PC的中断过于频繁。要5000次/秒。而且中断函数中启动DMA的时候,可能下面FIFO中数据还没有填充满,不到4K呢。如果这时候读取,可能会出错。因此这个时候必须采用在中断函数中查询下面FIFO是否满,如果不满,还必须等待。这么做的话,感觉系统估计很难稳定。 因此我想到一个办法:假设应用程序需要读取1M字节,这时候按照启动DMA的方式申请内存1M,然后写9054DMA参数,也就是假设下面的FIFO大小是1M的方式做。只是这个参数写入到9054的邮箱地址中,实际并不启动DMA。下面的NIOS通过本地总线读取这个信息。无非是源地址目标地址数据长度信息。之后,每次当FIFO满后,NIOS就写9054的DMA寄存器,启动DMA来传。只是每次的长度是4K。这样传250次,满1M后给9054一个中断信号,PC机接收到信号后,直接去刚才申请的1M内存中取数据就好。 这样做的好处是下面只需要很小的缓冲区就能够做到高速数据接收和发送。也就是说直接把PC的内存当板上的缓存了(当然结合了一个小FIFO来实现)。这样的话就不用SRAM或者SDRAM做板上缓存都可以做到很高速度了。 如果这种方式可行,我在PC上开劈两个DMA缓冲区,把地址告诉下面NIOS。这样就构成一个乒乓存储通讯方式了。岂不是很妙? 不清楚这种方式是否理解正确。期待高人指点。
发表于 2010-3-17 09:04:07 | 显示全部楼层
想法不错,不知道能不能实现~
等达人出现
发表于 2010-7-21 19:09:39 | 显示全部楼层
have a look
发表于 2010-7-29 10:58:25 | 显示全部楼层
恩,不错
发表于 2010-11-24 13:31:05 | 显示全部楼层
恩,不错的想法。等高人指点
发表于 2011-12-21 20:51:06 | 显示全部楼层
恩,不错的想法。实现能否共享!
发表于 2013-8-9 15:38:36 | 显示全部楼层
我想问一下你的nios如何去控制9054?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 17:38 , Processed in 0.092405 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表