UVM项目之UART验证---01验证理论

验证流程

读取模块spec,理解DUT;

制定验证策略方法;

  • 提取验证点;
  • 验证架构图;
  • 搭建验证平台;
  • 执行验证;
  • 检查覆盖率;
  • 根据覆盖率回溯DUT验证点。

验证策略

黑盒验证—>灰盒验证—>白盒验证

验证方法

对大部分的输入接口采用随机测试,特定的接口采用定向测试

验证点

在这里插入图片描述

验证环境框架图

在这里插入图片描述

UART协议

UART的简介

一种通用串行数据总线,实现全双工传输和接收。将数据的二进制位一位意味进行传输

URAT传输格式:起始位+数据位+校验位+停止位

波特率:单位时间内传输的二进制位数(bps)

起始位:开始发起传输的标志,进行数据传输时发送方要先发出一个低电平0来表示传输字符的开始

停止位:结束传输的标准:1位、1.5位、2位的高电平

校验位:奇校验和偶校验

UART是一种先进的单控制器总线架构(AMBA)兼容的芯片系统(SoC)外围设备,由ARM开发、测试和许可。

UART特征:

  • 符合AMBA规范(Rev 2.0)开始,以便于集成到SoC实现中。
  • 分别有16x8传输和16x12接收先入先出的存储器缓冲区(FIFOs),以减少CPU中断。
  • 可编程FIFO可被禁用。
  • 可编程波特率发生器。这使得参考时钟划分(1x16)到(65535 x16),并生成一个内部x16时钟。除数可以是一个分数,使您能够使用任何频率为>为3.6864MHz的时钟作为参考时钟。
  • 标准的异步通信位(启动、停止和奇偶校验)。这些是在传输之前添加的,在接收时删除。
  • **传输FIFO、接收FIFO、**接收超时、调制解调器和错误条件中断模块独立。

全可编程的串行接口特性:数据可以是5、6、7或8bit,偶数、奇数、棒数或无奇偶校验位的生成和检测,1或2bit的停止位生成,波特率产生,直流率高达UARTCLK_max_freq/16

可编程部分:通信波特率、整数和小数部分,数据位,停止位,奇偶校验模型,16深度的FIFO和1深度的禁用FIFO,FIFO触发器级别可在1/8、1/4、1/2、3/4和7/8之间进行选择,内部标定1.8432MHz时钟频率(1.42–2.12MHz),以产生低功率模式,产生更短的位持续时间,硬件流量控制。

UART对从外围设备接收到的数据进行串行到并行转换对传输到外围设备的数据进行并行到串行转换。CPU通过APB接口读写数据和控制/状态信息。传输和接收路径被内部的FIFO存储器缓冲,使最多16个字节可以独立地存储在传输和接收模式中。

包括一个可编程的波特率发生器,产生一个公共传输和接收内部时钟从UART内部参考时钟输入(UARTCLK),

支持高达460.8Kbits/s的波特率,

UART操作和波特率值由线控制寄存器(UARTLCR_H)和波特率除数寄存器(UARTIBRD和UARTFBRD)控制。

UART的协议框图

在这里插入图片描述

UART的主要功能:

**APB接口:**APB接口生成用于访问状态/控制寄存器和传输/接收FIFO存储器的读取和写解码。

**寄存器块:**寄存器模块存储已写入的数据,或要通过APB接口读取的数据。

**波特率发生器:**波特率发生器包含自由运行的计数器,生成x16时钟内部计数器,Band16.Band16为UART发射和接收控制提供定时信息。Band16是一种脉冲流,其宽度为一个钟时钟周期,频率为波特率的16倍。

**传输FIFO:**传输FIFO是一个8位宽,16深度的FIFO存储缓冲器。通过APB接口写入的CPU数据将存储在FIFO中,直到被传输逻辑读出为止。可以使传输FIFO成为一个单字节保持寄存器。

