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接口。

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 文件夾加鎖

    文件夾加鎖此加密方法會使这个特殊的文件夹用正常情况不可打開也不可删除,可以起到保护重要资料的作用。  在Windows中“\”符号是路径的分隔符,比如“C:\Windows\System.exe”的意思是C分区的Windows文件夹中的System.exe文件。如果文件名中有“\”符号会怎么样呢?假如“sexinsex\”是一个文件夹的名字,这个文件夹位于“F:\”,它的路径就是“F:\sexinsex\…

  • ci 框架中defined(‘BASEPATH’) OR exit(‘No direct script access allowed’);

    ci 框架中defined(‘BASEPATH’) OR exit(‘No direct script access allowed’);

  • Ant Design setFieldsValue 无效问题

    Ant Design setFieldsValue 无效问题

  • php interface exists,php interface_exists、class_exists、method_exists和propert

    php interface exists,php interface_exists、class_exists、method_exists和propert下面我们一起来看在php中PHP类和对象函数这phpinterface_exists、class_exists、method_exists和property_exists详解,希望文章对各位同学会有所帮助。1.interface_exists、class_exists、method_exists和property_exists:顾名思义,从以上几个函数的命名便可以猜出几分他们的功能。我想这…

  • js取数组截取

    js取数组截取splice()会删除选定的数组,slice()只会进行选定,pop选定最后一个元素删除并返回最后一个元素的值,length函数判断数组的长度,使用slice选取单个值的时候记得返回的是一个数组类型。constarr=[1,2,7,2,6,0,3,1,5,7,8,9,45,12,34,0,56,12,2]//slice()方法constsliceArr…

  • 预制发票,相关屏幕增强及bapi 增强

    预制发票,相关屏幕增强及bapi 增强MIRO:需要对屏幕增强,实现可以输入xref1,xref2.如下图:图中,参考代码1和参考代码2都是通过隐式增强放出来的,具体操作过程请查看链接:https://blogs.sap.com/2020/11/04/xref1-xref2-xref3-in-miro-the-ultimate-solution/在下列程序中,写隐式增强相关表增强:之所以在这么多表中增强,是为了后面过账的时候,能把参考码传递给财务凭证2.上面…

发表回复

您的电子邮箱地址不会被公开。

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