ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:30KB ,
资源ID:3548006      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3548006.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(串口通讯设计之Verilog实现.doc)为本站会员(sk****8)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

串口通讯设计之Verilog实现.doc

1、串口通讯设计之 Verilog 实现FPGA 串口模块是将由 RS-485 发送过来的数据进行处理,提取出 8 位有效数据,并按异步串口通讯的格式要求输出到 MAX3223 的 12 脚。FPGA 选用 Xilinx 公司的 Spartan II 系列 xc2s50。此部分为该设计的主体。如上所述,输入数据的传输速率为 700k 波特率。为了使 FPGA 能够正确地对输入数据进行采样,提高分辨率能力和抗干扰能力,采样时钟必须选用比波特率更高的时钟,理论上至少是波特率时钟的 2 倍。1 串口通信基本特点 随着多微机系统的应用和微机网络的发展,通信功能越来越显得重要。串行通信是在一根传输线上一位一

2、位地传送信息.这根线既作数据线又作联络线。串行通信作为一种主要的通信方式,由于所用的传输线少,并且可以借助现存的电话网进行信息传送,因此特别适合于远距离传送。在串行传输中,通信双方都按通信协议进行,所谓通信协议是指通信双方的一种约定。约定对数据格式、同步方式、传送速度、传送步骤、纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。异步起止式的祯信息格式为:每祯信息由四部分组成:a.1 位起始位。b.58 位数据位。传送顺序是低位在前,高位在后.依次传送。c.一位校验位,也可以没有。d.最后是 1 位或是 2 位停止位。FPGA(Field Pmgrammable Gate Arr

3、ay)现场可编程门阵列在数字电路的设计中已经被广泛使用。这种设计方式可以将以前需要多块集成芯片的电路设计到一块大模块可编程逻辑器件中,大大减少了电路板的尺寸,增强了系统的可靠性和设计的灵活性。本文详细介绍了已在实际项目中应用的基于 FPGA 的串口通讯设计。本设计分为硬件电路设计和软件设计两部分,最后用仿真验证了程序设计的正确性。2 系统的硬件设计本方案的异步串行通信的硬件接口电路图如图 1 所示,主要由四部分组成:RS-485 数据发送模块、FPGA 串口模块、MAX3223 和 DB9。各部分功能简述如下:RS-485 数据发送模块是将前续电路的数据发送到 FPGA,供本电路处理,亦即本电

4、路的输入。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 对输入数据进行处理。FPGA 串口模块是将由 RS-485 发送过来的数据

5、进行处理,提取出 8 位有效数据,并按异步串口通讯的格式要求输出到 MAX3223 的 12 脚。FPGA 选用 Xilinx 公司的 Spartan II 系列 xc2s50。此部分为该设计的主体。如上所述,输入数据的传输速率为 700k 波特率。为了使 FPGA 能够正确地对输入数据进行采样,提高分辨率能力和抗干扰能力,采样时钟必须选用比波特率更高的时钟,理论上至少是波特率时钟的2 倍。在本设计中选用 4 倍于波特率的时钟,利用这种 4 倍于波特率的接收时钟对串行数据流进行检测和定位采样,接收器能在一个位周期内采样 4 次。如果没有这种倍频关系,定位采样频率和传送波特率相同,则在一个位周期

6、中,只能采样一次,分辨率会差。比如,为了检测起始位下降沿的出现,在起始位的前夕采样一次之后,下次采样要到起始位结束前夕才进行。而假若在这个周期期间,因某种原因恰恰使接收时钟往后偏移了一点点,就会错过起始位。造成整个后面位的检测和识别错误。针对本设计,FPGA 的软件共分了三个模块:1.时钟分频模块。模块的功能是用来产生所需要的数据采集时钟和数据传输时钟。系统主频是40M 的。数据采集时钟是 2.8M 的,发送时钟是 11.2k。2. 提取数据模块。由 RS485 发送过来的数据共有 25 位,其中只有 8 位是有效数据。为了发送这 8 位有效数据。必须先将其提取出来。提取的办法是这样的:通过连

7、续检测到的 16 个高电平和一个低电平。判断 8 位有效数据的到来。然后按照串行数据传输的格式,在加上起始位和停止位后,将其存储于输出缓冲寄存器中。在这里,我们的串行数据输出格式是这样规定的,一位起始位,八位数据位,一位停止位,无校验位。3.串行数据输出模块。这一模块相对比较简单,波特率选为 11.2k,模块的功能是在移位输出脉冲的作用下,将输出缓冲寄存器中的数据移位输出。MAX3223 是实现电平转换的芯片。由于 RS-232c 是用正负电压来表示逻辑状态。与 TTL 以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的 TTL 器件连接,必须在 RS-232与 TTL 电路