**接收FIFO:**接收FIFO是一个12位宽,16深度的FIFO内存缓冲区。接收到的数据和相应的校验位,通过接收逻辑存储在接收FIFO中,直到由CPU通过APB接口读出为止。接收FIFO可以被禁用为像一个字节保持寄存器。

传输逻辑:传输逻辑对从传输FIFO读取的数据执行并行到串行转换。控制逻辑输出从开始位开始的串行位流,首先输出的数据位,然后是奇偶校验位,最后根据控制寄存器中的编程配置输出停止位。

接收逻辑:在检测到有效的启动脉冲之后,接收逻辑对接收的比特流执行串行到并行的转换。还执行溢出、奇偶校验、帧错误检查和断线检测,它们的状态伴随着写入接收FIFO的数据。

**同步寄存器和逻辑:**UART支持时钟、PCLK和自动时钟的异步和同步操作。同步寄存器和握手逻辑已经实现,并且一直处于活动状态。这对性能或区域的影响很小。控制信号的同步将在数据流的两个方向上执行,即从PCLK到PCLK域,以及从PCLK域到PCLK域。

UART的操作

接口复位

UART通过全局复位信号PRESETn和块特定复位信号nUARTRST重置,外部复位控制器必须使用PRESETn异步断言nUARTRST,并将其同步否定为UARTCLK.

时钟信号

为UARTCLK选择的频率必须适应期望的波特率范围:
F U A R T C L K ( m i n ) > = 16 ∗ b a u d _ r a t e ( m a x ) F_{UARTCLK}(min)>=16 * baud\_rate(max) FUARTCLK(min)>=16baud_rate(max)

F U A R T C L K ( m a x ) < = 16 ∗ 65535 ∗ b a u d _ r a t e ( m i n ) F_{UARTCLK}(max)<=16 * 65535 * baud\_rate(min) FUARTCLK(max)<=1665535baud_rate(min)

例如,对于从110波特到460800波特的波特率范围,UARTCLK频率必须在7.3728MHz(16*460800*10^-6)到115MHz范围内。UARTCLK频率也必须在所有波特率所需的误差范围内。PCLK的时钟频率比率也有一个限制。UARTCLK频率不超过PCLK频率的5/3倍:
F U A R T C L K < = 5 / 3 ∗ F P C L K F_{UARTCLK} <= 5/3 * F_{PCLK} FUARTCLK<=5/3FPCLK
这允许有足够的时间将接收到的数据写入接收到的FIFO。

UART操作:控制数据被写入UART线路控制寄存器(UARTLCR_H)。这个寄存器内部有29位宽,但是通过APB总线从外部访问,以三次写入注册位置。UARTLCR_H,UARTIBRD 和 UARTFBRD。UARTLCR_H的定义为:传输参数,字长,缓冲模式,传输停止位数,奇偶校验模式,中断产生。UARTIBRD 和 UARTFBRD 一起定义波特率除数。

波特率分频器

波特率除数是一个由一个16bit整数和6bit小数组成的22bit数。波特率发生器使用它来确定比特周期。小数波特率分频器允许使用任何频率为3.6864MHz的时钟作为UARTCLK,同时仍然可以产生所有标准波特率。

16位整数通过UARTIBRD寄存器加载。6位小数部分被加载到UARTFBRD寄存器中。波特率分配器与单位有以下关系:
B a u d R a t e D i v i s o r = U A R T C L K / ( 16 ∗ B a u d R a t e ) = B R D I + B R D F Baud Rate Divisor = UARTCLK/(16*Baud Rate) = BRD_I + BRD_F BaudRateDivisor=UARTCLK/(16BaudRate)=BRDI+BRDF
其中,BRDI是整数部分,BRDF是用小数点分隔的分数部分,
在这里插入图片描述
通过将所需的波特率除数的分数部分乘以64(即2^n,其中n是UARTFBRD寄存器的宽度)计算6位小数(m),并添加0.5来考虑误差:
m = i n t e g e r ( B R D F ∗ 2 n + 0.5 ) m = integer(BRDF * 2^n + 0.5) m=integer(BRDF2n+0.5)

