Verilog RS232串口模块实验报告.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 设计概述 实验功能:实现RS232 的双工通信。 实验环境:1)硬件环境:PC机一台、ml507PFGA开发套件;2)软件环境: 开发软件 ISE14.5、代码编写软件 Notepad++、仿真软件 Modelsim、调试软件 chipscope、串口调试工具。 2 设计原理 2.1 串行接口RS232工作原理 串口用来连接FPGA和PC机,RS-232允许全双工通信,即计算机在接收数 据的同时可以发送数据。串口按位(bit)发送和接收字节。通常以8位数据为1 组,先发送最低有效位,最后发送最高有效位。尽管比按字节(byte)的并行通 信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信 是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用 于握手,但不是必须的。数据的传输没有时钟信号,接收端必须采取某种方式, 使之与接收数据同步。 1)串行线缆的两端先约定好串行传输的参数(传输速度、传输格式等); 2)当没有数据传输的时候,发送端向数据线上发送"1"; 3)每传输一个字节之前,发送端先发送一个"0"来表示传输已经开始,这样 接收端便可以知道有数据到来了; 图1 数据帧结构 4)开始传输后,数据以约定的速度和格式传输,所以接收端可以与之同步; 5)在串口总线上„高电平‟是默认的状态,当一帧数据开始传输必须先拉低 电平,这就是起始位,起始位之后是8位数据位,最后是校验位和停止位(可不 加校验位)。传输完成一个字节之后,都在其后发送一个停止位("1")。(图1) 2.2 波特率发生器 波特率是串口传输的传输速度;在微观上就是一个位的周期。常用的波特率 有9600bps和 115200bps。“9600bps”表示每秒可以传输9600位。本次实验我所 选用的传输速率为9600bps。由于我们的FPGA通常运行在远高于9600Hz 的频 率上(100MHz),因此需要分频产生接近9600Hz 的时钟信号。若FPGA 时钟 为100MHz,则需要100M/9600=10416 个时钟周期置位一次就可以得到9600Hz 的时钟。 3 模块组成 3.1 接收模块 接收模块示意图(图2 ) 图2 接收模块示意图 串口接收包括三个模块:电平检测模块,用来检测数据开始,当检测到输入 信号RX_Pin_In 有下降沿时,可以判断信号到来,H2L_Sig 信号输出为高电平通 知接收控制模块准备接收数据;波特率定时模块,用来产生波特率(9600bps ); 接收控制模块,用来控制接收开始和结束。RX_En_Sig 为高电平时,若电平检测 模块检测到有数据输入,则发出 H2L_Sig 高电平信号,接收控制模块输出 Count_Sig 信号,波特率定时模块开始计数。 为了确保采集到的数据的准确性,数据采集都是在每位数据的中间进行着 (图3 )。为使采集信号出现在数据位中间,决定每次计数到5208 产生一个采 集信号BPS_CLK ,持续一个时钟周期,计数到10416 时计数器清零并重新计数, 这样采集信号周期不变,准确度提高。 图3 数据定时采集示意图 接收控制模块将8 位数据位并行输出,输出RX_Done_Sig 信号表示一帧数 据结束,发送模块可以接收来自RX_Data 的数据。 3.1.1 detect_module.v detect_module.v 这个功能模块是为了检查电平由高变低。当检测到电平又高 变低,在第40 行就会输出高脉冲。 3.1.2 rx_bps_module.v 波特率定时模块,用来产生波特率,其原理同计数器。当rx_control_module.v 拉高Count_Sig, bps_module.v 经BPS_CLK 对 rx_control_module.v 产生定时。 3.1.3 rx_control_module.v rx_control_module.v是核心控制模块,用来控制接收开始和结束。对串口的 配置主要是1帧11位的数据,重视八位数据位,无视起始位,校验位和结

文档评论(0)

139****1921 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档