天天看点

图片通过串口发送_UART串口module最傻瓜式的图片总结

最近做的一个项目需要把FPGA计算结果显示到电脑上,用到了uart串口。事情做完了,但我感觉我这辈子应该还会用到它,在此总结一下吧。代码由于涉及到项目肯定是不能发的,总结一下知识点还是可以的。

关于UART协议就不多说了,网上多的是,就下面这个维基上的图简单带过一下。

图片通过串口发送_UART串口module最傻瓜式的图片总结

我们要传的数据是中间的bit 0到bit 7的这8个数据,UART协议就是大伙约好了,让通信的线在没啥事的时候电平都是高,当要传输数据的时候,发送端module先发送一个周期的低电平,然后发送正经要传的8个数据,等传完后再把输出的电平拉回高。

接收端module怎么工作呢,他一旦看到电平从高变低了整整一个周期(我这里说的周期不是时钟频率那个周期,而是按波特率算出来的传一个数据位要花的大周期),就明白有活上门了,然后就吭哧吭哧开始接受数据,接受方法一般就是把数据拿过来放自己肚子里的寄存器存起来,接受完就完事了。

把说明再降智一点,电脑和FPGA之间怎么用这个UART串口协议呢?

1.我们在电脑的串口调试助手把数据敲进去,软件把数据配上开始位、结束位(有时候有校验位,我这没用到),通过数据线把包装完的10位数据发送给FPGA的接受端module。

2.接受端module接受完数据,把10位数中多余的开始位和结束位扒拉掉,然后把中间有效的8位数给DUT。

3.DUT做各种需要的计算操作,算完之后,把数据按照8位8位的格式交给FPGA的发送端module。

4.发送端module再把这些8位8位的数据按跟前面一样的方法,把这些8位数据包装成有开始位、结束位的10位数据,然后通过数据线把内容传给电脑。

5.这样我们在电脑调试助手上就可以看到FPGA计算后的处理结果了。

本来就想几句话带过的,结果叨逼叨了这么半天。

下面我们就按顺序来看,首先是FPGA接受端module的说明图片,画的比较随意,但应该都能看懂。

图片通过串口发送_UART串口module最傻瓜式的图片总结

这个输入串口module的代码主体就三个部分。

1.设定时钟频率,波特率,设定的目的是要计算出我们传输一个bit需要多少ns的时长,这个时长在后面的状态机里用得上。

2.一个简单的状态机,状态机就是上图中间S_IDLE到S_DATA的那五个状态。开头和结尾两个状态只用来控制信号线,不占时长,中间三个状态就对应了开始位,中间传输8个数据,结束位这么三种状态。

3.一系列的时序逻辑来实现上图描述各个状态下的功能。

接下来是发送端module:

图片通过串口发送_UART串口module最傻瓜式的图片总结

代码主体跟前面是类似的。

当然我们最后需要一个top module来把输入和输出串口统筹起来,这个部分就要根据不同的工程目的自己发挥了,这里就不谈了。