| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> IC验证面试总结之UART模块 -> 正文阅读 |
|
[嵌入式]IC验证面试总结之UART模块 |
前言本篇博客依旧针对UART模块的验证项目进行面试总结,也是笔者面试过众多公司所总结整理的 关于UART深挖的可问的知识点还是非常多,本篇博文可以说基本上涵盖大部分可问到的点 关于下列有一些问题我并没有列出答案,是因为这些问题的答案基本上都比较简单或者可以搜到, 读者可自行总结整理下 具体内容如下: 简历描述??关于UART项目的描述如下,基本分4部分内容 (1)理解Spec并指定验证计划 (2)搭建验证环境 (3)写case进行功能验证 (4)覆盖率的收集并基于覆盖率进行验证的完善 面试提问讲一下你做的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使能的相关寄存器。需要重点关注的寄存器如下。 (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到了? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 16:51:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |