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端的数据进行比较