完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
记得在上几篇博客中,有几名网友提出要加进去错误分析这一部分,那我们就从今天这篇文章开始加进去我在消化这段代码的过程中遇到的迷惑,与大家分享。
今天要写的是一段基于FIFO的串口发送机设计,之前也写过串口发送的电路,这次写的与上次的有几分类似。这段代码也是我看过别人写过的之后,消化一下再根据自己的理解写出来的,下面是我写这段代码的全部流程和思路,希望对刚开始接触的朋友来说有一点点的帮助,也希望有经验的朋友给予宝贵的建议。
首先来解释一下FIFO的含义,FIFO就是First Input First Output的缩写,就是先入先出的意思,按照我的理解就是,先进去的数据先出,例如一个数组的高位先进,那么读出来的时候也就高位先出。下面是百度百科的解释。
FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集,另一端是计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为100K×16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。
下面我们开始设计。
这次设计我们要设计一个串口发送机,想一下的话,我们要发送数据,总得有一个数据产生模块和数据发送模块吧。好,那么在我们的脑海里就出现了这两个模块。由于我们这次是借用Altera公司提供的IP核FIFO来完成,所以要加入这个模块,这个模块作为一个数据缓冲器,需要我们例化,等会我们按照思路来例化它。
好,模块出来了,我们将这三个模块分别定义为dataoutput块,fifo_ctrl块和uart_ctrl块。现在考虑连线。我个人感觉在设计之前,把要设计的东西在草稿纸上将大体框图画出来,具体到每一根连线,这样根据图来写代码要比直接用脑子构图要方便的多。三个模块,先考虑时钟和复位信号线,三个模块都有,然后,数据产生模块要将产生的数据发给FIFO模块,所以要有数据写入线,我们定义它为wr-datain,数据写入FIFO块后总要输出,这些数据就是我们要发送的数据,所以定义输出数据线tx_data,先不管FIFO,我们再来定义数据发送模块的连线,数据发送总要有个启动信号,所以我们定义变量tx_start,之后,还要有一个输出端给PC机,我们定义这个输出端位rs232,对于FIFO模块的例化过程很简单就不做过多的说明,只把接口说一下,FIFO模块除了时钟,复位信号外,还有数据输入端口,这个端口要和之前的数据产生模块的数据输出端口相连,还有写请求端口,高电平有效,数据发送模块每隔1秒钟产生一个16位的数据,并发送写请求命令给FIFO,还有读请求命令,高电平有效数据发送模块在发送数据时要发送一个读请求给FIFO,从中读取数据后再发送给PC机,还有空信号empty,只要检测到FIFO中有数据,empty就为低电平,我们可用这个信号来启动数据发送模块。这样一来,我们的整体框架就出来了有了这个整体框架,再写代码就容易多了。
下面是RTL视图
小墨QQ:584642877 微信:LYZ1023569 欢迎交流~
零基础学FPGA(十二)一步一脚印之基于FIFO的串口发送机设计全流程及常见错误详解代码.zip
752.79 KB , 下载次数: 426
举报
发布
AD采集FPGA做fft处理信号的问题
949 浏览 0 评论
优化 FPGA HLS 设计
428 浏览 0 评论
求FPGA 驱动控制ltc2271 或者 ltc2180 或者 ltc2190或者 ltc2202 的代码
1837 浏览 0 评论
基于 FPGA 的飞机大战游戏系统设计
495 浏览 0 评论
求助:遇见诡异问题,FPGA模块A输出端口连接模块B输入后,模块A不能正常工作的
1950 浏览 1 评论
新技术VPX VME64总线介绍
4674 浏览 104 评论
电子发烧友网
电子发烧友论坛
查看 »
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-1 20:25 , Processed in 0.931096 second(s), Total 75, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com