华中科技大学-Cache直接相联映射

实验目的:

1. 通过实验掌握下列知识:
2. 掌握cache实现的三个关键技术:数据查找,地址映射,替换算法
3. 熟悉译码器,多路选择器,编码器,寄存器的使用
4. 在Logisim平台中实现cache直接相联映射机制

设计思路:

Cache实验中提供了一个自动测试框架,如图所示,需要你实现绿色的cache子电路,注意为了简化实验,这里cache是一个只读的cache,类似CPU中的指令cache,不需要处理一致性问题和写入逻辑,cache一个数据块是四个字节。这个测试电路可以对实现的cache模块进行自动测试,判断正确性,并给出最终的命中率,右边那么这个是块交换逻辑,负责cache与二级存储器之间的数据交换 ,数据交换是以块为单位二级存储器以字节为单位进行访问,由于二级存储器相比cache慢很多,所以块交换逻辑要多次访问二级存储器得到一个数据块传递给cache,数据块通过BlkDin这根数据线传输给cache,准备好一个数据块需要若干个时钟周期这和实际cache类似。
你不需要过多的关心块交换内部的逻辑实现,只需要了解cache模块在发生缺失的时候,也就是这个Miss输出信号为1时候块交换逻辑开始进行工作,经过若干个时钟以后会将数据块通过blkin传送给cache,同时将blkready信号置1,表示块数据就绪,这是块数据准备好的应答信号。cache接收到这个BlkReady的信号以后,就可以将整块的数据从BlkDin写入到对应的cache行中,当写入完成后,由于数据变成命中,自然Miss信号会消失左侧模块主要是一个时钟计数器,依次从trace存储器中取出不同访问地址,访问数据。这个地址送到cache后,cache应该判断命中或缺失,并给出缺失信号。如果命中,相关数据可以立即输出到Dataout端,系统会自动累加计算校验和,这是cache访问只需要一个时钟周期,。如果缺失Miss信号为高电平,二级存储器开始漫长的访问数据块的操作,整个操作需要多个时钟周期,而计数器会停止工作等待数据命中,具体实现逻辑在这里,控制计数器的使能端,另外这里还有一个running信号,是由这边比较器产生的,控制内存访问次数,这里计数器停止工作等待命中和CPU在缺失时不能工作一样,当数据块ok后讲blkready置1,cache模块在时钟到来时讲数据写入合适 的cache行中,写入后cache命中。 我们可以利用ctrl+k驱动时钟自动运行,系统会进行自动测试,最终cache的命中率会显示在这里
在这里插入图片描述

具体逻辑实现:

假设cache有8行,每个数据块包括四个字,cache行中的查找信息包括valid和主存块地址标记字段主存地址,可细分为标记字段tag和行索引字段index和字偏移地址offset3部分,其中标记字段tag就是区地址首先需要实现数据查找的功能,对于直接相联映射,由于一个主存块只能对应到cache中的特定行,所以查找算法比较简单,我们只需要到指定cache行中查看valid和标记位即可知道数据是否命中从硬件逻辑的角度,只需要将行索引字段index送入到一个行索引译码器,得到8个行译码输出L0-L7
,其中输出为高电平的那一行就是指定的cache行,利用8个行译码输出信号控制8个三态门将所有行的有效位和标记字段输出到比较器,根据译码器的定义,只有当前主存地址对应的那一行的数据才会输出,将valid位和1进行比较,将tag位和主存地址中的tag进行比较,如果相等表示命中,否则表示缺失,对于直接相连映射的查找逻辑,这里只需要一个行译码器和一个比较器。
另外还可以用这8路译码信号控制cache块数据的输出,将所有cache行的数据块都通过三态门输出到数据总线slotdata上,三态门的控制端就是这8个译码信号,命中时,命中行的数据会输出到slotdata,具体选择数据块中的哪一个字由主存地址中的offset字段进行选择,这里可以利用一个多路选择器进行选择,注意命中信号直接连接多路选择器的使能端,缺失时输出高阻态。
最后再来看看整个cache的读取流程,给出一个主存地址,经过行索引译码器,假设L1译码输出,则第一行的数据,L0位高电平,第零行命中,L0控制对应的三态门将第零行的块数据输出到SlotData,再利用主存地址中的字偏移地址2选择当前块中的第2个字输出,就完成了cache的读操作。Cache读命中时间最短,现代cpu中取指令取操作数都是从cache得到,通常在一个时钟周期内完成,所以cache性能直接决定了cpu性能。
在这里插入图片描述在这里插入图片描述