8、之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。MAXIM 公司的 MAX3223 是为满足 RS-232c 的标准而设计的具有功耗低、波特率高、价格低等优点,外接电容仅为 0.1uF 或 1uF,为双组 RS232 收发器。由 MAX3223 的 12 脚输入的数据,经过电平转换后由 8 脚输出,再经过 DB9 的 TxD 端输出,由 PC 机接收并做后续处理。 3 系统软件设计FPGA 模块是本设计的主体,使用 Verilog 硬件描述语言进行编写,本段代码共有两个子模块,分别实现提取八位数据和串行数据发送的功能。下面是 verilog 源代码module

9、 SIMO(din,clk,rst,dout_ser);input din; /串行输入数据input clk; /时钟信号input vat; 复位信号reg7:0 indata_buf; /输入缓冲寄存器,存提取的有效位reg9:0 dout_buf; /输出缓冲寄存器 ,加了起停位output reg dout_ser; /串行数据输出reg nclk; /提取八位有效数据的采样时钟.是 4 倍于波特率的时钟reg txclk; /发送数据时钟。发数据取 11.2k 的波特率integer bitpos=“7“; /当前位parameter s0=0,s1=1,s2=2,s3=3;reg

10、2:0state;reg4:0counter; /用来计算报头报尾中 1 的个数reg tag,tag1;reg2:0cnt3;reg txdone=“1“b1;/一个字节数据传输完毕标志*提取有效数据位并按串行通讯格式装载数据*always (posedge nclk or posedge rst) beginif(rst)beginstate=0;counter=0;tag1=0;tag=“0“;indata_buf=8bz;dout_buf=10bz;bitpos=“7“;cnt3=0;endelse case(state)s0:begintag=“0“;/表示数据没有装好if(din)

11、begincounter=counter+1;state=s0;if(counter=15)/如果检测到 16 个 1 则转入 s1 状态检测接下来的是不是 0beginstate=s1;counter=0;endendelse begincounter=0;state=s0;endends1:if(!din)/如果是 0 的话,转入 s2 状态,提取八位有效数据state=s2;else /否则转到 s0 状态重新检测state=s0;s2:if(cnt3=3)/是否采集四次数据begincnt2=0;indata_bufbitpos=din; /先进来的是高位数据bitpos=“bitpo

12、s-1“;if(bitpos=-1)beginbitpos=7;state=s3;endendelse cnt3=cnt3+1;s3:begintag1=tag;tag=1b1; /标志输入寄存器满。表明已把有用数据装入寄存器if(tag/停止位,高位,低位,起始位state=s0;endendcaseend/*发送数据模块reg3:0 state_tx=0;always(posedge txclk or posedge rst)beginif(rst)begindout_ser=1bz;state_tx=0;txdone=1;endelse case(state_tx)0:begindout

13、_ser=dout_buf0;state_tx=state_tx+1;txdone=1b0;end1:begindout_ser=dout_buf1;state_tx=state_tx+1;end2:begindout_ser=dout_buf2;state_tx=state_tx+1;end3:begindout_ser=dout_buf3;state_tx=state_tx+1;end4:begindout_ser=dout_buf4;state_tx=state_tx+1;end5:begindout_ser=dout_buf5;state_tx=state_tx+1;end6:begi

14、ndout_ser=dout_buf6;state_tx=state_tx+1;end7:begindout_ser=dout_buf7;state_tx=state_tx+1;end8:begindout_ser=dout_buf8;state_tx=state_tx+1;end9:begindout_ser=dout_buf9;state_tx=state_tx+1;endendcaseendendmodule注:两个频率信号 nclk、txclk 由相应的分频程序产生。由于篇幅所限未在文中列出。FPGA 模块接收从 RS-485 发送过来的串行数据。 25 位为一个字符。数据的传输速率是700kbps,用四倍于波特率的速率进行采样,这样可以大大降低系统的噪声。数据的串行输出波特率选为11200bps。由输入输出波形图可以看出:本段程序实现了对输入数据的有效数据位的提取,并按照一定的波特率进行串行输出。程序中,波特率可以根据需要通过分频程序进行改动。硬件电路搭建简单,程序代码书写容易。数据传输稳定可靠,可以满足串口通信的要求。

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。