【IC面试问题:UCIE PHY LSM AXI Cache】

IC面试问题:UCIE PHY LSM && AXI && Cache

  • 1 UCIE PHY LSM有几种状态? 以及L1和L2这两种低功耗状态有什么区别?
  • 2 AXI的特性? 通道之间有依赖关系吗? master和slave的valid和ready关系? 写数据可以优先于写地址吗?
  • 3 什么是cache的hit和miss?

1 UCIE PHY LSM有几种状态? 以及L1和L2这两种低功耗状态有什么区别?

UCIE PHY LSM的状态:
RESET:系统复位的状态;
SBINI: SideBand初始化,在该状态对SideBand初始化,选择可用的SB Lane;
MBINT: MainBand初始化,在该状态对MainBand初始化,修复后坏的MB Lane。在该状态下MainBand处于最低速;
MBTRAIN: Mainband训练,在该状态对 Mainband 的 Clock、Valid、Data等Lane进行训练,使得UCIE链路工作在链路两端设备协商好的最高速或协商速率之下的物理最高速。PCIE是从Gen1最低速开始一点点往最高速进行训练的,但UCIE除了在初始化的时候为最低速,其在 MBTRAIN 状态对 Mainband 进行训练时一次切速到最高速进行训练,训练失败的话再进行降速或者减宽。
LINKINIT,链路管理状态,用以 D2D Adapter 完成初始链路管理。该状态时,进行 RDI Bring Up。
ACTIVE:UCIe 的正常工作状态,该状态时进行 Mainband 的数据传输,对应 PCIe 的 L0 状态;
L1/L2:低功耗状态,处于这两种状态下的 UCIe Module 功耗较低,处于 L2 状态的 UCIe Module 比 L1 睡眠程度更深、功耗更低。L1 可以直接退出到 MBTRAIN 状态,免去 SBINIT 及 MBINIT 的过程,但 L2 只能退出到 RESET 状态,重新进行链路的初始化。
TrainError:链路训练失败后进入该状态。

在 PHY 的初始化及训练过程中,Sideband、Mainband 是分开进行初始化和训练的。首先对 Sideband 进行初始化,使 Sideband 进入正常工作状态,便于后续初始化及训练过程中在 UCIe Link 上传递 Sideband Msg;然后进行 Mainband 初始化,UCIe Link 两侧的 Module 进行参数交换及协商、链路修复等工作,使 Mainband 能够工作在最低速(4 GT/s)。

2 AXI的特性? 通道之间有依赖关系吗? master和slave的valid和ready关系? 写数据可以优先于写地址吗?

AXI协议是基于burst突发的,并定义五个独立的事务通道;地址通道携带者控制信息,用于描述传输数据的性质;五个独立通道都由一组信息信号、以及提供双向握手机制的VALID和READY信号组成。
基本信号表示:

  • Master使用VALID信号来显示信道上的addr、data或ctrl信息何时可用。
  • Slave使用READY信号来显示它何时可以接受信息。
  • 读数据通道和写数据通道还包括LAST信号,以指示事务中最后数据项的传输。

在这里插入图片描述

主要特性:

  • 分离的地址/控制和数据阶段。
  • 使用基于突发的事务,只需起始地址发出。(Burst不得跨4KB边界,防止跨越Slave边界)
  • 支持发布多个超前地址(outstanding),因为控制和数据通道是分离的,地址的请求可以不等上一次的数据回来就可以继续发送;
    具体一点来说,当Master访问Slave时,可以不等待上一笔操作完成,就发下一个操作,这样Slave在控制流的处理上就可以流水起来,提高了传输速度,这就叫Outstanding。
  • 支持完成乱序事务(out-of-order),因为ID号。

握手依赖包括不同通道之间的依赖关系、以及同一通道中不同信号之间的依赖关系。首先记住一点:VALID和READY之间没有依赖关系,谁先谁后都可以,但是源端拉高VALID后必须保持住,直到终端拉高READY。

可以先有写数据,再有写地址。必须先有写数据,再有写响应。

3 什么是cache的hit和miss?

Cache用于加速数据访问。缓存的工作原理是利用局部性原理(Locality Principle),即程序在执行过程中往往会频繁访问某些数据或指令。通过将这些频繁访问的数据或指令存储在缓存中,可以显著提高系统的性能。
cahce line Size是cache的基本单位,从主存向cache迁移数据都是按照linesize为单位替换的。
Cache Hit:发生在当处理器请求的数据或指令已经在缓存中时。具体来说,当处理器需要读取或写入某个数据项时,它会首先检查缓存中是否存在该数据项。如果存在,则认为发生了 Cache Hit,处理器可以直接从缓存中读取或写入数据,而不需要访问较慢的主内存。
Cache Miss:

模拟缓存hit和miss的简单C代码

