uart verilog代码_接口实现类

uart verilog代码_接口实现类废话不多说,先上源代码链接和testbench的链接,推荐使用UE查看源代码,UE中的VHDL语法、Verilog语法和SystemVerilog语法高亮文件的下载链接在这里。上篇的最后给出了本篇所附代码的uart通信模型的工作过程。本篇的主要内容在源代码里,因此文章内容略显简单。一、寄存器描述本篇所写的uart接口的内部寄存器的定义如下表:表1内部寄存器定义 寄存器名 地址 属性 说明 复位寄存器 0x00 w/r 低3位才有意义,第0位用于对发送电

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

废话不多说,先上源代码链接testbench的链接,推荐使用UE查看源代码,UE中的VHDL语法、Verilog语法和SystemVerilog语法高亮文件的下载链接在这里。上篇的最后给出了本篇所附代码的uart通信模型的工作过程。本篇的主要内容在源代码里,因此文章内容略显简单。

一、寄存器描述

本篇所写的uart接口的内部寄存器的定义如下表:

表1 内部寄存器定义
寄存器名 地址 属性 说明
复位寄存器 0x00 w/r 低3位才有意义,第0位用于对发送电路进行复位,第1位用于对接收电路进行复位,第2位用于对控制电路进行复位,都是高电平有效。复位时先写入1,再写入0。
分频控制寄存器 0x01 w/r 用于对内部分频计数器进行读写操作,以使uart满足不同的波特率。
发送寄存器 0x02 w 用于将需要发送的数据锁存到这个寄存器中。
命令寄存器 0x03 w 低1位有意义,写这个寄存器会产生一个时钟宽度的控制信号,这个控制信号用于通知发送电路可以发送数据了。
接收寄存器 0x04 r 只读,用于存储当前接收到的完整数据。
接收状态寄存器 0x05 rc 读清0,低2位有意义,第0位表示接收到的数据奇偶校验是否有错,为0表示没有错,第1位表示接收中断,为1表示CPU可以读取接收寄存器了。
发送状态寄存器 0x06 rc 读清0,低1位有意义,第0位表示发送中断,为1表示当前发送寄存器中的数据已经发送完成。

二、源代码组成分析

链接中给出的源代码由4个.v文件组成,其中uart_xmt.v是发送控制器,uart_rcv.v是接收控制器,uart_ctl.v是控制电路。uart_xmt.v和uart_rcv.v中各有一个状态机,uart_ctl.v中有两个状态机,这里不给出过多的解释,代码中我都给出了详细注释。核心设计思想就是设置一个采样脉冲,这个采样脉冲的频率是和波特率相关的(在本设计中就等于波特率),由此来控制发送数据和接收数据,奇偶校验使用的策略是按位异或。

三、对于本篇testbench的说明

所附testbench中的时钟为25MHZ,时钟计数器为16,这样子传输波特率很高,这是为了仿真方便。实际情况下波特率可能没有这么高,对于115200波特率的串口,在25MHZ时钟下,只需要设置时钟计数器的值为25000000/115200=217,就可以了,这里不需要特别精确,这就是异步串口通信的好处。当然,如果需要比较低的波特率,8位时钟计数器分频已经不够了,则需要将25MHZ时钟再次分频后输入uart串口中。

本篇的testbench较之于我以前文章中描述的简单的testbench在复杂程度上有所上升,主要体现在随机化激励和自动比对上。

所附testbench的代码中将UART的输入和输出相连形成回环测试,先用CPU控制UART输出一个随机数据,然后回环到UART的输入,再用CPU读出来,将输出数据和读出的数据进行自动比对。代码中的CPU的读写操作和自动比对操作都必须定义成任务,不能定义成函数,因为任务是要花费仿真时间的。

这样子的testbench在实际工程中很常用,因为无论什么通信接口,回环测试是很有必要的,在回环测试时,如果对着仿真波形一个一个比对接收和发送数据,很浪费时间,必须要学会编写自动比对任务,此外,testbench中用到的随机激励也是测试bug的好方法。

下一篇文章中我将介绍Xilinx自带的uart接口的IP,这是一个用户端满足AXI总线协议的UART接口。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193977.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm中debug无法调试_pycharm配置debug

    pycharm中debug无法调试_pycharm配置debug在多次跑项目中遇到情况,pacharm突然就无法运行项目了,表现就是run和debug两个选项按钮全部变灰色无法点击。造成这种情况的原因是因为我在一个很大的文件下创建了新的文件,每次运行都要为所有文件建造索引,文件很大的话这个时间就比较长,表现就是右下角有个进度条一直在刷新。这个时候的做法就是:右键文件名——> Markdirectoryas… ——>Exclude…

    2022年8月29日
    7
  • PyCharm激活码永久有效PyCharm2022.1激活码教程-持续更新,一步到位[通俗易懂]

    PyCharm激活码永久有效PyCharm2022.1激活码教程-持续更新,一步到位[通俗易懂]PyCharm激活码永久有效2022.1激活码教程-Windows版永久激活-持续更新,Idea激活码2022.1成功激活

    2022年6月19日
    131
  • 计算机应用模块数量如何填写,职称计算机考试科目、模块数量介绍

    计算机应用模块数量如何填写,职称计算机考试科目、模块数量介绍原标题:职称计算机考试科目、模块数量介绍全国计算机应用能力考试坚持”实事求是,区别对待,逐步提高”的原则,不同地区、不同部门根据本地区、本部门的实际情况,确定适合本地区、本部门的考试范围要求。1、不同地区和部门自主确定应考科目数量在对专业技术人员计算机应用能力的具体要求上,各省、自治区、直辖市人事厅(局)和国务院有关部门干部(人事)部门应结合本地区、本部门的实际情况,确定本地区、本部门在评聘专业技…

    2022年5月5日
    111
  • Django(22)Django执行SQL语句「建议收藏」

    Django(22)Django执行SQL语句「建议收藏」前言Django在查询数据时,大多数查询都能使用ORM提供的API方法,但对于一些复杂的查询可能难以使用ORM的API方法实现,因此Django引入了SQL语句的执行方法,有以下三种执行方式ext

    2022年7月29日
    5
  • tomcat日志乱码问题、页面乱码问题等

    tomcat日志乱码问题、页面乱码问题等一、默认解决方法无论Google还是百度,多数解决方法是server.xml设置URIEncoding=“UTF-8”。<Connectorport=”8080″protocol=”HTTP/1.1″connectionTimeout=”20000″redirectPort=”8443″URIEncoding=”UTF-8″/>二、接口乱码在catalina.bat头部增加-Dfile.encoding=UTF-8/bin/catalina.bat

    2022年9月26日
    1
  • 谈谈数据库连接池的原理及应用_常用的数据库连接池

    谈谈数据库连接池的原理及应用_常用的数据库连接池这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包。

    2022年9月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号