FPGA串口程序设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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,

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档