#include <stdio.h>
#include <stdlib.h>#define CACHE_SIZE 8       // 缓存行数
#define BLOCK_SIZE 4       // 每个块的大小(字)
#define MEMORY_SIZE 64     // 主内存大小(字)typedef struct {int valid;            // 有效位int tag;              // 标签int data[BLOCK_SIZE]; // 数据块
} CacheLine;CacheLine cache[CACHE_SIZE];// 初始化缓存
void init_cache() {for (int i = 0; i < CACHE_SIZE; i++) {cache[i].valid = 0;cache[i].tag = -1;for (int j = 0; j < BLOCK_SIZE; j++) {cache[i].data[j] = 0;}}
}// 计算索引和标签
void calculate_index_tag(int address, int *index, int *tag) {*index = (address / BLOCK_SIZE) % CACHE_SIZE;*tag = address / (BLOCK_SIZE * CACHE_SIZE);
}// 访问缓存
int access_cache(int address, int value, int write) {int index, tag;calculate_index_tag(address, &index, &tag);if (cache[index].valid && cache[index].tag == tag) {// Cache Hitprintf("Cache Hit at address %d\n", address);if (write) {cache[index].data[address % BLOCK_SIZE] = value;printf("Data written to cache: %d\n", value);} else {printf("Data read from cache: %d\n", cache[index].data[address % BLOCK_SIZE]);}return 1;} else {// Cache Missprintf("Cache Miss at address %d\n", address);if (!write) {// 从主内存读取数据到缓存int block_start = (address / BLOCK_SIZE) * BLOCK_SIZE;for (int i = 0; i < BLOCK_SIZE; i++) {cache[index].data[i] = block_start + i; // 模拟从主内存读取数据}cache[index].valid = 1;cache[index].tag = tag;printf("Data loaded into cache: ");for (int i = 0; i < BLOCK_SIZE; i++) {printf("%d ", cache[index].data[i]);}printf("\n");printf("Data read from cache: %d\n", cache[index].data[address % BLOCK_SIZE]);} else {// 将数据写入缓存cache[index].data[address % BLOCK_SIZE] = value;cache[index].valid = 1;cache[index].tag = tag;printf("Data written to cache: %d\n", value);}return 0;}
}int main() {init_cache();// 测试访问access_cache(0, 10, 1);  // 写入地址0,值为10access_cache(0, 0, 0);   // 读取地址0access_cache(4, 20, 1);  // 写入地址4,值为20access_cache(4, 0, 0);   // 读取地址4access_cache(8, 30, 1);  // 写入地址8,值为30access_cache(8, 0, 0);   // 读取地址8access_cache(0, 0, 0);   // 读取地址0 (再次)return 0;
}

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

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

相关文章

html|本地实现浏览器m3u8播放器,告别网络视频卡顿

前言 网络上经常是以m3u8文件传输视频流的 &#xff0c;但是有时网络慢往往导致视频播放卡顿。于是我在想能不能先下载然后再播放呢&#xff1f;于是尝试下载然后实现本地播放m3u8视频。 正文 1.找到网络视频流的m3u8连接 一般在浏览器按F12就可以看到有请求视频流的连接。 …

交互开发---测量工具(适用VTK或OpenGL开发的应用程序)

简介&#xff1a; 经常使用RadiAnt DICOM Viewer来查看DICOM数据&#xff0c;该软件中的测量工具比较好用&#xff0c;就想着仿照其交互方式自己实现下。后采用VTK开发应用程序时&#xff0c;经常需要开发各种各样的测量工具&#xff0c;如果沿用VTK的widgets的思路&#xff0c…

uniapp -- 实现页面滚动触底加载数据

效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</

导游现场面试需要注意的问题

今天给大家带来一些导游现场面试需要注意的问题&#xff0c;大部分的城市导游考试已经考完了&#xff0c;但是还有一些城市的十二月份才考&#xff0c;有需要的朋友们赶紧来看&#xff0c;有备无患。 01、做好充足准备 认真准备做好每个景点的讲解介绍&#xff0c;不要抱有侥幸…

【ubuntu】将Chroma配置为LINUX服务

Chroma是一个轻量级向量数据库。既然是数据库&#xff0c;那么我希望它是能够长时间运行。最直接的方式是配置为service服务。 可惜官方没有去提供配置为服务的办法&#xff0c;而鄙人对docker又不是特别感冒。所以自己研究了下chroma配置为服务的方式。 系统&#xff1a;ubu…

PageHelper自定义Count查询及其优化

PageHelper自定义Count查询及其优化 文章目录 PageHelper自定义Count查询及其优化一&#xff1a;背景1.1、解决方法 二&#xff1a;利用反射判断请求参数是否有模糊查询2.1、分页不执行count2.2、思路2.3、代码示例 三&#xff1a;自定义COUNT查询SQL(只适用于单表)3.1、局限性…

TPAMI 2023:When Object Detection Meets Knowledge Distillation: A Survey

摘要 目标检测&#xff08;Object Detection&#xff0c;OD&#xff09;是计算机视觉中的一项关键任务&#xff0c;多年来涌现出了众多算法和模型。尽管当前 OD 模型的性能有所提升&#xff0c;但它们也变得更加复杂&#xff0c;由于参数规模庞大&#xff0c;在工业应用中并不…

ZED相机应用

下载SDK wget https://stereolabs.sfo2.cdn.digitaloceanspaces.com/zedsdk/3.6/ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run 安装 ./ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run skip_python 测试 cd /usr/local/zed/tools ls ZED_Calibration ZED_Depth_Viewer ZED_Diagnostic ZED_E…

农业园区气象站

农业园区气象站是一种专为农业生产和科研设计的气象监测设备&#xff0c;它集成了多种传感器和技术&#xff0c;用于实时、准确地监测和记录农业园区内的气象数据。以下是农业园区气象站的主要功能和用处&#xff1a; 一、主要功能 实时监测&#xff1a;农业园区气象站能够实时…

编译问题 fatal error: rpc/rpc.h: No such file or directory

在编译一些第三方软件的时候&#xff0c;会经常遇到一些文件识别不到的问题&#xff0c;这里整理下做个归总。 目前可能的原因有&#xff08;排序分先后&#xff09;&#xff1a; 文件不存在&#xff1b;文件存在但路径识别不了&#xff1b;…… 这次以常见的编译lmbench测试…

设计模式的艺术读书笔记

设计模式的艺术 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建的艺术创建型模式单例模式饿汉式单例与懒汉式单例的讨论通过静态内部类实现的更好办法 简单工厂模式工厂方法模式重载的工厂方法工厂方法的隐藏工厂方…

element-plus的el-tree的双向绑定

el-tree改造了下 可选可取消 有默认值 不包含父级id&#xff08;也可打开注释 包含父级id&#xff09; 默认展开 点击节点也可触发选择 节点内容自定义 <template><div class"absolute"><el-scrollbar class"pall"><div class"…

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(三)

目录 ARC规则 概要 所有权修饰符 __strong修饰符 __weak修饰符 __unsafe_unretained修饰符 __autoreleasing修饰符 ARC规则 概要 “引用计数式内存管理”的本质部分在ARC中并没有改变&#xff0c;ARC只是自动地帮助我们处理“引用计数”的相关部分。 在编译单位上可以…

MySQL-DQL之数据多表操作

文章目录 一. 多表操作1. 表与表之间的关系2. 外键约束3. 创建外键约束表(一对多操作) 二. 多表查询1. 多表查询① 交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]&#xff08;不要记住&#xff09;② 交集运算&#xff1a;内连接查询(join)③ 差集运算&#xff1a;外…

