如何将32位数据转化1bit valid,1bit modified,20bit tag, 2bit index, 8 bit数据

以下是如何将32位数据转化为 1bit valid, 1bit modified, 20bit tag, 2bit index, 8bit 数据 的代码实现和解释。


数据结构布局

我们希望将 32 位数据分成以下几部分:

  • 1bit valid: 数据是否有效(0 或 1)。
  • 1bit modified: 数据是否被修改(脏位,0 或 1)。
  • 20bit tag: 缓存标记,用于标识不同的内存块。
  • 2bit index: 索引,用于确定属于哪个缓存 set。
  • 8bit 数据: 实际的数据。

32 位数据分布示意图:

[31] valid
[30] modified
[29:10] tag (20 bits)
[9:8] index (2 bits)
[7:0] data (8 bits)

转换代码

以下是 C 语言实现代码:

#include <stdint.h>
#include <stdio.h>// 模拟 32 位数据分解为字段
void decodeCacheLine(uint32_t cache_line) {// 提取各个字段uint8_t valid = (cache_line >> 31) & 0x1;        // 提取第 31 位(valid bit)uint8_t modified = (cache_line >> 30) & 0x1;     // 提取第 30 位(modified bit)uint32_t tag = (cache_line >> 10) & 0xFFFFF;     // 提取第 29-10 位(20 bits tag)uint8_t index = (cache_line >> 8) & 0x3;         // 提取第 9-8 位(2 bits index)uint8_t data = cache_line & 0xFF;                // 提取第 7-0 位(8 bits 数据)// 输出解析结果printf("Valid: %u\n", valid);printf("Modified: %u\n", modified);printf("Tag: 0x%X\n", tag);printf("Index: %u\n", index);printf("Data: 0x%X\n", data);
}int main() {// 示例缓存行 32 位数据uint32_t cache_line = 0b10100000000000000001100000101010;// 解析缓存行decodeCacheLine(cache_line);return 0;
}

示例解析

假设 32 位缓存行数据为:

cache_line = 0b10100000000000000001100000101010
  1. Valid:

    • 位于最高位(31 位)。
    • 提取:(cache_line >> 31) & 0x1
    • 结果:1(有效)。
  2. Modified:

    • 位于第 30 位。
    • 提取:(cache_line >> 30) & 0x1
    • 结果:0(未修改)。
  3. Tag:

    • 位于第 29 到第 10 位(共 20 位)。
    • 提取:(cache_line >> 10) & 0xFFFFF
    • 结果:0x00003
  4. Index:

    • 位于第 9 到第 8 位(共 2 位)。
    • 提取:(cache_line >> 8) & 0x3
    • 结果:0x2
  5. Data:

    • 位于最低的 8 位(第 7 到第 0 位)。
    • 提取:cache_line & 0xFF
    • 结果:0x5A

输出

运行代码将输出:

Valid: 1
Modified: 0
Tag: 0x3
Index: 2
Data: 0x5A

总结

这段代码通过移位操作和按位与操作,将 32 位数据拆分为 1bit valid,1bit modified,20bit tag,2bit index 和 8bit 数据。你可以使用类似的方法解析其他的缓存行格式或设计更复杂的模拟器。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Iview DatePicker 仅允许选择当前月份及以后的月份

iview DatePicker之前月份禁用且下月可用 html代码 <DatePicker type"month" :options"options4" :value"dialogForm.estimatedStartTimeWithCreate" on-change"monthTime($event, loadDateStart)" placeholder"请选择时间&q…

Redis 内存管理

参考&#xff1a;面试官&#xff1a;为什么 Redis 不立刻删除已经过期的数据&#xff1f; 目录 1.Redis 给缓存数据设置过期时间有什么用&#xff1f; 2.Redis 是如何判断数据是否过期的呢&#xff1f; 3.Redis 过期 key 删除策略了解么&#xff1f; 4.大量 key 集中过期怎…

【IC每日一题:SVA简介】

IC每日一题&#xff1a;SVA简介 1 断言概念1.1 断言优势&#xff1b;1.2 断言类型1.2.1 立即断言1.2.2 并行断言1.2.3 并发断言Demo 2 SVA语法2.1 蕴含操作符&#xff1a;|-> 和 ->2.1.1 蕴含操作符 |>2.1.2 蕴含操作符|-> 2.2 延时操作符2.2.1 ##n 操作符 2.3 重复…

深度学习之One Stage目标检测算法2

我们将对单次目标检测器&#xff08;包括SSD系列和YOLO系列等算法&#xff09;进行综述。我们将分析FPN以理解多尺度特征图如何提高准确率&#xff0c;特别是小目标的检测&#xff0c;其在单次检测器中的检测效果通常很差。然后我们将分析Focal loss和RetinaNet&#xff0c;看看…

【MySQL】优化方向+表连接

目录 数据库表连接 表的关系与外键 数据库设计 规范化 反规范化 事务一致性 表优化 索引优化 表结构优化 查询优化 数据库表连接 表的关系与外键 表之间的关系 常见表关系总结 一对一关系&#xff1a;每一条记录在表A中对应表B的唯一一条记录&#xff0c;反之也是&a…

SHELL笔记(概念+变量)

shell 概念 Shell 是一个命令行解释器&#xff0c;它充当用户与操作系统内核之间的桥梁。用户在 Shell 环境下输入各种命令&#xff0c;Shell 负责接收并分析这些命令&#xff0c;然后将其转换为内核能够理解和执行的系统调用。通过这种方式&#xff0c;用户可以便捷地操作计算…

统信UOS开发环境支持Golang

UOS为Golang开发者提供了各种编辑器和工具链的支持,助力开发者实现高质量应用的开发。 文章目录 一、环境部署Golang开发环境安装二、代码示例Golang开发案例三、常见问题1. 包导入错误2. 系统资源限制一、环境部署 Golang开发环境安装 golang开发环境安装步骤如下: 1)安装…

web前端开发--盒子属性

1、设置背景图像固定 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>设置背景图像固定</title><style type"text/css">/*p{background-attachment: scroll;/*fixed固定*//*随元素滚动还是固定*/}&…

Python数据分析NumPy和pandas(三十五、时间序列数据基础)

时间序列数据是许多不同领域的结构化数据的重要形式&#xff0c;例如金融、经济、生态学、神经科学和物理学。在许多时间点重复记录的任何内容都会形成一个时间序列。许多时间序列是固定频率的&#xff0c;也就是说&#xff0c;数据点根据某些规则定期出现&#xff0c;例如每 1…

前端开发之打印功的使用和实例(vue-print-nb)

通过插件来进行实现 前言效果图1、安装插件vue2vue32、 引入Vue项目2、 使用2.1、在项目中创建按钮并且使用v-print绑定绑定打印事件2.2、编写要打印的内容,给内容附加唯一的id2.3、绑定的时间的方法和参数3、整体代码(此代码是通过vue3来进行实现的但是逻辑都是一样的)前言…

使用Web Animations API实现复杂的网页动画效果

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂…

分享一个mysql-sql优化经验 in (xxx)的优化【 in(集合)改成not in(反集合) 】

一、优化前 如下sql&#xff0c;直接执行时间需要18.341秒 二、优化后 将 in(集合) 改成 not in(反集合)&#xff0c;如下图&#xff0c;执行性能提升至少4倍&#xff0c;需要4.643秒&#xff0c;并且查询结果不变 三、原因分析 为什么速度会变快那么多&#xff1f; in (集…

传感器页面、屏幕刷新任务学习

一、user_SensorPageTask 传感器页任务 ​ /* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" #include "user_ScrRenewTask.h" #include "user_SensorPageTask.h" …

BigQuery中jobUser和dataViewer的角色有什么不同

真题实战 Scenario: Your company utilizes BigQuery as the enterprise data warehouse, with data spread across multiple Google Cloud projects. Queries on BigQuery must be billed to a specific project, separate from where the data resides. Users should have q…

AWTK-WIDGET-WEB-VIEW 实现笔记 (3) - MacOS

MacOS 上实现 AWTK-WIDGET-WEB-VIEW 有点麻烦&#xff0c;主要原因是没有一个简单的办法将一个 WebView 嵌入到一个窗口中。所以&#xff0c;我们只能通过创建一个独立的窗口来实现。 1. 创建窗口 我对 Object-C 不熟悉&#xff0c;也不熟悉 Cocoa 框架&#xff0c;在 ChatGPT…

fiddler抓包24_App流量统计

​课程大纲 使用Fiddler可以实现“APP流量统计”功能。具体操作如下&#xff1a; ① 选中app所有请求&#xff0c;点击右侧菜单标签“Statistics”。 ② 查看请求统计数据&#xff0c;即APP流量统计&#xff1a;“Bytes Sent”&#xff08;发送的字节数&#xff09;、“Bytes R…

小白投资理财 - 解读 CCI

小白投资理财 - 解读 CCI 什么是 CCICCI 计算方法CCI 指标的使用首先超买和超卖接下来是背离 CCI 缺点总结 顺着河流能够渡河&#xff0c;逆向河流只会挂彩&#xff0c;今天就来了解一下 CCI&#xff08;Commodity Channel lndex&#xff09;中文称之为顺势指标 什么是 CCI 它…

2024 RISC-V中国峰会 安全相关议题汇总

安全之安全(security)博客目录导读 第四届 RISC-V 中国峰会&#xff08;RISC-V Summit China 2024&#xff09;于8月21日至23日在杭州成功举办。此次峰会汇聚了 RISC-V 国际基金会、百余家重点企业及研究机构&#xff0c;约3000人线下参与&#xff0c;并在19日至25日间举办了超…

Linux守护Pythom脚本运行——Supervisor学习总结

Supervisor能做什么&#xff1f; 在工作中有时会遇到在Linux服务器上编写各种脚本来实现日志的推送、数据的传输、流量的监控等&#xff0c;这些脚本在整个系统运行中也需要和其他服务端应用程序一样持续且稳定运行&#xff0c;为了达到这种目的就需要使用进程守护工具来对正在…

机器学习基础05_随机森林线性回归

一、随机森林 机器学习中有一种大类叫集成学习&#xff08;Ensemble Learning&#xff09;&#xff0c;集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。集成算法大致可以分为&#xff1a;Bagging&#xff0c;Boosting 和 Stacking…