IC验证之UART模块项目总结(建议收藏)

这是我入职前学习阶段做的一个模块项目(当时也是零基础学习,本身比较菜,大佬轻喷),发出来希望可以给准备入行的人做一个参考

UART验证流程

1、理解DUT(uart协议、uart的spec)

2、确定验证策略、制定验证计划和方法

3、提取验证点

4、绘制验证框图

5、搭建验证环境

6、执行验证,写测试用例,持续regression

7、收集检查覆盖率,并完善testplan和增加testcase

理解DUT(理解UART协议)

UART:通用异步收发器。它是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。

UART工作原理:是将数据的二进制位一位一位的进行传输。


UART1发送从数据总线(data bus)获取并行数据后,添加起始位、奇偶校验位和停止位,以创建数据包。接着,数据包在Tx引脚上逐位串行输出。

UART2接收从其Rx引脚上逐位读取数据包。然后,将串行数据转换成并行数据,并删除起始位、奇偶校验位和停止位。最后,将并行数据包传输到接收端的数据总线。

理解DUT(UART SPEC)


理解DUT(UART SPEC)- 设计概述

发送逻辑:UART发送FIFO是一个8位宽,16位深度的内存缓冲区。CPU通过APB总线接口写入的数据存储在FIFO中,UART发送逻辑读取发送FIFO中的数据,执行并行到串行转换,控制逻辑输出串行数据流,该串行数据流格式为:起始位、数据位(以LSB开始传输)、奇偶校验位、停止位。发送FIFO可以被禁用,仅当作一个单字节的保持寄存器。

接收逻辑:UART接收FIFO是一个12位宽,16位深度的内存缓冲区。当UART控制逻辑检测到有效启动脉冲后,接收逻辑将RX端口的串行比特流转换成并行数据,也执行奇偶校验位和帧错误检查,并将数据和它们的状态一起写入到接收FIFO中,直到被CPU通过APB接口读出。接收FIFO也可以被禁用,仅当作一个单字节保持寄存器。

理解DUT(理解UART协议)

UART传输格式:(UART协议规定空闲时,信号线保持高电平)

起始位+数据位+校验位+停止位

理解相关概念

1. 波特率(baud rate):数据传输速率,单位bps,实验中使用波特率为9600bps。

2. 起始位(start bit):开始发起传输的标志。用低电平’0’来表示。

3. 停止位(stop bit):结束传输的标志。在该UART协议中为2位的高电平。

4. 校验位(check bit):为了保证传输可靠性增加的校验位。

确定验证策略、方法、编写验证计划

黑盒测试+模块测试

随机测试+定向测试

编写验证计划:

(1)提取验证功能点

(2)明确DUT接口信号(所有信号的名字,位宽,功能,时序关系等)

(3)TB的架构(能够描述每一个组件的功能)

(4)检查点(check point)

(5)功能覆盖率(覆盖点)

(6)测试用例的规划(testcase尽可能的规划完整)

(7)结束标准

提取验证点 - 1



验证环境框图


绘制验证框图

1、最顶层是top,top里面包含了整个验证环境和DUT,并通过interface建立它们之间的连接,top里面完成时

钟和复位,在top内还发送interface给env的相关组件,include所有需要包含进来的文件和宏,import库文件。


2、TESTBENCH是整个验证平台,验证平台的TEST包含了所有的testcase


3、TEST包含了整个uart_test_env,uart_test_env包含了apb_uvc和uart_uvc,还包含了scoreboard,

scoreboard与apb_uvc连接的同时也与uart_uvc连接,在scoreboard内对Tx端和Rx端进行比较


4、apb_uvc内完成对DUT寄存器的配置,进行读和写,写的时候从sequence发给apb_sqr,再发送给apb_drv,

再由apb_drv发给DUT,读的时候通过response机制从DUT内读取数据反向传给sequence,所以apb_uvc仅需

一个mst_agt即可。


5、uart_uvc内有Tx端和Rx端,所以需要两个agent,即Tx_agt和Rx_agt,DUT的Rx和uart_uvc的Tx端连,DUT

的Tx和uart_uvc的Rx端连。uart_uvc内的两路monitor分别对DUT的收、发数据进行采样,通过连接scoreboard

,与apb_uvc的monitor采样的读、写数据分别进行比较。

6、在TEST内写总的config,uart_uvc和apb_uvc内部分别写对应的config,通过TEST内总的config配置文件对

uart_uvc和apb_uvc进行配置。

7、在uvc内没有进行coverage,所以在test内进行coverage的收集。

测试激励/波形——波特率配置是否正常

从波形图上看到dut收发数据是104200ns每比特(1/9600*10^9 ns)

测试激励/波形——uart(dut)发送数据功能

apb_uvc通过寄存器写6个数据’h36、’h12、’h2d、’h5b、’h5a、’h5b到dut,dut的TX发送给uart的RX端

测试激励/波形——uart(dut)发送数据功能

apb_uvc通过寄存器写6个数据’h36、’h12、’h2d、’h5b、’h5a、’h5b到dut,dut的TX发送给uart的RX端

测试激励/波形——uart(dut)发送数据功能

scordboard从apb_uvc拿到写的6个数据与到dut的TX端发送给uart的RX端的数据进行比较

测试激励/波形——uart(dut)接收数据功能

uart_uvc发10个数据1、2、3、4、5、6、7、8、9、a到dut,dut的RX接收数据,apb_uvc读取数据

测试激励/波形——uart(dut)接收数据功能

uart_uvc发10个数据1、2、3、4、5、6、7、8、9、a到dut,dut的RX接收数据,apb_uvc读取数据


测试激励/波形——uart(dut)接收数据功能

scordboard从apb_uvc拿到读的10个数据与uart的TX端发送给dut的RX端的数据进行比较

测试激励/波形——uart(dut)接收数据功能

scordboard从apb_uvc拿到读的10个数据与uart的TX端发送给dut的RX端的数据进行比较


覆盖率分析

覆盖率分析


#芯片IC验证工程师##IC验证##数字芯片设计#
全部评论
想问一下lz 可以分享一下代码吗
4 回复 分享
发布于 2022-06-29 00:54
学到了,感谢分享
2 回复 分享
发布于 2022-06-25 15:24
楼主可以分享一下验证平台的代码吗?关注收藏了
2 回复 分享
发布于 2022-06-29 11:14
楼主能否加个还有分享一下代码
2 回复 分享
发布于 2022-07-02 16:46
这不纯IC修真院的uvm项目吗
1 回复 分享
发布于 2022-07-05 00:54
可以分享代码吗 ?😂😂
1 回复 分享
发布于 2022-07-09 23:59
楼主,求个代码
1 回复 分享
发布于 2023-02-19 11:19 上海
收藏加关注,求码
点赞 回复 分享
发布于 2022-06-29 13:09
楼主可以分享代码吗
点赞 回复 分享
发布于 2022-06-29 14:43
楼主可以分享代码吗 😜
点赞 回复 分享
发布于 2022-07-03 11:36

相关推荐

微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
24 268 评论
分享
牛客网
牛客企业服务