【真实场景面试问题-2】

1 介绍一下低功耗设计手段–clock gating 和 clock domain;

芯片的低功耗设计尤其是在关注能耗的场景:移动设备、物联网和嵌入式系统;时钟门控(Clock Gating)和时钟域(Clock Domain)是两种常用的低功耗设计手段。

1.1 时钟门控–clock gating

时钟门控是通过在不活跃的时钟周期内关闭时钟信号来减少动态功耗的技术。动态功耗主要由时钟树的切换活动引起,因此通过减少不必要的时钟切换,可以显著降低功耗。以下是基于寄存器的时钟门控和基于锁存器的时钟门控;
   

1.2 多时钟域–clock domain

时钟域是指在设计中使用多个不同的时钟信号来驱动不同的模块或子系统,实现更精细的功耗管理和性能优化。

1.3 基于多电压域

动态电压频率技术,是一种通过将不同电路模块的工作电压及工作频率降低到恰好满足系统最低要求,来实时降低系统中不同电路模块功耗的方法。

1.4 多阈值库

如果想要MOS管导通,低阈值的cell需要的导通电压更低,所以相比高阈值的cell,它导通的更快,与此同时,它的漏电也越多;

1.5 RTL设计

RTL设计时的指导思想:

2 在UVM的验证框架中,base_test中基本会做哪些?

bast_test是每个子test都会extend的class,因此首先base_test的重要性不言而喻:

2.1 组件环境和配置

class内申明和build_phase下例化:

  • 比如创建和配置验证环境env(包括:agent/scoreboard/refer_model)等;
  • 配置或传递参数:配置组件内各种参数; 通过env.agent.xx.xx等的方式最方便;

2.2 复用task或者function

对于通用的task或者function放在base_test下,方便直接复用;

2.3 main_phase和final_phase

  • main_phase: 因为是sub-test启动时都会首先执行base-test的main_phase,因此可在base-test执行比如复位、初始化寄存器配置等;
  • final_phase: 设置测试结果error等输出FAIL/SUCC等,报告错误和警告信息,提供详细的错误日志;

典型的UVM验证环境下的base_test:


class base_test extends uvm_test;// 注册到工厂`uvm_component_utils(base_test)// 环境句柄env my_env;// 构造函数function new(string name, uvm_component parent);super.new(name, parent);endfunction// 构建阶段virtual function void build_phase(uvm_phase phase);super.build_phase(phase);// 创建环境my_env = env::type_id::create("my_env", this);// 绑定虚拟接口if (!uvm_config_db#(virtual my_if)::get(this, "", "vif", my_env.vif)) begin`uvm_fatal("NOVIF", {"virtual interface must be set for: ", get_full_name(), ".vif"})end// 读取配置文件uvm_config_db#(int)::set(this, "*", "clk_period", 10);endfunction// 运行阶段virtual task run_phase(uvm_phase phase);super.run_phase(phase);// 启动测试序列phase.raise_objection(this);`uvm_info("BASE_TEST", "Starting test sequence", UVM_LOW)seq_base seq;seq = seq_base::type_id::create("seq", this);seq.start(my_env.agent.sequencer);`uvm_info("BASE_TEST", "Test sequence completed", UVM_LOW)phase.drop_objection(this);endtask// 最终阶段virtual function void final_phase(uvm_phase phase);super.final_phase(phase);// 报告测试结果if (my_env.scoreboard.error_count == 0) begin`uvm_info("BASE_TEST", "Test passed", UVM_LOW)end else begin`uvm_error("BASE_TEST", $sformatf("Test failed with %0d errors", my_env.scoreboard.error_count))end// 生成覆盖率报告$display("Coverage Report:");$display("Functional Coverage: %0d%%", my_env.coverage_model.get_coverage());endfunction
endclass

2 sequence如何发送自己的transaction,以及如何启动?

sequence用于生成和发送自己的transaction到sequencer,进而由driver来解析transaction来达到DUT的接口上;
在sequence的body中来例化和发送transaction–uvm_do/with:

virtual task body();my_transaction req;// 生成并发送第一个交易`uvm_do_with(req, { write == 1; addr == 32'h1000; })`uvm_info("SEQ", "First transaction sent", UVM_MEDIUM)// 生成并发送第二个交易`uvm_do_with(req, { write == 0; addr == 32'h2000; })`uvm_info("SEQ", "Second transaction sent", UVM_MEDIUM)// 生成并发送随机数量的交易repeat (10) begin`uvm_do(req)`uvm_info("SEQ", "Random transaction sent", UVM_MEDIUM)endendtask

driver中一直尝试不断接收transaction并解析赋值到接口上:

virtual function void build_phase(uvm_phase phase);super.build_phase(phase);// 获取虚拟接口if (!uvm_config_db#(virtual my_if)::get(this, "", "vif", vif)) begin`uvm_fatal("NOVIF", {"virtual interface must be set for: ", get_full_name(), ".vif"})endendfunction// 运行阶段virtual task run_phase(uvm_phase phase);my_transaction tr;forever begin// 从 sequencer 获取 transactionseq_item_port.get_next_item(tr);// 将 transaction 发送到 DUTvif.data <= tr.data;vif.addr <= tr.addr;vif.write <= tr.write;vif.valid <= 1;@(posedge vif.clk);vif.valid <= 0;// 通知 sequencer 交易已完成seq_item_port.item_done();endendtask

【总结】
定义 Transaction 类:定义传输类,描述数据包或命令。
定义 Sequence 类:定义序列类,生成和发送交易。
启动 Sequence:在 test 或 sequence 中启动序列。
Driver 接收并发送 Transaction:driver 从 sequencer 接收交易并将其发送到 DUT;

  1. PCIE有几种复位方式?
    ----热复位、冷复位、功能复位和链路复位;
  • 热复位:热复位是在系统不关机的情况下,对PCIe设备进行的一种复位操作。这个复位只影响PCIe设备,不会重新启动整个系统。
    作用:热复位通常用于重新初始化设备,特别是在设备固件更新后,需要重新加载设备配置的情况下。它不会影响设备的电源状态或重新训练链路。
  • 功能复位:主要针对的是支持多个功能的PCIe设备(Multi-Fun PCIe Device),可以实现只对特定的Function复位,而其他的Function不受影响。
    作用:功能复位可以快速恢复设备某个模块的正常运行,而不需要执行完整的设备复位,从而减少系统停机时间。
  • 冷复位:因为切断电源再重新连接导致的复位;
    作用:在硬件复位后,设备会重新初始化,并重新执行链路训练,确保PCIe链路能够正常建立;
  • 链路复位:链路复位是对PCIe链路本身进行的复位操作,而不是对整个设备。它可以通过重新训练链路的方式进行。
    作用:链路复位通常用于修复链路中的暂时性错误或者在设备进入低功耗模式后重新激活链路。链路复位后,链路的配置可能会发生变化,例如链路速率和宽度。

4.PCIE建链的训练过程?
PCIe链路训练是一种为了确保两个或更多PCIe设备能够有效、准确地通信的过程。在PCIE的正常建链过程汇总简单分为这三个步骤即可:
1.Detect:来检测可以连接的PCIE设备,确认PCIE链路上可以work的lane;
detect.quite状态–>固定12ms进入detect.active–>发送detect序列,确定lane–>再发一次确定lane–>polling状态;
2.polling:发送TS1和TS2序列,进行位锁定/字符块锁定等–>进入config状态;
3.config:主要作用为完成pcie链路的主要配置工作主要包括,link number 和 lane number,以及对各个lane通过设置FTS来进行deskew。然后进入L0状态使PCIe链路正常工作;
4.L0状态:该状态为PCIe链路正常工作的状态,host可以访问device的配置空间以及与之进行数据交互。

5.PCIE数据链路层如何确保数据传输的可靠性和正确性?
数据链路层添加DLLP header;
1、为TLP分配Sequence ID;
2、为TLP增加LCRC;
3、将TLP在Retry Buffer备份;
4、发送端检查接收端返回的DLLPs;

【ref】
1.https://www.cnblogs.com/hxing/p/14509169.html
2.https://blog.csdn.net/Luckiers/article/details/130469457

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/478862.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享

在嵌入式系统中&#xff0c;有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器&#xff0c;通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片&#xff0c;驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…

《白帽子讲Web安全》13-14章

《白帽子讲Web安全》13-14章 《白帽子讲Web安全》13-14章13、应用层拒绝服务攻击13.1、DDOS简介13.2、应用层DDOS13.2.1、CC攻击13.2.2、限制请求频率13.2.3、道高一尺&#xff0c;魔高一丈 13.3、验证码的那些事儿13.4、防御应用层DDOS13.5、资源耗尽攻击13.5.1、Slowloris攻击…

Linux—进程概念学习-03

目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…

pikachu文件上传漏洞通关详解

声明&#xff1a;文章只是起演示作用&#xff0c;所有涉及的网站和内容&#xff0c;仅供大家学习交流&#xff0c;如有任何违法行为&#xff0c;均和本人无关&#xff0c;切勿触碰法律底线 目录 概念&#xff1a;什么是文件上传漏洞一、客户端check二、MIME type三、getimagesi…

从零开始学GeoServer源码(二)添加支持arcgis切片功能

文章目录 参考文章环境背景1、配置打包好的程序1.1、下载GeoServer的war包1.2、下载GeoWebCache1.3、拷贝jar包1.4、修改配置文件1.4.1、拷贝geowebcache-arcgiscache-context.xml1.4.2、修改geowebcache-core-context.xml1.4.3、修改geowebcache-servlet.xml 1.5、配置切片信息…

学习日志016--python实现双向循环列表与链栈

python中一些复合数据结构通过类的封装来实现的。双向循环链表与链栈也在其中。 双向循环链表 双向循环链表是一种特殊类型的链表&#xff0c;它结合了双向链表和循环链表的特点。在双向循环链表中&#xff0c;每个节点不仅包含数据&#xff0c;还持有指向前一个和后一个节点的…

【自动化Selenium】Python 网页自动化测试脚本(上)

目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 &#xff08;1&#xff09;ID定位 &…

微软Ignite 2024:建立一个Agentic世界!

在今年的Microsoft Ignite 2024上&#xff0c;AI Agent无疑成为本次大会的重点&#xff0c;已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布&#xff1a;企业可以在智能体中&#xff0c;使用Azure目录中1800个LLM中的任何一个模型了&#xff01; 建立一个Agent…

嵌入式linux系统中图像处理基本方法

目录 2.1 BMP图像处理 2.1.1 BMP文件格式解析 2.1.2 代码实现:将BMP文件解析为RGB格式,在LCD上显示 2.2 JPEG图像处理 2.2.1 JPEG文件格式和libjpeg编译 2.2.2 libjpeg接口函数的解析和使用 2.2.3 使用libjpeg把JPEG文件解析为RGB格式,在LCD上显示 …

探索 GAN 的演变之路

2014 年&#xff0c;在论文Generative Adversarial Networks中&#xff0c;首次提出了 GAN&#xff0c;其核心思想是“生成”与“对抗”。GAN 由一个生成器 G(Generator)和一个判别器 D(Discriminator)构成&#xff0c;前者用于捕捉数据分布&#xff0c;后者用于判别某个样本是…

Vue实训---5-路由搭建

回顾之前的代码 我们在my-vue-project\src\router\index.js中的代码如下&#xff1a; // 什么是路由&#xff1f;路由就是url地址和组件的对应关系 // 1.引入vue-router import { createRouter, createWebHashHistory } from vue-router// 2.定义路由 const routes [{path: …

【GAMES101笔记速查——Lecture 19 Cameras,Lenses and Light Fields】

本章节内容&#xff1a;相机、棱镜、光场 计算机图形学的两种成像方法&#xff1a; 1.合成方法&#xff1a;光栅化、光线追踪&#xff08;展示出现实没有的东西&#xff09; 2.捕捉方法&#xff1a;相机&#xff08;捕捉现实已有的东西&#xff09; 目录 1 相机 1.1 针孔相…

MacOS系统上Jmeter 录制脚本遇到的证书坑位

一、JMeter介绍与安装 1&#xff0c;下载及安装 jmeter官网地址 二、录制百度链接https请求时&#xff0c;需要导入jmeter相关证书到macos系统的更目录中. 导入方式&#xff0c;直接拖入mac的系统中&#xff0c;始终新人就可以&#xff1b; 三、jmeter 创建相关的录制组件…

软件团队的共担责任

问责制被认为是个人与其社会系统之间的纽带&#xff0c;它创造了一种将个人与其行为和绩效联系起来的身份关系。在入门系列的第一篇文章《超越工具和流程&#xff1a;成功软件开发团队的策略》中&#xff0c;我们介绍了问责制的概念&#xff0c;并提出了以下定义&#xff1a; …

【Python爬虫实战】深入解析 Scrapy:从阻塞与非阻塞到高效爬取的实战指南

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、阻塞和非阻塞 &#xff08;一&#xff09;阻塞 &#xff08;二&#xff09;非阻塞 二、Scrapy的工作…

【Python数据分析五十个小案例】电影评分分析:使用Pandas分析电影评分数据,探索评分的分布、热门电影、用户偏好

博客主页&#xff1a;小馒头学python 本文专栏: Python数据分析五十个小案例 专栏简介&#xff1a;分享五十个Python数据分析小案例 在现代电影行业中&#xff0c;数据分析已经成为提升用户体验和电影推荐的关键工具。通过分析电影评分数据&#xff0c;我们可以揭示出用户的…

第八篇:CamX RawHdr Feature Enable

CamX RawHdr Feature Enable RawHdr feature介绍: 试用于拍照场景,输入3张Raw,输出一张Raw。 对应的pipeline: camxSWMFMergeRaw.xml (usecases: UsecaseZSL) featureGraph: RTRawHDRBayer2YUVJPEG ​ RT -> RawHdr -> Bayer2Yuv -> JPEG RTRawHDRBayer2YUVJPE…

Python毕业设计选题:基于django+vue的期货交易模拟系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 期货信息 个人中心 管理员登录界面 管理员功能界面 用户管理 期货公司管理…

文件内容扫描工具

简介 文件扫描助手是一款基于Vite Vue 3 Electron技术栈开发的跨平台桌面应用程序。它提供了强大的文件内容搜索功能&#xff0c;支持Word、Excel、PDF、PPT等常见办公文档格式。用户可以通过关键词快速定位到包含特定内容的文件&#xff0c;极大地提高了文件管理和查找效率…

数据结构--AVL树(平衡二叉树)

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c、c知识及代码 &#x1f43e; &#x1f539;Gitee代码仓库 五彩斑斓黑1 (colorful-black-1) - Gitee.com 一、AVL树是什么&#xff1f;&#xff08;含义、性质&#xff09; 1.AVL树的概念 AVL树是最…