【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.rhkb.cn/news/488600.html

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

相关文章

PPT技巧:将幻灯片里的图片背景设置为透明

在PPT中添加了图片&#xff0c;想要将图片中的背景设置为透明或者想要抠图&#xff0c;有什么方法吗&#xff1f;今天分享两个方法。 方法一&#xff1a; 添加图片&#xff0c;选中图片之后&#xff0c;点击【图片格式】功能&#xff0c;点击最左边的【删除背景】 PPT会自动帮…

池化在深度学习中增强特征的作用

目录 ​编辑 引言 池化的基本作用与特征降维 池化的定义与目的 池化操作的实现 提取关键特征与计算效率的提升 池化对特征提取的影响 平均池化的应用 提高特征鲁棒性与过拟合的防止 池化对模型鲁棒性的贡献 池化防止过拟合的原理 增强多级特征与特征表达能力的提升…

分布式 Raft算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Raft算法 & 总结》《分布式 & Raft算法 & 问题》 参考文献 《Raft一致性算法论文译文》《深入剖析共识性算法 Raft》 简介 Raft 木筏是一种基于日志复制实现的分布式容错&一致性算法。在Raft算法…

基于强化学习Q-learning算法的栅格地图路径规划算法,可以更改地图大小及起始点,可以自定义障碍物,MATLAB代码

Q-learning是一种无模型的强化学习算法&#xff0c;它允许智能体&#xff08;agent&#xff09;在与环境&#xff08;environment&#xff09;交互的过程中学习如何通过执行动作&#xff08;actions&#xff09;来最大化累积奖励&#xff08;cumulative rewards&#xff09;。 …

JAVA学习笔记——第十一章 枚举和注解

一、引出枚举类 1.先看一个需求demo package com.hspedu.enum_;public class Enumration01 {public static void main(String[] args) {Season Spring new Season("春天", "温暖");Season Summer new Season("夏天", "炎热");Seas…

腾讯微信Android面试题及参考答案(多张原理图)

Android 应用的启动流程如下&#xff1a; 当用户点击应用图标时&#xff0c;首先会通过 Launcher&#xff08;桌面启动器&#xff09;来响应这个操作。Launcher 本身也是一个 Android 应用&#xff0c;它运行在系统中&#xff0c;负责管理和显示桌面上的图标等信息。 系统会检查…

SQL server学习02-使用T-SQL创建数据库

目录 一&#xff0c; 使用T-SQL创建数据库 1&#xff0c;数据库的存储结构 2&#xff0c;创建数据库的语法结构 1&#xff09;使用T-SQL创建学生成绩管理数据库 二&#xff0c;使用T-SQL修改数据库 1&#xff0c;修改数据库的语法结构 1&#xff09;修改学生成绩管理数…

python web练习案例:基于表单类的商品管理(修改并删除商品信息)

目录 1、修改商品信息 &#xff08;1&#xff09;修改show.html页面&#xff0c;增加 修改 栏 &#xff08;2&#xff09;创建 update.html 网页&#xff0c;继承 add.html 模板 &#xff08;3&#xff09;定义视图函数 &#xff08;4&#xff09;定义路由 (5) 浏览器查看 …

前端成长之路:CSS(1)

在前端三件套中&#xff0c;CSS的主要是用于美化网页、进行页面布局的。 HTML的局限性 HTML是一个非常单纯的语言&#xff0c;它只关心内容的语义&#xff1a; 比如看见h1标签&#xff0c;就表明这是一个大标题、看见p标签&#xff0c;就表明这是一个段落、看见img标签&#…

【开源】基于SpringBoot框架的房屋租赁系统 (计算机毕业设计)+万字毕业论文 T020

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

hbuilder 本地插件配置

插件存放路径&#xff0c;项目根目录nativeplugins下&#xff0c;没有就新建。 aar文件存放路径\nativeplugins\module\android package.json存放路径\nativeplugins\module\ 配置package.json文件 { "name": "module", "id": "modu…

内圆弧转子泵绘制工具开发

接着上期的Gerotor 泵的话题继续。最近有小伙伴找我开发一个内圆弧摆线泵的计算绘制工具&#xff0c;也就是把上次计算绘制的过程做成一个桌面应用工具&#xff0c;这样用起来会更方便、效率更高。那究竟是什么样的工具呢&#xff1f;一起来看看&#xff1a; 前面不是已经有了上…

(持续更新)linux网络编程中需要注意的内核参数与网络机制

目录 零、基本说明 一、内核参数 二、相关机制 1、GRO &#xff08;1&#xff09;适用场景 &#xff08;2&#xff09;优缺点 &#xff08;3&#xff09;相关操作 2、Nagle 算法 &#xff08;1&#xff09;基本规则 &#xff08;2&#xff09;优缺点 &#xff08;3&…

转:Quad Remesher 1.0.1使用说明(中文)

Blender 重拓扑插件&#xff0c;使用起来相当简单。不仅能自定义控制局部面数&#xff0c;还能根据不同的材质球来检测硬边进行重拓扑。 QuadRemesher2023版maya报错问题解决方案 马奇诺 编辑于 2023年05月11日 04:39 收录于文集 ChadTips_Maya 1篇 新版maya导入QuadRemes…

探索级联CMOS运算放大器的设计:提升电源抑制比(PSRR)与共模输入范围

在模拟电子学领域&#xff0c;运算放大器&#xff08;Op Amp&#xff09;作为信号放大的核心组件&#xff0c;其性能直接影响到整个电路的稳定性和效率。随着技术的进步&#xff0c;对运算放大器的性能要求也在不断提高&#xff0c;尤其是在电源抑制比&#xff08;PSRR&#xf…

单元测试SpringBoot

添加测试专用属性 加载测试专用bean Web环境模拟测试 数据层测试回滚 测试用例数据设定

物联网中的数据收集:MQTT实现的比较

本篇论文的标题是《Data collection in IoT: A comparison of MQTT implementations》&#xff0c;中文可以翻译为《物联网中的数据收集&#xff1a;MQTT实现的比较》。论文由Erik Gustafsson和Ruben Jarefors撰写&#xff0c;导师是Jalal Maleki&#xff0c;评审员是Rita Kovo…

二叉树序列相关算法题|先序序列第k节点|满二叉树先序序列转后序序列(C)

先序序列第k节点的值 假设二叉树采用二叉链存储结构存储&#xff0c;设计一个算法&#xff0c;求先序遍历序列中第k(1<k<二叉树中的节点个数)个节点的值 算法思想 设置一个全局遍历i(初值为1)来表示进行先序遍历时&#xff0c;当前访问的是第几个节点。然后可以借用先…

Hyperbolic Representation Learning: Revisiting and Advancing 论文阅读

Hyperbolic Representation Learning: Revisiting and Advancing 论文地址和代码地址1 介绍2 背景知识2.1 黎曼几何与双曲空间(RiemannianGeometry and Hyperbolic Space)2.2 双曲浅层模型2.3 双曲神经网络&#xff08;HNNs&#xff09;2.4 双曲图卷积神经网络&#xff08;HGCN…

牛客刷题(总结)

目录 <1> <2> 思路 <1> 给你 4 个整数 a,b,c,d&#xff0c;你需要回答 是奇数还是偶数。 #include<stdio.h> #define int long long int f(int a) {if(a%20){return 0;}else{return 1;}} signed main() {int a,b,c,d;scanf("%lld %lld %lld %ll…