数据传输或接收

接收或传输的数据存储在两个16字节的FIFO中,尽管接收FIFO每个字符有额外的4位用于状态信息。

对于传输,数据被写入到传输的FIFO中。如果启用了UART,它将导致数据帧开始使用UARTLCR_H中指示的参数进行传输。数据继续被传输,直到在传输的FIFO中没有数据留下为止。一旦数据写入传输FIFO(即FIFO非空),BUSY信号就会变高,并且在数据传输时保持保持高。只有当传输的FIFO为空,并且最后一个字符已经从移位寄存器传输,包括停止位时,BUSY才会被否定。即使UART可能不再被启用,也可以断言BUSY很高。

溢出位

溢出位与接收FIFO中的字符没有关联。当FIFO满时,移位寄存器中完全接收。移位寄存器中的数据被覆盖,但它没有被写入到FIFO中。当接收FIFO中的空位置可用,并且接收到另一个字符时,溢出位的状态与接收到的字符一起复制到接收FIFO中。然后将清除溢出状态。
在这里插入图片描述

禁用FIFO

在这种情况下,UART的发射侧和接收侧具有1字节的保持寄存器(FIFOs的底部条目)。当接收到一个字,而前一个字尚未读取时,将设置溢出位。在这个实现中,fifo没有被物理上禁用,而是这些标志被操纵,给人一种1字节寄存器的错觉。当FIFOs被禁用时,对数据寄存器的写入将绕过保持寄存器,除非传输移位寄存器已经在使用中。

数据寄存器,UARTDR

对于发送的数据

如果启用了FIFO,则写入此位置的数据将被推送到传输FIFO上

如果FIFO没有启用FIFO,数据存储在传输保持寄存器(传输FIFO的底部)。

写操作从UART启动传输。数据的前缀有一个起始位,附加有适当的奇偶校验位(如果启用奇偶校验)和一个停止位。结果然后被传递出来。

对于收到的数据

如果启用了FIFO,则数据字节和4位状态(中断、帧、奇偶校验和溢出)将被推到12位宽接收FIFO上

如果未启用FIFO,则数据字节和状态将存储在接收保持寄存器(接收FIFO的底部字)中。

通过从UARTDR寄存器进行相应的读取来读取接收到的数据字节。状态信息也可以通过读取UARTRSR/UARTECR寄存器来读取

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UVM是一种利用SystemVerilog语言开发的硬件验证平台,旨在提高硬件验证的效率和可重用性。APB和SPI作为两种常见的通信协议,在芯片设计中也得到了广泛的应用。基于UVM的APB-SPI验证,可以有效地验证芯片中的通信功能,确保数据传输的正确性和稳定性。 在UVM APB-SPI验证流程中,通过建立测试环境、生成测试用例、执行测试和分析结果等步骤,逐步实现对APB和SPI通信协议的验证。其中,测试环境是搭建UVM框架的基础,通常由DUT(设计单元)、测试控制器、测试代理以及信号记录器等组件构成。测试用例的生成是测试环节的核心,通过模拟不同的使用场景、数据和模式,覆盖不同的协议功能,完整地检查APB和SPI的特性和功能,并对其进行评估和优化。测试执行阶段主要是对测试用例进行仿真验证,并记录其输出结果,包括通信数据、时序波形和错误信息等。最后,在测试结果分析阶段,通过对输出结果的统计分析和比较,识别和解决发现的问题,不断优化和改进芯片的设计和开发,提高生产效率和质量。 总之,基于UVM的APB-SPI验证是一种高效可靠的硬件验证方法,能够在芯片设计和开发阶段准确评估通信协议的性能和功能,发现和解决可能存在的问题,保证芯片设计的质量和可靠性,提高整个芯片研发流程的效率和成功率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值