完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如果现在有两个时钟,即假设100MHZ APB总线时钟和波特率为115200的串口要建立连接的话,应该是使用fifo吧,那么APB总线一端的快时钟读fifo里面的数据,时钟很慢的串口往fifo里面写数据,是不是肯定会出现fifo为空的情况,这时候需要等待一段时间,直到fifo给APB总线发送了可读信号,APB总线才能够读取数据。那么问题是:APB执行过程只有两个周期,只要APB总线发生读操作,fifo很快就会空了,那么fifo要如何工作,才能最大的优化uart和APB总线之间的连接呢?
|
|
相关推荐
6个回答
|
|
对于设计上来说,FIFO你永远不能在满的时候去写,或者是空的时候去读,这个在设计上都是不对的。在FIFO快要空的时候,你就不能再去读了。你的提问也没有提到数据率是如何的,写进去和读出去的速率,一个100M的时钟,还有一个是多少M?
举个例子,如果读写是2倍的速率,你就把FIFO深度设大1倍即可。主要是看你的吞吐率。 跨时钟域的问题,建议用2级FIFO缓存,前级异步FIFO只做跨时钟域,然后直接读出来再存到同步FIFO。 |
|
|
|
如果是APB总线挂载一个串口的话 这个fifo要怎么设计? APB时钟100MHZ,串口的时钟是由APB时钟分频出来的,假如串口波特率115200的话,fifo有用吗? 那么他的工作流程是什么样的?为什么说读写是2倍的速率,你就把FIFO深度设大1倍即可? 假如读比写快两倍,那么写入1个数据时候,就读出了2个数据了,如果数据流很大的话,肯定在一定时间后读赶上了写的位置了,那么有没有办法让它不会赶上写的位置呢?
|
|
|
|
你的设计是“慢时钟往FIFO里面写,快时钟读出对吗?”那也就是说你这个FIFO永远不会写满嘛。
那对于写来说,你就直接写. assign afifo_wr_en = (~afifo_full); 只要不满你就写。 对于读来说,不空你就读啊。 |
|
|
|
|
|
|
|
APB总线我记得应该有仲裁吧。对于每次操作,你读取N个字时,你让读方等待FIFO直到有N个数据再去读,就不会卡APB了。否则你应该在数据没有N个时暂停传输,直到数据够了。
切记不要去等FIFO。你等不起。 |
|
|
|
哦,我之前也是这样想的,但是如果这样做,会不能实现两端读和写同步的话,总觉得有点什么瑕疵。打个比方如果现在芯片只做串口接收数据,那么读的太快,总会出现APB总线等待fifo存入数据的。
|
|
|
|
只有小组成员才能发言,加入小组>>
2862 浏览 3 评论
27626 浏览 2 评论
3435 浏览 2 评论
3958 浏览 4 评论
基于采用FPGA控制MV-D1024E系列相机的图像采集系统设计
2304 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 18:45 , Processed in 0.675469 second(s), Total 90, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号