linux怎么查看本机内存大小
287
2022-11-03
基于FPGA异步串行通信接口模块设计与实现
0 引 言
在基于FPGA的工程实践中,常需要其与串口设备通信,但在Xilinx现有的开发环境ISE中没有相关的IP核。目前也有使用FPGA设计UART的例子[9-13]后,但有的参数固定,缺乏通用性。本文设计和实现了参数可在线配置的UART接口模块,为FPGA与其他设备通信提供了一种可靠途径。
1 UART串行通信简介
UART属于异步通信接口,通信双方需约定好波特率。国际上规定了一系列标准的波特率,如9 600b/s、19 200b/s、115 200b/s等。UART每一数据帧,依次由起始位(1位)、数据位(5~8位),奇偶校验位(可选的1位)以及停止位(1~2位)组成。其中数据位部分是从最低位先开始传送的;奇偶校验位是对1帧数据中的数据部分和校验位计算,使‘1’的个数满足奇数个或偶数个。当UART空闲时,收发引脚RXD与TXD均是高电平。一旦需要发送数据,则首先向TXD引脚输出低电平作为起始位,表示1帧数据的开始。而在接收数据时,检测到起始位将启动一次数据接收流程。
2 系统设计
本文设计的UART通信接口主要由波特率产生模块、发送模块、接收模块以及微处理器接口模块组成。各模块使用VHDL语言来表述,模块之间的信号连接是通过顶层文件中的元件例化语句实现。
整个设计的结构框图如图1所示。设计和实现的UART通信模块主要功能如下: 1)实现了串行数据的发送和接收。 2)停止位可设置(1位或2位)。
3)可设置是否启用奇偶校验功能,以及校验模式设置即选择奇校验还是偶校验。
4)波特率可配置。标准的波特率系列中从9 600~115 200b/s均可设置,同时还支持自定义的波特率。 5)设计了微处理器接口,通过接口可访问UART内部寄存器,配置UART参数,读写收发数据。
3 UART各模块的设计
下面详细介绍UART各模块的设计思路和方法,同时给出了主要模块的行为仿真时序图。
3.1 波特率发生模块
3.2 发送模块
发送模块按照用户设置,将TxHolder中的并行数据串行发送出去,其核心为1个有限状态机,其状态转换如图2所示。
1)Idle状态 当系统上电复位之后,发送状态机即进入此状态。若不向发送缓冲器写入数据,那么TxDataValid为低电平,表示发送缓冲器空,状态机始终在此状态循环等待,TXD引脚输出高电平。
2)Start状态 一旦向发送缓冲器TxHolder 中写入数据,TxDataValid即变为高电平。状态机由Idle状态切换到Start状态,TXD输出低电平,输出起始位。
3)Shift状态 1位波特时间过后,状态机无条件的转换到Shift状态,即使能发送移位寄存器,开始将并行数据逐位右移,实现并串转换并输出到TXD。当输出的数据个数达到Databit设定的数据位宽时,便转换到Parity或者Stop_1bt状态,否则仍转换到该状态。
4)Parity状态 若数据位部分发送完毕,且奇偶校验使能位ParityEn=‘1’时,则转换到该状态。该状态下,根据已发送的数据和选择的校验模式,发送校验位。
5)Stop_1bit状态 无论停止位为1位还是2位,都先转换到Stop_1bit状态,先输出1位停止位。由该状态转换下一状态时,次态会有多种情况。若设置了stopbit为‘1’即选择2位停止位时,次态为stop_2bit;若stopbit为‘0’且发送缓冲器为空时,次态即转换到idle状态,否则转换到start状态开始新一轮的数据发送。
6)Stop_2bit状态 若选择2位停止位时,才会进入此状态。持续1个波特时间后,根据TxDataValid状态,进入Idle状态待命,或进入Start状态开始新1轮的数据发送。
发送模块的行为仿真时序图如图3所示。其UART参数设置为偶校验、8位数据位和1位停止位。txclk为发送采样时钟信号,在该信号的上升沿,发送状态机状态翻转,同时数据被送到TxOut(TXD)引脚。图中TxOut输出的数据为“00100110011”,去掉起始位、校验位和停止位后即为待发送的数据0x32。由仿真所得发送模块的时序图可知,该模块各信号仿真结果正确无误。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~