UART模块验证-面试总结

2023-05-16

前言

本篇博客依旧针对UART模块的验证项目进行面试总结,也是笔者面试过众多公司所总结整理的

关于UART深挖的可问的知识点还是非常多,本篇博文可以说基本上涵盖大部分可问到的点

关于下列有一些问题我并没有列出答案,是因为这些问题的答案基本上都比较简单或者可以搜到,

读者可自行总结整理下

具体内容如下:

简历描述

  关于UART项目的描述如下,基本分4部分内容

(1)理解Spec并指定验证计划

(2)搭建验证环境

(3)写case进行功能验证

(4)覆盖率的收集并基于覆盖率进行验证的完善

5604bc2245e743a9b53e27fa5943098a.png

面试提问

讲一下你做的uart这个项目?

答:关于该问题基本就如上简历分为4部分进行介绍,在你介绍过程中或者介绍结束,面试官会针对其中的细节进行进一步深入提问。

以下为面试官进一步深入提问的相关问题。

1.什么是uart?uart是用来做什么的?它的应用场景是怎么样的?它是挂在哪个总线上面?uart的协议是怎么样的能介绍下吗,它是怎么收发数据的?

2.你简历中写了理解APB协议,那你能简单介绍下APB协议吗?APB协议有哪些接口信号,分别是哪些功能?APB的协议是怎么样的,是如何写数据如何读数据的?

3.关于APB协议,你刚刚说到在第一个clk,控制信号先使能(PSEL,PADDR、PWRITE),在第二个clk,使能信号(PENABLE)拉高,读写数据(DATA)才有效,你认为APB协议为什么要这样做?不能在一拍中做完所有这些事情吗?

4.APB协议支持流水线吗?它与其他的AMBA总线有什么区别或不同,比如AHB总线?

5.你说你读了并理解了UART协议,那你说说你看了哪些部分,给我讲讲uart有哪些寄存器?

6.你在验证uart的时候,是怎么验的?case是咋写的?(基于SPEC配置相关寄存器使能DUT,去验证相关功能之类的。)

7.讲一下你的验证计划和验证功能点吧,看看都验了什么?

8.你的验证环境是怎么样的,请详细讲一下。

答:我一般从顶层向下讲,具体如下:

(1)首先最顶层就是tb_top层,tb_top层就是例化了DUT,例化了interface并且通过config_db进行interface的传递,传递到下面env所需要使用的interface的component(面试官可能会问为什么class要用virtual interface?),并且产生时钟和复位,然后会有个run_test()(UVM启动的入口),以上就是tb_top层做的工作。

(2)tb_top层下面就是base_test,base_test里面有什么?他是做什么的?

base_test里面例化了一个大的env以及virtual_sequencer(为什么需要virtual_sequencer),reg_model、adapter等,base_test也是整个UVM验证平台的树根,即UVM_TEST_TOP。

(3)base_test下面有个大的env,里面有什么?

里面有apb_env(apb总线这边发并行数据激励给DUT),

uart_env(发串行数据激励给DUT)和以及进行数据的check的scoreboard

(3)apb_env和uart_env里面分别包含有master_agent(发激励,里面例化了sqr,drv,mon),slave_agent(只例化mon,只监控不发激励)。

9.你的数据流是怎么样的?

答:数据流主要分2个方向,

(1)APB_env这边发并行数据到interface经过DUT(UART)后输出为串行数据,由UART_env中的slave_agent的monitor抓到

(2)UART_env中的master_agent发送串行数据到interface经过DUT后由APB总线这边读出(prdata),读出的为经过DUT后由串行数据转化成为并行的数据。

10.你的环境中有reg_model,是自己写的还是脚本生成的?你对reg_model有多少了解,他有什么好处呢?如果没有reg_model我们还能配置寄存器吗?

11.寄存器模型中前门、后门访问都有什么区别,什么时候适合用前门访问?什么时候适合用后门访问? 

12.你的scoreboard是怎么写的?具体的check部分是怎么实现的?(简单讲一下具体的代码),你的scoreboard是怎么连接的?(TLM)使用了那些port?使用的是FIFO的方式还是直连的方式?

13.关于这个项目你写了多少个case?分别都是针对哪些功能写的?

答:最基本的就是2个功能

(1)发送功能:并行数据 ----- 串行数据:我的第一条case是apb2uart,就是apb_env里面的master_agent中的driver发的并行数据通过DUT串行输出,然后由uart_env里面的slave_agent里面的monitor监控,最终送到scoreboard做check。

具体我是怎么写的,也就是写个sequence,首先要去验证UART的这个发送功能,肯定要做一些配置,因此我基于SPEC去配置了相关的寄存器,比如先把波特率(什么是波特率?2个uart通信波特率要保持一致?)配置起来,然后配置了UART使能的相关寄存器。需要重点关注的寄存器如下。

