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)
上一篇 2025年11月14日 下午10:01
下一篇 2025年11月14日 下午10:43


相关推荐

  • 面试必备:什么是一致性Hash算法?

    面试必备:什么是一致性Hash算法?最近有小伙伴跑过来问什么是 Hash 一致性算法 说面试的时候被问到了 因为不了解 所以就没有回答上 问我有没有相应的学习资料推荐 当时上班 没时间回复 晚上回去了就忘了这件事 今天突然看到这个 加班为大家整理一下什么是 Hash 一致性算法 希望对大家有帮助 文末送书 长按抽奖助手小程序即可参与 祝君好运 经常阅读我文章的小伙伴应该都很熟悉我写文章的套路 上来就是先要问一句为什么 也就是为什么要有 Has

    2026年3月19日
    1
  • vue动态图片地址

    vue动态图片地址

    2020年11月9日
    192
  • SQL SERVER CURSOR教程

    SQL SERVER CURSOR教程

    2026年3月15日
    2
  • C++中的矩阵特征值

    C++中的矩阵特征值最近需要在 C 环境下求矩阵的特征值和特征向量 根据任务需求有两种思路可供选择 使用现成的矩阵库网上有一些开源的矩阵库可以使用 在 Windows 下可以参考张睿卿的博客 C 矩阵处理工具 Eigen 在 Linux 环境下可以参考博客 C 和 C 的矩阵库 这里有一篇博客调查了各种 C 矩阵算法包在 VisualStudio 中求解实对称矩阵特征值算法包调查 建议使用 LAPACK CLAP

    2026年3月18日
    2
  • mysql分析慢查询_开启慢查询日志

    mysql分析慢查询_开启慢查询日志一、生成实验数据原理:sql蠕虫复制(这种生成数据方式同样适用于数据表中有主键的情况)。insertintocomic(name,pen_name,cover)selectname,pen_name,coverfromcomic 二、慢查询日志设置当语句执行时间较长时,通过日志的方式进行记录,这种方式就是慢查询的日志。1、临时开启慢查询日志(如果需要长时间…

    2022年10月14日
    5
  • Linux查看文件大小的几种方法

    Linux查看文件大小的几种方法linux获取文件大小

    2022年5月9日
    45

发表回复

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

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