《经验分享 · 软考系统分析师》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

宝塔面板Linux版本常用命令

宝塔面板&#xff08;BT Panel&#xff09;是一款简单易用的服务器管理工具&#xff0c;广泛应用于Linux服务器的管理。尽管宝塔提供了图形化界面&#xff0c;但在某些情况下&#xff0c;使用命令行操作更加高效。以下是宝塔面板Linux版本常用的命令&#xff0c;包括安装、管理…

ElasticSearch - 理解doc Values与Inverted Index倒排索引

文章目录 概述倒排索引&#xff1a;从图书馆的索引卡片谈起倒排索引的工作原理 docValues&#xff1a;从数据库的列式存储说起docValues的工作原理 docValues与倒排索引的对比两者的联系&#xff1a;组合使用&#xff0c;优化搜索与分析 小结 概述 在使用 Elasticsearch 进行大…

Acer宏碁Swift3笔记本S40-20,SF314-56G原厂Win10系统工厂模式安装包,带Recovery恢复还原

适用电脑型号&#xff1a;S40-20、SF314-56、SF314-56G(原装OEM预装系统) 链接&#xff1a;https://pan.baidu.com/s/1q77Br-hcmn9iJraGVVKQ7Q?pwdrw1r 提取码&#xff1a;rw1r Acer宏碁原装出厂windows10系统自带所有驱动、Office办公软件、出厂主题壁纸、系统属性专属联…

Python跳动的爱心

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

极验决策引擎如何凭借独特优势,弯道超车传统风控?

前言 市场上的规则决策引擎产品众多&#xff0c;但大多局限于IP、设备、账号等层面&#xff0c;提供的是现成的风控标签和规则。然而&#xff0c;真正的风控&#xff0c;需要的不仅仅是标签和规则。 极验的业务规则决策引擎与众不同&#xff0c;这款决策引擎以界面流程编排为…