- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
FPGA串口程序设计
RS232通信程序的设计
本章先介绍串口通信的基础知识,之后将重点介绍一个通过串口配置寄存器的一些代码。
RS232基础
RS232是一种异步串行通信接口,由于它比较简单,在工业中使用相当广泛。虽然我们常说RS232程序设计,但是RS232只是一个物理层的标准,只规定了信号物理特性,链路层的协议是UART,而我们所说的RS232接口的逻辑设计主是指这部分的内容。
UART的帧格式
图5-1给出了UART的帧格式。在线路空闲的时候,主设备将发送”1”;在通信时,主设备需要先发一个起始位”0”,以表示通信的开始;然后开始发送有效数据;之后再传送一比特的奇偶校验值;最后发送停止位”1”,以表示当前通信的完成。其中,数据可以事先约定为5位、6位、7位或者8位;奇偶校验位根据事先约定由对数据位按位进行异或或者同或而得到,它不是必须的。
PC上的RS232接口有多个引脚,如果使用Modem的话需要将所有管脚都接起来,但是如果在其它情况下,则可不需要控制信号,只需要将通信两端的收发、电源和地相连即可,如图所示。
使用Modem的RS232连接图
不使用Modem的RS232连接图
另外,在RS232中,还有一个波特率的概念。所谓波特率,在这里指单位时间内传送二进制数据的位数,以位/秒为单位,是衡量串行数据传输快慢的重要指标。如果某串口的波特率为115200,指的是该串口以115200bits/s的速率在传输数据。
设计需求
在接下来的章节介绍的是一个通过RS232接口配置寄存器的设计,它是某项目的其中一部分,这部分电路用于配置IP地址等参数。在我们这个演示程序中,为了简单起见,我们只设置了几个寄存器。
设计输入输出信号如表表示。
端口列表
信号名 方向 功能 clk I 时钟信号 rst_n I 全局复位信号 rs232_din I RS232串行输入信号 rs232_dout O RS232串行输出信号
发送帧的格式及接收帧的格式分别如图所示。
发送帧格式
接收帧格式由于传输链路不复杂,我们对检错设计做的较为简单,在UART协议中,不使用奇偶校验(如图所示),只是在每一帧结尾加上一个简单的校验和。该校验和的生成方式将同步字、帧头、操作码、数据相加,丢掉进位,只保留低8位值作为校验和并传送。
串口通信程序使用的UART帧格式系统时钟频率为40Mhz,波特率为115.2Kb/s。
模块划分
RTL级划分
结合设计需求,该设计可划分成4个一级模块:config_registers、clken_gen、frame_deal和rs232模块(如图5-7所示)
RTL级结构划分图
config_registers模块用于存放配置寄存器组。
clken_en用于产生时钟使能。由于原项目的系统时钟频率是40Mhz,为了避免使用分频时钟,我们采取了使用时钟使能的方法,在第三章我们也提过,这种做法可以使设计变得简单和可靠。
frame_deal模块用于完成数据帧的处理。它包括了tx_frame和rx_frame两个子模块,分别对应发送帧和接收帧的处理。
RS232模块用于完成与RS232接口相关的功能。它包括了txmit和rxvr子模块,分别对应于UART的发送和接收功能。行为级划分
行为级结构划分示意图
图5-给出了行为级结构的示意图。在该设计中,testcase和bm_frame_deal模块位于设计的上层,具体时序已被harness模块封装了起来,在testcase和bm_frame_deal这个层次已经没有了时序的概念。testbench中每一个上层都通过调用下层的task来完成相应的功能,这种方式有点类似于windows的API函数,通过对一些接口函数的调用屏蔽了下层的细节。
osc_rst模块用于产生系统时钟和复位信号。
bfm_uart模块位于testbench的底层,主要模拟与被测对象接口的行为,它包含了uart_tx和uart_rx两个任务,分别对应uart的发送和接收。
harness模块封装了bfm_uart、ocs_rst和被测对象,时序的概念到该层为止。
bm_frame_deal模块用于完成数据帧的发送和接收,由tx_frame和rx_frame两个任务构成。
testcase位于设计的顶层,包含了几种简单的需测试的情况。
RTL级代码
top_module
`timescale 1ns/100ps
module top_module(
//-------input port------
clk,
rst_n,
rs232_din,
您可能关注的文档
最近下载
- 《风景谈》精品课件.ppt VIP
- T11长轨列车卸轨作业指导书.pdf VIP
- 城市轨道交通交流供电系统的保护方式1城市轨道交通交流供电系.pptx VIP
- 《极简项目管理》读书笔记.pdf VIP
- 北京-绅宝D70-产品使用说明书-绅宝D70 2.3T-C7230C7G-绅宝产品使用说明书.pdf VIP
- 《地下工程防水技术规范》(GB50108-2008).pdf
- 2023 【小升初分班】小升初数学分班测试卷 (通用版,含答案).pdf VIP
- DLT 1253-2013 电力电缆线路运行规程.pdf VIP
- 商务谈判毕思勇课程教案.pdf VIP
- 信息处理技术员教程(第三版)第6章 演示文稿基础知识.pptx VIP
文档评论(0)