基于FPGA的RS232异步串行口IP核设计

串行传输指的是组成字符的若干位二进制码排列成数据流以串行的方式在一条信道上传输。通常传输顺序为由低位到高位,传完这个字符再传下一个字符。因此收、发双方必须保持字符同步,以使接收方能够从接收的数据比特流中正确区分出与发送方相同的一个一个的字符。这是串行传输必须解决的问题。串行传输只需要一条传输信道,易于实现,是目前主要采用的一种传输方式。

在串行传输中,如何解决字符的同步问题,目前主要存在两种方式:即异步传输和同步传输。异步传输方式的优点是实现字符同步比较简单,收发双方的时钟信号不需要严格同步。缺点是对每个字符都需加入起始位和终止位,因而传输效率低。

同步传输是以固定的时钟节拍来发送数据信号的,因此在一个串行数据流中,各信号码元之间的相对位置是固定的(即同步)。接收方为了从接收到的数据流中正确地区分一个个信号码元,必须建立准确的时钟信号。与异步传输方式相比,由于它发送每一字符时不需要单独加起始位和终止位,故具有较高的传输效率,但实现起来比较复杂。

本课题我们将重点讨论异步串口通信的设计与实现。

3.2串行通信协议

串行通信接口按电气标准及协议来划分包括Rs-232、Rs-422、Rs485、LVDS等。RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。LVDS是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。本课题我们将设计基于RS232的串口通信系统,这里重点介绍一下RS232串口接口。

目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通信中增加通信距离的标准,它采取不平衡传输方式,即所谓单端通信。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5到+l5V,负电平在-5到-15v电平。当无数据传输时,线上为TTL电平,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平在+3到+l2v与-3到-12v。Rs-232是为点对点(即只用一对收、发设备)通信而设计的,其驱动器负载为3到7k。。由于RS-232发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约30米,最高速率为20kb/s。所以RS-232适合本地设备之间的通信。

3.2串行通信硬件接口介绍

目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。这里我们采用的9针的串口结构,如图3.1所示。

 

图3.1 串口结构示意图

 

图3.2 25针与9针串口对比图

这里主要介绍9针的结构。

1.载波检测:确定调制解调器是否连接到了可用的电话线路。

2.接收数据:计算机接收调制解调器发送过来的信息。

3.传输数据:计算机向调制解调器发送信息。

4.数据终端就绪:计算机通知调制解调器自己已准备好通话。

5.信号地线:针脚接地。

6.数据集就绪:调制解调器通知计算机自己已准备好通话。

7.请求发送:计算机询问调制解调器是否可以发送信息。

8.同意发送:调制解调器通知计算机可以发送信息。

9.振铃指示器:发起呼叫后,计算机指示检测到振铃的信号(发送自调制解调器)已收到。

 

电子通信领域,波特率即调制速率,指的是信号被调制以后在单位时间内的波特数,即单位时间内载波参数变化的次数。它是对信号传输速率的一种度量,通常以“波特每秒”(Bps)为单位。 波特率有时候会同比特率混淆,实际上后者是对信息传输速率(传信率)的度量。波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同的调制方法可以在一个码元上负载多个比特信息。调制解调器的通讯速度。波特率是指线路状态更改的次数。只有每个信号符合所传输数据的一位时,才等于每秒位数。 为了在彼此之间通讯,调制解调器必须使用相同的波特率进行操作。如果将调制解调器的波特率设置为高于其他的调制解调器的波特率,则较快的调制解调器通常要改变其波特率以匹配速度较慢的调制解调器。

  由于本系统需要设计的是波特率可控的,所以需要通过设置不同的波特率来进行串口通信。通常情况下,波特率和时钟频率之间的关系可以用如下的公式表示。

                                                    (4.1)

假设系统的时钟频率为40Mhz。要产生波特率为9600的串口通信,那么需要的分频数为:

                                   (4.2)

转换为16进制,分频值即为:

由计算公式,我们将时钟频率40MHZ除以波特率9600的两倍,可以得到一个分频系数2083.3333,又由于我们的串口通信的8位通信,应此要将获得的分频值再除以8,我们得到260,转化为16进制16'h104,这个就是我们得到的分频值。

    常用的波特率有2400,4800,9600,19200等,为了方便,这里我们就采用这三组波特率。那么其分频值为:

 

 

 

 

其VHDL代码如下所示:

 

这里通过选择语句实现四种波特率的选择。但是在实际仿真过程中,设置40000000会使仿真时间很长,所以在仿真的时候,做如下修改:

 

其仿真波形如下所示:

 

图4-2 2400波特率

 

图4-3 4800波特率

 

图4-4 9600波特率

 

图4-5 19200波特率

以上就是不同波特率的选择方式。本质上波特率的控制就是系统时钟的不同分频。通过综合,其RTL图如下所示:

 

图4-6 波特率控制模块RTL图

这里我们采用的是利用状态机来实现串口通信,当发送数据位的时候,状态在1到8的时候,利用移位的方法,将数据一位一位的发送出去,将状态作为计数器一个一个的相加,这样,对应的发送一位数据,将其中的状态累加,即进入下一个状态,从而实现数据位的发送。由于接收器、发送器异步工作,无需联接接收和发送时钟。接收器采取对输入数据流高度采样方式,通常采样为16,并根据采样值确定位值。按惯例,使用16个采样值的中间三个值。

异步串口通信协议作为UART的一种,工作原理是将传输数据的每个字符一位接一位地传输。下图给出了其工作模式:

图4-7 串口波形帧格式

在启动一次发送或接收操作之后,串行UART(不论是软件还是硬件形式的UART)并不需要连续监控I/O线。在发送一个字符时,每个位周期,UART只需驱动一次发送信号线的状态,从起始位到8个数据位直到结束位依次设置每个位的电平。在接收一个字符时,UART在第一个下降沿开始工作,之后只需在每个位时隙的中央对接收线上的信号状态进行一次采样。 我们可以用一对状态机来表征软件UART的行为,一个状态机用于发送字符,另一个用于接收字符。

VHDL代码如下所示:

最后一个WHEN判决就是实现了串口数据的发送,其仿真波形如下所示:

图4-8串口发送

如上图所示,当发送数据为10101100的时候,串口将其从最低位开始传输,即发送0,0,1,1,0,1,0,1当发送完最后一个1的时候,done信号产生高电平说明传输完毕。

    串口的接收模块和发送模块原理基本相同,当接收到一个串行信号的时候,其将信号写入一个移位寄存器中,然后移位寄存器进行移位,然后接收新的串行信号,从而完成信号的接收,其原理比较简单,其VHDL代码如下所示:

其仿真波形图如下所示:

 

图4-9串口接收波形

当接收到串行信号的时候,当输出接收准备信号的时候,开始接收信号,这里already信号之后出现的四个1和四个0,所以转换为并行信号后就是00001111。

RS232 FPGA硬件设计是指使用FPGA来实现RS232串口通信的硬件设计。这种设计可以使用不同的硬件描述语言,如VHDL或Verilog,并在相应的开发环境中进行设计和仿真,如Xilinx ISE。其中,可以通过引入UART IP核来实现电路的异步串行通信功能。该IP核具有模块化、兼容性和可配置性的特点,可以根据需求对功能进行升级、扩充或裁减。通过这样的硬件设计,可以实现FPGA与外部设备之间的可靠串口通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于FPGARS232_422多通道接口设计与实现.pdf](https://download.csdn.net/download/u013883025/20242203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [FPGA控制RS232串口通信实现verilog设计Quartus9.1工程源码.zip](https://download.csdn.net/download/SKCQTGZX/51938284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [基于FPGARS232异步串行口IP核设计](https://download.csdn.net/download/weixin_38513794/16715649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值