思考与体会:

本次实验认识和掌握Cache直接相连的原理及其设计方法以及掌握Cache控制器的实现方法,代码实现方法。
对于cache的理解更加深入,工作的机制和原理比较清晰。
其中遇到了比较多的问题,逐一上网查询解决办法,并逐个进行尝试,并最终得到了解决,对于个人的信心有极大的提高。最后总的来说比较完整的完成实验。

具体资源字啊这里:

https://download.youkuaiyun.com/download/qq_46037206/87340347
### 深度相机与彩色相机对齐方法 (D2C) #### 理论基础 为了实现深度相机与彩色相机之间的有效对齐,需要考虑两者的几何关系和时间同步。校准过程主要包括内外参数估计、畸变矫正以及最终的空间变换矩阵求解[^1]。 #### 实现步骤 ##### 数据收集 获取一组由同一场景下的深度图像和对应的RGB图像组成的配对样本集。这些样本应尽可能覆盖整个视场范围,并包含不同距离和平面角度的对象实例。 ##### 内外参标定 利用标准棋盘格或其他已知模式作为参照物来执行单独的内部参数(焦距f_x,f_y; 主点坐标c_x,c_y)和外部旋转平移向量(R,t) 的估算工作。这一步骤可以借助OpenCV库中的`cv::calibrateCamera()`函数完成[^3]。 ```cpp // C++ code snippet using OpenCV for camera calibration std::vector<std::vector<cv::Point3f>> objectPoints; std::vector<std::vector<cv::Point2f>> imagePoints; bool success = cv::calibrateCamera(objectPoints, imagePoints, imageSize, K, distCoeffs, rvecs, tvecs); if (!success){ std::cerr << "Calibration failed." << std::endl; } ``` ##### 畸变修正 根据上一步得到的结果调整原始图片以消除镜头引起的失真效应。具体来说就是应用反向映射算法将理想位置上的像素值重新分配给实际观测到的位置。 ##### 变换矩阵计算 当两个摄像机都经过充分校正之后,则可通过共同观察某些特征点的方式建立两者间的刚体转换模型——即寻找能够使一对对应点之间误差最小化的R|t组合。该操作同样可以在OpenCV框架下轻松达成: ```python import numpy as np import cv2 # Assuming we have matched points from both cameras stored in pts_depth and pts_rgb lists. E, mask = cv2.findEssentialMat(pts_depth, pts_rgb, focal=K[0][0], pp=(K[0][2], K[1][2])) _, R, t, _ = cv2.recoverPose(E, pts_depth, pts_rgb, focal=K[0][0], pp=(K[0][2], K[1][2])) transformation_matrix = np.hstack((R, t)) print(f"Transformation matrix:\n{transformation_matrix}") ``` 上述代码片段展示了如何使用Python版本的OpenCV来进行本质矩阵E及其分解后的旋转矩阵R和平移矢量t的计算。最后构建了一个4×4大小的整体变换阵列用于后续处理阶段。 #### 应用案例 一旦完成了以上所有准备工作,在实际部署过程中就可以依靠预先训练好的神经网络或者其他机器学习工具辅助完成更复杂的任务,比如三维重建或是增强现实效果渲染等[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Master乔治

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值