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
  • ESP32+WiFi+UART数据传输测试

    刚开始使用ESP32芯片 xff0c 摸索着实现了一个数据传输的功能 xff0c 记录下来以免忘记 实现功能 使用ESP32在服务器与下位机之间传输数据 xff0c 整体的流程图如下所示 如图所示 xff0c 下位机与ESP通过串口连接 x
  • 收藏!了解UART总线工作原理看这一篇就够了!

    原文 xff1a 玩转单片机 2019 08 24 16 50 29 越学到后面 xff0c 基础知识更加不能忘记 xff0c 温故而知新 还记得当年的打印机 xff0c 鼠标和调制解调器吗 xff1f 他们都有巨大笨重的连接器和粗电缆 x
  • STM32 HAL UART 使用关键思路(无代码,但是很关键)

    1 到底使用哪种方式 xff0c 或者说有哪几种方式 xff1f STM32 中的 UART 允许使用不同的发送 TX 和接收 RX 模式进行配置 xff0c 有什么区别和优势 xff1f xff1a 轮询模式 xff08 简单来说就是无
  • UART详解

    UART 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff09 是一种串行异步收发协议 xff0c 应用十分广泛 UART工作原理是
  • UART(通用异步收发传输器)

    1 UART其在数据发送时将并行数据转换成串行数据来传输 xff0c 在数据接收时将接收到的 串行数据转换成并行数据 是异步串行通信的总称 2 而 RS232 RS449 RS423 RS422 和 RS485 等是对应各种异步串行通信口的
  • UART串口通信协议概述

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

    UART xff1a 通信异步收发器 xff0c 串行 异步通信总线 xff0c 两条数据线 xff08 收发 xff09 xff0c 全双工 xff08 可以同时接收和发送 xff09 一 UART帧格式 xff08 UART协议 xff
  • UART串口通信

    串口是 串行接口 的简称 xff0c 即采用串行通信方式的接口 串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送 xff0c 其特点是通信线路简单 xff0c 但传输速度较慢 因此串口广泛应用于嵌入式 工业控制等领域中对数据传输速
  • Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)

    文章目录 目的 模块安装 基础使用 扫描端口 打开端口 发送数据 接收数据 错误处理 数据解析器 SerialPort类 构造方法 属性 事件 方法 命令行工具 总结 目的 上位机与各种电路模块间常常采用串口进行通讯 Node js中可以使
  • 【UART】Verilog实现UART接收和发送模块

    目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现 UART RX 模块 UART 发送部分 UART TX 模块图 UART TX 时序图 Verilog 实现 U
  • MicroPython串口数据转换技巧

    技巧一 还原从串口接收的HEX字符串 首先上官方文档 确认接收数据类型为bytes 串口读来的bytes类型HEX数据转换成HEX类型字符串转换函数 ByteToHex的转换 返回数据16进制字符串 def ByteToHex bins r
  • Java是值传递还是引用传递?区别是什么?

    文章目录 值传递 引用传递 两者区别 Java到底是值传递还是引用传递 在Java中参数的传递主要有两种 值传递和 引用传递 值传递 实参传递给形参的是值 形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参 也就是说 在方法调
  • OOM(内存溢出)造成原因及解决方案

    一 概念 内存溢出 Out Of Memory 简称OOM 是指应用系统中存在无法回收的内存或使用的内存过多 最终使得程序运行要用到的内存大于能提供的最大内存 二 造成原因 2 1 内存泄漏 由于长期保持某些资源的引用 垃圾回收器无法回收它
  • UART串口协议

    通用异步收发传输器 Universal Asynchronous Receiver Transmitter 通常称作UATR 是一种异步收发传输器 将数据由串行通信与并行通信间做传输转换 作为并行输入称为串行输出的芯片 UART是一种通用串
  • UART ISR Tx Rx 架构

    我让事情变得复杂了吗 我正在构建我的代码 以便通过 UART 从 8051 micro 与外围设备进行通信 外设响应主机的命令 一次只能响应一个命令 这是一个简单的发送和接收协议 tx1 rx1 tx2 rx2 tx3 rx3 每个 TX
  • 以字符串形式接收数字(uart)

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

    我目前正在使用 Gem5 我必须通过 UART 从我的主机访问 ARMv8 裸机选项 所以我尝试了很多方法 但我还没有准备好 您能否让我知道 如何在裸机类型编程中将主机的串行端口映射到 ARMv8 的串行端口 任何帮助 将不胜感激 工作设置
  • 启用 DMA 的 UART Tx 模式

    我已经为 UART 在传输模式下编写了一个简单的设备驱动程序 并启用了 DMA 和中断 我使用的硬件是 omap 4460 pandaboard 其中加载了 Linux 3 4 下面我分享一下相关部分的代码 在开放阶段 dma map io
  • 如何将 microbit 与 BLE 连接并监听按钮按下事件?

    2021 年 11 月 28 日编辑 如果您需要使用蓝牙低功耗将 microbit 连接到计算机 并在单击按钮时执行操作 直接跳并跟随 ukBaz https stackoverflow com users 7721752 ukbaz的回答

随机推荐

  • 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