串 口 通讯设计之 Verilog 实现
FPGA串口模块是将由RS-485发送过来的数据进行处理,提取出 8位有效数据,并按异步串口通讯的格式 要求输出
到 MAX3223的12脚。FPGA选用Xilinx公司的Spartan II系列xc2s50。此部分为该设计的主体。如上 所述,输入数据的传输速率为
700k波特率。为了使FPGA能够正确地对输入数据进行采样,提高分辨率能力和抗
2倍。
干扰能力,采样时钟必须选用比波特率更高的时钟,理论上至少是波特率时钟的
1串口通信基本特点
随着多微机系统的应用和微机网络的发展,通信功能越来越显得重要。串行通信是在一根传输线上一位 一位地传
送信息.这根线既作数据线又作联络线。串行通信作为一种主要的通信方式,由于所用的传输线少,并且 可以借助现存的电话网进行信息传送,因此特别适合于远距离传送。在串行传输中,通信双方都按通信协议进行, 所谓通信协议是指通信双方的一种约定。约定对数据格式、同步方式、传送速度、传送步骤、纠错方式以及控制字 符定义等问题做岀统一规定,通信双方必须共同遵守。异步起止式的祯信息格式为:每祯信息由四部分组成:
a. 1位起始位。
b. 5~8位数据位。传送顺序是低位在前,高位在 后.依次传送。 c. 一位校验位,也可以没有。 d. 最后是1位或是2位停止位。
FPGA(Field Pmgrammable Gate Array) 现场可编程门阵列在数字电路的设计中已经被广泛使用。
计方式可以将以前需要多块集成芯片的电路设计到一块大模块可编程逻辑器件中, 了系统的可靠性和设计的灵活性。本文详细介绍了已在实际项目中应用的基于
这种设
大大减少了电路板的尺寸, 增强 FPGA的串口通讯设计。
本设计分为硬件电路设计和软件设计两部分,最后用仿真验证了程序设计的正确性。 2系统的硬件设计
本方案的异步串行通信的硬件接口电路图如图
串口模块、MAX3223和DB9。各部分功能简述如下:
RS-485数据发送模块是将前续电路的数据发送到 FPGA,供本电路处理,亦即本电路的输入。 RS485 是符合
RS-485和RS-4225串口标准的低功耗半双工收发器件, 有3.3V和5V两种,在本设计中选用了 3.3V的器 件 SP3485 。
在本设计中。485的7脚和8脚与前端信号相连接,用于接收输入的数据。数据格式是这样的:一帧数
据有25位,报头是16个高电平和1个低电平,接下来是 8位有效的数据。传输速率为 700k波特率。2脚是使能 端,与FPGA的I/O 口相连,由FPGA提供逻辑控制信号。1脚和4脚也与FPGA相连,由FPGA对输入数据进 行处理。
1所示,主要由四部分组成:RS-485数据发送模块、FPGA
FPGA串口模块是将由RS-485发送过来的数据进行处理,提取出 8位有效数据,并按异步串口通讯的
格式要求输出到 MAX3223的12脚。FPGA选用Xilinx公司的Spartan II系列xc2s50。此部分为该设计的主体。 如上所述,输入数据的传输速率为
700k波特率。为了使FPGA能够正确地对输入数据进行采样,提高分辨率能力
理论上至少是波特率时钟的
2倍。在本设计中选用4倍于 接收器能在一个位周期内采
和抗干扰能力,采样时钟必须选用比波特率更高的时钟,
波特率的时钟,利用这种4倍于波特率的接收时钟对串行数据流进行检测和定位采样,
样4次。如果没有这种倍频关系,定位采样频率和传送波特率相同,则在一个位周期中,只能采样一次,分辨率会 差。比如,为了检测起始位下降沿的岀现,在起始位的前夕采样一次之后,下次采样要到起始位结束前夕才进行。
而假若在这个周期期间,因某种原因恰恰使接收时钟往后偏移了一点点,就会错过起始位。造成整个后面位的检测 和识别错误。针对本设计,FPGA的软件共分了三个模块:
1. 时钟分频模块。模块的功能是用来产生所需要的数据采集时钟和数据传输时钟。系统主频是
数据采集时钟是2.8M的,发送时钟是11.2k。
2. 提取数据模块。由 RS485发送过来的数据共有 25位,其中只有8位是有效数据。为了发送这 8位
有效数据。必须先将其提取岀来。提取的办法是这样的:通过连续检测到的
16个高电平和一个低电平。判断 8位
40M的。
有效数据的到来。然后按照串行数据传输的格式,在加上起始位和停止位后,将其存储于输岀缓冲寄存器中。在这 里,我们的串行数据输岀格式是这样规定的,一位起始位,八位数据位,一位停止位,无校验位。
3. 串行数据输岀模块。 这一模块相对比较简单, 波特率选为11.2k,模块的功能是在移位输岀脉冲的作用
下,将输岀缓冲寄存器中的数据移位输岀。
MAX3223是实现电平转换的芯片。由于 RS-232C是用正负电压来表示逻辑状态。与 TTL以高低电平表 示逻辑
状态的规定不同。因此,为了能够同计算机接口或终端的
TTL器件连接,必须在 RS-232与TTL电路之间
进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。MAXIM公司的MAX3223 是为满足RS-232C的标准而设计的具有功耗低、波特率高、价格低等优点,外接电容仅为 RS232收发器。由MAX3223的12脚输入的数据,经过
电平转换后由8脚输出,再经过DB9的TxD端输出,由PC机接收并做后续处理。
0.1uF或1uF,为双组
3系统软件设计
FPGA模块是本设计的主体, 使用Verilog硬件描述语言进行编写, 本段代码共有两个子模块, 分别实现
提取八位数据和串行数据发送的功能。
下面是verilog源代码
module SIMO(din,clk,rst,dout_ser); input din; //串行输入数据 input clk; //时钟信号 input vat; 复位信号
reg[7:0] indata_buf;//输入缓冲寄存器,存提取的有效位 reg[9:0] dout_buf; //输出缓冲寄存器,加了起停位
output reg dout_ser; // 串行数据输出
reg nclk; //提取八位有效数据的采样时钟.是4倍于波特率的时钟 reg txclk; //发送数据时钟。发数据取 11.2k的波特率 integer bitpos=\当前位 parameter s0=0,s1=1,s2=2,s3=3; reg[2:0]state;
reg[4:0]counter; //用来计算报头报尾中 1的个数
reg tag,tag1; reg[2:0]cnt3;
reg txdone=\\b1;// 一个字节数据传输完毕标志
*********提取有效数据位并按串行通讯格式装载数据 always@ (posedge nclk or posedge rst) begin if(rst) begin state<=0; counter<=0; tag 仁0; tag=\
indata_bufv=8\dout_bufv=10\bitpos=\cnt3<=0; end
else case(state) s0:begin
********