5202c415dac5455fa095cbd25fca5bd3.png

(2)接受功能:串行数据 ----- 并行数据:第二条case就是UART_env中的master_agent中的driver发送串行数据给DUT,然后由APB总线并行读出。注意:第二条case是uart2apb,意味着uart_env发送串行数据给DUT,也就是2个uart通信(涉及到波特率一致的问题了)。面试官可能会问到你是如何保持波特率一致的?(DUT的波特率通过配置DUT的寄存器实现,UART_ENV的波特率通过config_db去配置UART_ENV的相关参数,使得发送的激励的波特率与DUT保持一致)。

(3)中断等特殊情况:通过配置寄存器实现超时中断、校验位错误中断以及FIFO溢出等情况。

14.最后你是怎么评估你的项目的完善程度的?(覆盖率)

15.你的覆盖率部分讲一讲,代码覆盖率和功能覆盖率的情况如何?

16.代码覆盖率由哪几个部分组成,你的代码覆盖率哪部分内容覆盖的不足?以及你是如何基于覆盖率报告进行验证的完善的?

17.关于功能覆盖率,能讲讲你都定义了哪些covergroup和coverpoint吗?你是基于什么去写的功能覆盖率,你认为关于这个UART的重要功能你是否都cov到了?

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UART模块验证-面试总结 的相关文章

  • UART+DMA数据传输

    DMA的概念 DMA xff08 Direct Memory Access xff09 即直接内存访问 xff0c DMA传输方式无需CPU直接控制传输 xff0c 通过硬件为RAM I O设备开辟一条直接传输数据的通路 xff0c 能使C
  • UART一对多通信的方法

    通常 xff0c uart为单对单通信 xff0c 当用到一对多时可以用RS485 然而有时候我们MCU的uart口只剩一个 xff0c 又要接多个uart的外围芯片 xff0c 这时如果转成RS485需要加多个485收发器 xff0c 成
  • UART详解

    UART 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff09 是一种串行异步收发协议 xff0c 应用十分广泛 UART工作原理是
  • HAL_UART_IRQHandler(UART_HandleTypeDef *huart)里面的中断接收函数(作者自己生成的函数代码,中间有关闭接收中断,但是原子教程中没有关闭中断的语句注意区别)

    前言 1 UART Receive IT 2 HAL UART Receive 3 HAL UART Receive IT 前言 看了很长时间串口中断的HAL库 xff0c 最容易混淆的就是函数的名称 xff0c 主要集中在UART Rec
  • UART波形分析

    1 逻辑分析仪解码配置 波特率 xff1a 9600 2 逻辑分析仪结果 3 波特率计算 1除以9600 xff0c 结果如下 xff08 e 4表示10的负4次方 xff09 表示 0 00010416秒 61 104 16 微秒 找到发
  • UART串口通信协议概述

    1 UART协议介绍 UART是一种通用串行数据总线 xff0c 用于异步通信 UART能实现双向通信 xff0c 在嵌入式设计中 xff0c 常用于主机与辅助设备通信 UART包括RS232 RS449 RS423等接口标准规范和总线标准
  • 串行通信基础知识与UART驱动构件使用方法

    串行通信基础 串行通信接口 异步串行通信 UART 常称为 串口 或SCI xff0c 在USB未普及之前 xff0c 是PC机必备通信接口之一 通信方式为单字节通信 xff0c 是最简单的串行通信方式 RS232 RS485 接线简单 x
  • UART串口通信协议详解

    UART xff1a 通信异步收发器 xff0c 串行 异步通信总线 xff0c 两条数据线 xff08 收发 xff09 xff0c 全双工 xff08 可以同时接收和发送 xff09 一 UART帧格式 xff08 UART协议 xff
  • 4.RTT-UART-中断接收及轮询发送

    本期博客开始分享RTT的UART xff0c 利用战舰V3的uart2来输入输出一些字符串 UART xff08 Universal Asynchronous Receiver Transmitter xff09 通用异步收发传输器 xff
  • 一起学nRF51xx 6 - uart

    前言 通用异步接收器 发送器提供快速 全双工 内置流量控制的异步串行通信 CTS RTS 在硬件方面支持高达1Mbps波特率 支持奇偶校验和第9位数据生成 用于每个UART接口线的GPIO可从芯片上的GPIO中任选 而且可独立配置 这使得芯
  • GD32E23x的USART被断点打断后重新运行,会一直进入中断的问题

    GD32E23x的USART被断点打断后重新运行 会一直进入中断的问题 GD32E230K8单片机USART0连接一个从机芯片 该芯片每100ms发来一串16Bytes的数据 MCU中断接收 没有开启FIFO 只开启了RBNE 接收缓存非空
  • C++面试之const和static的联系和区别

    C 中的静态成员和静态函数的参考之前写的博客 C 中的静态成员和静态函数 Littlehero 121的博客 CSDN博客 C 中的全局变量和普通全局变量参考之前写的博客 全局变量 静态全局变量 静态局部变量和普通局部变量的区别 Littl
  • C/C++中的头文件加上头文件中的ifndef/define/endif有什么作用?

    参考博客 https blog csdn net summer00072 article details 80883514 主要的作用就是防止头文件重复包含了 这个作用在Qt中是已经给你做好了 qt新建一个文件的时候就会直接给你建立完毕
  • 阿里巴巴面试总结:测试工程师

    阿里巴巴的面试是网上预约的时间 武汉一共有两天 五号和六号 原先是担心自己准备的不够充分 就把时间往后面移 最后定的是六号的下午四点半到六点的场 基本也就是武汉的最后一场 后来才发现 武汉可以说的上是全国比较晚面试的了 而今年马云又放出了风
  • Verilog功能模块——Uart收发

    摘要 本文分享了一种通用的Uart收发模块 可实现Uart协议所支持的任意波特率 任意位宽数据 5 8 任意校验位 无校验 奇校验 偶校验 1校验 0校验 任意停止位 1 1 5 2 的数据传输 此模块需要搭配FIFO使用 以消除发送端和接
  • 使用HAL库开发STM32:UART基础使用

    文章目录 目的 基础说明与初始化 基础说明 初始化 数据接收和发送 轮询方式 中断方式 DMA方式 其它说明 总结 目的 UART 异步串口 是单片机非常常用的一个功能 一般用作设备或模块间通讯的一种方式 通常所说的232或是485通讯从写
  • 面试总结(六):搜索索引

    问题导读 1 如何理解用户输入查询语句 2 如何根据得到的文档和查询语句的相关性 对结果进行排序 3 如何计算权重 Term weight 过程 4 如何判断Term之间的关系从而得到文档相关性 搜索索引到这里似乎我们可以宣布 我们找到想要
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • 如何在R中从串口读取数据

    我想绘制来自串行端口的实时数据 我认为 R 将是完成这项工作的好工具 我在尝试从串行端口 COM4 读取数据时遇到了困难 我已经验证数据是通过 terra term 传入的 并在尝试 R 之前关闭会话 但我似乎无法在 R 中获取任何内容 我
  • 使用 /dev/tty* 进行 9 位 uart 仿真

    我有一个不常见的协议 它需要 9600 波特率 9 位和 1 个停止位 我找不到任何可以实现此发送 接收的驱动程序 我可以寄东西到 dev tty 用于模拟这些查询 我应该发送什么 如何模拟 9600 波特率 您可以使用粘性奇偶校验 也称为

随机推荐

  • nuc980 linux 控制 gpio 引脚电平

    这里使用miscdevice设备的方式编写 xff0c 关键结构体与API define MISC DYNAMIC MINOR 255 struct miscdevice int minor const char name const st
  • CCM-SLAM跑自己的USB摄像头

    CCM SLAM跑自己的USB摄像头 ccm slam readme md如何使用自己的数据参数功能 尝试调用usb摄像头修改摄像头启动文件 96 usb cam test launch 96 测试摄像头修改 96 Client0 euro
  • ORB2单目读代码笔记12--单目初始化中基础矩阵推导计算、根据得分确定最佳单应矩阵和基础矩阵

    单目初始化中基础矩阵推导计算 根据得分确定最佳单应矩阵和基础矩阵 ComputeH21 结束 返回 FindHomographyFindHomography 跳转 CheckHomographyCheckHomography 结束 返回 F
  • Ubuntu 18.04 (Jetson Nano 4G/TX2)配置 CCM-SLAM

    文章目录 1 安装ROS2 安装OpenCV33 设置虚拟内存4 安装CCM SLAM 记录了安装CCM SLAM的详细过程以及踩过的坑 安装环境 xff1a Jetson Nano 4G Ubuntu 18 04 1 安装ROS 1 1更
  • Jetson Nano 调用CSI摄像头运行CCMSLAM

    文章目录 1 安装ROS的CSI摄像头软件包1 1 jetson csi cam1 2 jetson nano csi cam 2 修改Client0 euroc launch3 编写启动文件4 启动 1 安装ROS的CSI摄像头软件包 T
  • ROS多机通信SSH远程运行CCMSLAM

    文章目录 测试通信设置ROS MASTER URI主机rex终端输入 xff1a 从机nano终端输入 xff1a 启动CCMSLAM主机rex从机nano查看效果 SSH远程控制配置SSH启动SSH进行远程控制 背景 xff1a 主机 x
  • ORB2单目读代码笔记13--卡方检验原理及其在ORB-SLAM2中的用处

    卡方检验原理及其在ORB SLAM2中的用处 补 xff1a 卡方检验 补 xff1a 卡方检验 显著性水平 xff1a 显著性水平是估计总体参数落在某一区间内 xff0c 可能犯错误的概率 xff0c 用 表示 是指当原假设为正确时人们却
  • 玩转 Jetson Nano——开机准备与远程连接设置

    Nano开机准备与远程连接设置 1 开机前的准备1 1 认识 Nano1 2 硬件准备1 2 1 必备1 2 2 选配 1 3 在 SD 卡上烧写系统1 3 1 下载镜像1 3 2 格式化 SD 卡1 3 3 将镜像烧录到 SD 卡 1 4
  • CMAKE学习笔记

    文章目录 CMAKE常用指令CMake最低版本要求项目名称设置编译方式编译CXX的设置标志搜索外部库添加源文件子目录 查找源文件生成可执行文件生成链接库文件为可执行文件链接库指定头文件搜索路径SET定义变量LIST列表操作判断语句循环语句
  • 你所不知道的C语言——链表

    linus嘴里的good taste 在一次TED演讲中 xff0c 林老大在14分钟提到 xff0c 代码的品味 The mind behind linux 说实话 xff0c 这是我第一次听到林老大的声线 看下边一段代码 xff1a s
  • cv_bridgeConfig.cmake出错

    参考文章 xff1a https www cnblogs com xsy123 p 14488021 html 错误描述 出现错误如下 CMake Error at opt ros melodic share cv bridge cmake
  • Android系统上层应用能访问底层硬件的简要原理

    Android系统的应用程序是用Java语言编写的 xff0c 而硬件驱动程序是用C语言来实现的 xff0c 那么 xff0c Java接口如何去访问C接口呢 xff1f Android系统架构 xff1a Application Appl
  • Android 10编译报错整理

    编译Android 10遇到以下不同报错 xff0c 没有给出明显的错误信息 xff0c 最后验证出是电脑内存不足导致编译被杀掉 xff0c 增大电脑内存和Swap分区之后解决 注 有关详细信息 请使用 Xlint unchecked 重新
  • vcpkg快速使用教程

    vcpkg是一个自动管理开源库的工具 xff0c 你可以把它想像成Ubuntu的apt get软件包 自动下载开源软件包软件包可以升级版本或补丁包自动编译软件包软件包依赖的包自动检查下载编译可集成至Visual Studio xff0c 你
  • 生产者消费者问题(Producer:1、Consumer:1、Buffer:1)

    生产者消费者问题是一个著名的线程同步问题 xff0c 该问题描述如下 xff1a 有一个生产者在生产产品 xff0c 这些产品将提供给若干个消费者去消费 xff0c 为了使生产者和消费者能并发执行 xff0c 在两者之间设置一个具有多个缓冲
  • (ROS)差分轮式机械臂机器人(二)六轴机械臂Moveit配置&深度相机kinect配置

    上一次搭建出了差分式移动底盘和六轴机械臂 这一次总结机械臂的Moveit配置和底盘kinect深度相机配置 文章目录 项目源码机械臂Moveit配置Moveit具体是什么可以参考 古月居的视频教程 https www bilibili co
  • 操作系统--线程

    线程 什么是是线程 进程中的一条执行流程 线程的优点 一个进程可以同时存在多个线程各个线程之间并发执行各个线程之间共享地址空间和文件等资源 线程的缺点 一个线程崩溃将导致其余所有线程崩溃 线程所需的资源 进程与线程的比较 线程的实现 用户线
  • ros底盘驱动包存在scan跟不上车体运行的错误调试过程

    现象描述 一个和底盘通讯的代码和ros包 总是发现当控制车体运行一段距离 rviz里面scan的数据更新会过一秒才能跟着运动走 同时发现tf的base link也是过一秒才更新 调试过程 起初 以为是串口堵塞 没有及时的接受和处理底盘上行发
  • 变频器电路原理详解经典

    要想做好变频器维修 xff0c 当然了解变频器基础知识是相当重要的 xff0c 也是迫不及待的 下面我们就来分享一下变频器维修基础知识 大家看完后 xff0c 如果有不正确地方 xff0c 望您指正 xff0c 如果觉得还行支持一下 xff
  • UART模块验证-面试总结

    前言 本篇博客依旧针对UART模块的验证项目进行面试总结 xff0c 也是笔者面试过众多公司所总结整理的 关于UART深挖的可问的知识点还是非常多 xff0c 本篇博文可以说基本上涵盖大部分可问到的点 关于下列有一些问题我并没有列出答案 x