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-07-02 16:46
楼主可以分享一下验证平台的代码吗?关注收藏了
2 回复 分享
发布于 2022-06-29 11:14
学到了,感谢分享
2 回复 分享
发布于 2022-06-25 15:24
楼主,求个代码
1 回复 分享
发布于 2023-02-19 11:19 上海
可以分享代码吗 ?😂😂
1 回复 分享
发布于 2022-07-09 23:59
这不纯IC修真院的uvm项目吗
1 回复 分享
发布于 2022-07-05 00:54
楼主可以分享代码吗 😜
点赞 回复 分享
发布于 2022-07-03 11:36
楼主可以分享代码吗
点赞 回复 分享
发布于 2022-06-29 14:43
收藏加关注,求码
点赞 回复 分享
发布于 2022-06-29 13:09

相关推荐

面试时间:2025年10月中旬面试时长:50分钟左右面试方式:腾讯会议,两位面试官,开启摄像头面试问题:1.自我介绍2.C语言内存对齐的概念,是否了解单字节对齐,应用场景是什么?3.如何定义双向链表?数据域的话,如果我要定义一个通用的数据域,你会怎么定义?如何确定数据长度?如果现在有个 A 和 B,我在 A B 之间插入一个 C,我的流程是什么?4.C 语言编译出来了过后,以及它运行,它整个的一个程序的内存分布分为哪些段?5.static 关键字的职责?C 语言有多少个关键字啊?6.如何去设计一个跨平台的 C 和 C + 模块?7.MCU 的启动流程是什么?8.用过这个 RTOS 吗?9.MCU 的最小系统是由哪些东西组成?10.时钟一般有哪些时钟源?外部晶振为什么为什么精度高?11.USB 的线序以及它的时序的协议方面的这些这些了解吗?12.TF 卡你能讲一下有多少个引脚,然后每个引脚是干嘛的?13.示波器怎么去接差分?就是接线上怎么去捕捉差分的信号?14.你有没有抓过包?分析过比如 TCP 的报文?TCP 有多少种状态,以及状态之间是怎么迁移的,这个了解吗? 15.项目的工作强度,消耗的时间?模式切换逻辑?低功耗策略?算法处理时间?项目结果?芯片选型参考?价格?16.对公司的了解17.offer情况18.反问很特别,或者说很奇葩的一次面试。说实话这个面试让我感觉回到了本科找工作的状态,基本只问八股,项目了解的都很浅显,和隔壁瑞晟二面对比起来实在是太鲜明了……很遗憾,明明最开始约的九月底,却由于面试官有事改到了十月中旬,毫不意外的导致了一个结果,没有hc啦~虽然八股都答上来了,不妨碍面完就收到挂信,不服啊~
点赞 评论 收藏
分享
评论
24
272
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务