完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 machairodus 于 2014-5-29 00:10 编辑 小弟我最近用EDK做一个视频采集系统,做了一个视频采集的IP核,希望将采集 到的视频数据传到DDR2 中缓存。制作ip核时,我在IPIF界面选择使用rdpfifo,目的是 在userlogic中,将有效数据写入此fifo,然后在控制C程序中,使用生成的驱动函数: PALIN_mReadFromFIFO(XPAR_PALIN_0_BASEADDR,0)来将数据写入DDR2中。下图 就是利用中断从FIFO中读取数据写入DDR的过程。 然后问题就出现了,我发现写入DDR2中的数据只有前2048个是正确的,后面的都 不对,而2048正好是我设定的FIFO深度,所以问题应该是FIFO溢出了,我是这样理解的: PALIN_mReadFromFIFO()这个函数虽然读出了fifo中的数据,但是并没有释放fifo的 空间,导致只能正确写入2048个数据,不知道我的理解对不对。 究竟要如何做才能保证fifo释放了呢?在userlogic中,关于此FIFO只给了下图中几个信号, 其中能操作的也就output那几个,而IP2FIFO_Release、IP2FIFO_Restore和IP2FIFO_WrMark 这三个信号是用于packet的,这里没用到也不管,那么就只剩下IP2FIFO_WrReq和IP2FIFO_Data 了,但是这两个信号是用来往fifo里写数据的。在这里似乎也不能释放fifo? 总结一下吧:问题中的fifo是在edk生成ip核时的ipif界面生成的,它的作用是将IP核的数据通过microblaze写入DDR,所以写入fifo这部分功能应该是在IP中实现(也就是userlogic中),而读取fifo则应该是通过c程序(生成的驱动函数)实现。实际上,在ip核的userlogic中,只给了写fifo的控制信号,并没有给出读fifo的控制信号。如果是纯硬件语言控制的fifo,读出fifo中的数据后fifo也就同时释放了相应的长度;而现在使用驱动函数读取fifo,虽然能读到数据,但是却没能释放fifo,导致只能正确执行fifo深度(2048)的读写操作。 怎么样才能解决fifo溢出的问题呢?希望各位大牛们能解决我的困惑!或者给我指一条其他的路, 只要能将数据正确写入DDR2中就行。谢谢了! |
|
相关推荐
7个回答
|
|
真心不会程序
|
|
|
|
|
|
|
|
2048 是不是和FIFO字节的缓冲区长度有关
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1476 浏览 1 评论
1266 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1471 浏览 0 评论
920 浏览 0 评论
2272 浏览 0 评论
1444 浏览 35 评论
5628 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 03:19 , Processed in 0.859790 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号