天元建设集团网站,全景网投资者互动平台,怀来建设银行网站,wordpress友情链接设置文章简介
本系列文章主要针对FPGA初学者编写#xff0c;包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解#xff0c;旨在更快速的提升初学者在FPGA开发方面的能力#xff0c;每一个章节中都有针对性的代码…文章简介
本系列文章主要针对FPGA初学者编写包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解旨在更快速的提升初学者在FPGA开发方面的能力每一个章节中都有针对性的代码书写以及代码的讲解可作为读者参考。
第十四章异步串口通信
UART 串行接口简称串口是我们各类芯片最常用的一种异步通信接口通过串口我们就可以建立起计算机和我们实验板之间的通信和控制关系也就是我们通常所说的上下位机通信。 串口传输特点是数据一位一位的按顺序传输按照接口标准划分为同步通信spi和异步通信uart本章重点讲解异步通信中的 rs232 标 准。 在串行通信中rs232 是常用的一种总线在工业控制中 rs232 总线的 rxd 和 txd 两根线经常被用到。如图 1 所示 图1 通信结构示意 由图1可以看出要实现 PC 机与 FPGA 之间的通信FPGA 需要控制的其实也就是两条信号线rxd 和 txd分别为数据接收线和数据发送线。FPGA 可以通过两根总线做到同时收发数据因此它是一种全双工的通信总线。 了解了 UART 的数据格式那么传输速率如何 控制呢这就涉及到了一个波特率的概念波特率是衡量数据传输速率的指针。表示为每秒钟传送的二进制位数bit, 例如传送速率为 120 字符/秒而每一个字符为 10 位则其传送的波特率为 10*1201200 波特bit。假设我们通过 PC 端发送一个 8bit 的数据到 FPGA 端由于 FPGA 的接收总线 rxd 只有 1bit所以需要将 PC 端发送的 8bit 数据分成 8 次发送发送的频率称为比特率比特率波特率*N其中 N 指的是数据的位宽在此由于传输的数据位宽为 1所以波特率和比特率相等。 我们设定 PC 与 FPGA 间通过uart 通信的波特率为 9600bps被传输数据的位宽 8完成从 PC 端传输数据到 FPGA 端FPGA 端将接收后的 8bit 数据通过 txd 返回给 PC 端若 PC 端发送的数据与接收的数据相同则认为传输正确。uart通信协议如图2所示 图2 通信协议 在接收数据时采集一帧数据的中间 8 位有效位忽略开始位与停止位在发送数据时将发送的并行 8 位数据转为串行数据并添加开始位与停止位。UART 中的一帧数据为 10 位空闲时均为高电平在检测到开始位低电平 之后开始采集 8 位有效数据位低位在前再将停止位置为高电平。uart数据格式如下 图3 uart数据格式 说明在此实验中无奇偶校验位则一帧数据为十位。奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验反之称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位用它使这组代码中 “1”的个数为奇数或偶数。若用奇校验则当接收端收到这组代码时校验“1” 的个数是否为奇数从而确定传输代码的正确性。
要求设置一个 UART 控制器波特率9600bps当控制器从上位机接收到数据以后马上将数据输出发送回上位机。通过判断发送的数据与接收的数据是否一致来验证传输的正确性。
设计系统模块图如下 图4 top_uart模块框图 图5 rx接收模块 图6 tx发送模块
代码示例1rx模块 代码示例2tx模块 代码示例3top模块