当前位置: 首页 > news >正文

6.2【A】

DEBUG

就是说,对于一次读请求,当AR通道完成读地址的握手后,slave端开始查找,查找的过程中AR通道就空了;然后当slave查找完毕的时候,查找到的数据不知道返回给谁,即返回到的地址是哪是吧?

那原来的处理逻辑是怎样的?

什么是outstanding?以及当R通道返回读数据后,那怎么知道这个数据该写到cpu的哪里呢?

所以现在修改的逻辑,就是对cpu araddr,原来是wire类型,现在改成reg类型,这样的话就能保持值是吧;即AR握完手后,就在R通道上等待slave传回数据;当R通道传回数据,crossbar接收后,要根据锁存的reg,即这个请求对应的设备,返回到cpu?这里不是1x2的crossbar吗?所以不论哪个设备传回来的数据,不都是要返回到cpu?那锁存的到底什么,有什么用

3633,雷霆题

按开始时间+游玩时间排序,从小到大,最好的就是采取两个里面不冲突的方案

不过复杂度好像和on^2差不多

直接朴素的话,就是对于陆地的每种方案,算出其结束时间,然后再遍历水上的,判断是否冲突,最后取一个max

如果排序的话,可能就省去全部遍历的过程,就是找到第一个不冲突的即可,但这样排序的话,要排序四个数组,还是比较麻烦的,或者就是对下标进行一次排序即可

只对下标排序应该是可行的

但是这个判断不冲突的逻辑,其实也就是两个事件的区间不能有重合

先判断左端点,左端点小的那个,其右端点不能超过大的那个的左端点

这个测试点比较麻烦,因为一开始没想到,如果真的存在重叠时,那么第二个事务的开始时间就无法确定

不过处理比较简单,或者说巧,或者笨、直接?就是如果真的重叠的话,那么另一个事务的结束时间,就是下一个事务的开始时间

即第二个事务的起始时间,是max(FirstEnd,SecondStart)

这是固定第一个事务就必须在第一个完成为前提的,即如果第二个它开的很早,而且结束的也早,那么在这个前提下,也会使开始时间被强制延后到FirstEnd

所以在一个遍历,即i,j组合当中,要尝试让i和j的事务交替去成为那个被固定第一个要做的事

然后取他们当中结果的最小值

测试

cd ~/project/learn/cpu/LoongArchProject-iverilog
scripts/coe2hex.sh func_test/func_test/func/obj/inst_ram.coe build/axi_ram.hex
scripts/build_func.sh
vvp build/func_tb.vvp +loadmem

cache

意思就是说,原来是不管地址的形式,就是什么样的内存地址,都统一放进一个桶当中,然后查找的时候,就是用比较器去并行的查找桶里的所有数据,如果有,那就返回数据,否则就进行cache替换;然后直接映射就是说按地址样式,去把它分到不同的桶当中,比如32位的地址,如果把前4位当成桶标识,那么就会有2^4=16个桶,当来新地址后,就去对应的桶里去查找;

不过这样的话,还有剩余的28位,还是得知道一个桶里能放多少个数据,然后用那么多的比较器去并行的查找

那对于全相联,就是说它的比较器数量就是它能缓存的所有cache行的数量吗?即如果cache总共能放1024个数据,那全相联时,就需要1024个比较器

然后对于直接映射,它桶的数量取决于访存地址本身,也即必须是2^n个,即这样的话,cache只能存放2,4,8,16...等的数据,然后cpu来数据的时候,就是直接看比较的那个选取前几位地址,如果对应的cache栏位上放的是这个数据,那就是命中了,否则就没命中

什么叫字内字节偏移?一个方寸地址找到的不就一个字,即32位数据吗?也就是说现在拿来进cache的32位地址,就是在内存当中唯一对应一个32位的数据,就是1字,那“

  1. byte = addr[1:0] 用于字节/半字访问的偏移,尤其是 store 写掩码。”的说法是怎么来的?

什么是按字节编址?还有一种编址方式是什么,忘了,机制是什么?

‘那对于lw,sw等读写地址的请求,在一个访存地址只是对应其中一个字节,即8bit的话,那岂不是如果要获取32位数据,要发出4个地址?以及是否有可能lw在发起读请求时,对应的那个字节,不是要返回的数据的第一个Byte?比如第二个byte?这样会出问题吗

那如果是按字节编址的话,当按这个地址去内存取数据时,是怎么取的?是一个字节一个字节取?

对于cache,有2^5=32个桶,然后每个桶里,要存23位比较tag,有四路,即一个桶里要放四个数据

对于一路的情况,要23tag+1有效标志+1脏位=25控制Bit

然后对于这个地址所存的数据,就是1字,是4字节,32bit

也就是说,是要有25+32=57

那四路就是57*4=228位

然后一共有32个桶,所以占32*228的bit

所存储的数据量就是32*4

块大小为什么是固定的?就是说为什么32位的指令集,所对于的cache行,即cache和cpu交互时,交换的数据粒度就是128位?就是对应地址上的最后4位?

那完整的流程就是,先通过中间5位Index找到对应的桶,然后因为是4路,所以桶内放了4个数据,4个字,然后桶内并行地比较其前23位tag,现在每个cache line,就是一个cache块,是放了4个字,即4*32=128位?就是说,对比完23位tag后,锁定的是几个字?

一个桶内放的数据是什么?cache line ,cache块都是什么关系

就是说Index找到桶后,每个桶内放的都是cache line,然后因为是4路,所以每个桶里放的是4个cache line;先确定tag的位数,5位index确定的是桶的数量,即2^5=32个桶;然后按字节编址,当前是32位一个字,所以要用2位来表示字内偏移,即把1个字32位拆分出4块,每块都是一个字节,也就是每个访存地址都能唯一索引到一个字节;然后要保证是64B的cacheline,现在一个字是32位,4B,所以一个cache line要装16个字,所以需要2^4,即[5:2]位;那么最后tag位就是32-5-4-2=21位;通过并行比较tag找到可能存放数据的cache line之后,再串行比较cache line当中的word标识,来寻找cache line当中是否存在当前的数据吗?

就是说一个cache line,本身存放的就是地址连续的一段数据

那当发生未命中时,就是说是在桶内寻找时,那些tag都没有命中,所以就要去发生替换;选中某个cache line要替换时,如果是dirty,就要写回内存,否则就直接舍弃,被覆写;当要发生写回时,就是要把这个cache line开头的那个字开始,连续的那些字,都写进内存里;

那cache存储大小,首先是桶的数量,为2^index个;

然后是cache line的选择,即要放几个字,一个cache line要放2^word个字

最低两位,4个字节确定一个32位的字,

现在说是n路,所以每个桶里有n个cache line;

然后每个cache line里有2^word个,4B的字

所以一个桶的大小是n*2^word*4

然后一共有2^index个桶,所以cache的总大小是

n*2^word*2^index*4B

其中,n路是可以调的,一个cache line里的字的数量,即word是可以调的,

然后桶的数量index也是可以调的;

如果要充分利用开发板资源,该如何合理调整参数?

cache实现

这里是说,当时钟发生跳变时,在4个桶,每个桶里4个cacheline,然后每个cacheline里4个字,都要被读出来,即只读一个字的情况下,都要同时从所有cacheline里的所有字里出来,取16个字出来?

因为有2^5=32个桶,所以对于每个桶里的四路,即way0,way1,way2,way3,都要创建相应桶数量的个数

Cache状态机

这个就是cache命中时的情况,即

先是要以vaild和tag匹配,来得到watHit信号,确认出miss=0后,等进入寄存器逻辑,完成赋值

对于wen写使能,是要锁存的,在时序逻辑中,存在

使该时刻的组合逻辑算出来的写使能,锁存进wen_当中

wen计算的组合逻辑就是,判断命中了哪路,然后再看是该cacheline上的哪个字

不过对于cache的写入,我知道在a时刻,通过判断知道了要找的地址在cache当中,然后锁存保存了要写入数据的状态,然后在a时刻的下一个时刻,完成cache上实际数据的更改;不过dirty位不是在a+1时刻写的,而是在a时刻,即发现数据在cache上时就写的;

不过在a时刻结束时,锁存也使data_ok被锁存为1,也就说明cpu在a+1时刻就认为数据已经被写入了,但a+1时刻数据才要被写入,这样没问题吗

这个向内存发出的16Bcache line的读取具体是如何完成的?是按顺序发出的访问吗?即比如现在cpu访存的字是a,那么cache在Miss时,是先a,然后a+1,a+2,a+3的字这样?就是说期间是会一直等待,直到这个字被返回获得吗?会先发出请求,即不是等a返回响应后,而是在等待期间就直接发出a+1甚至a+2的请求;以及返回响应时,也可能不是按顺序的,a+1的先到达这样?

就是说要找的字是A的话,那么访存的那个第一个字不一定是A,而是看A所在的那个组,这是靠把最低4位全置0实现的

那对于AXI Burst的请求事务,就比如读,能否设计成不是按乱序返回的?即beat1可能会比0先到这样?如果这样设计,能否加速?即减少了顺序返回时等待的时间

对一个AXI burst 内部来说,通常不能让 beat1 比 beat0 先返回

优化TODO——cache早停

AXI Burst请求

什么是AXI burst请求?就是一次发出多次请求合并在一起的那种请求吗,即alen>1的那种请求吗?

周期

对于上升沿,比如有A,B都要在上升沿被修改,其中A要被改为c,然后B是要被改为A

即A在上升沿时,是组合逻辑算出来的值,然后A本身被锁存,B在上升沿时是读取A锁存的值

那么假设A有旧值a,在上升沿来后有新值c,那B在相同的上升沿时,读取且覆写的值,是a还是c?

ccswitch

http://www.jsqmd.com/news/951259/

相关文章:

  • 如何在微信小程序中快速生成二维码:weapp-qrcode终极指南
  • 当技能遇见AI:利用快马平台智能生成具备自然语言解析的待办事项技能
  • 手把手教你学Simulink——基于状态空间平均法(SSA)的 DC‑DC 变换器小信号模型仿真
  • 网络投票平台推荐,深度测评2026年6月已更新 - 投票小程序
  • 计算机毕业设计之基于数据挖掘算法的电影推荐系统
  • 央视大推特推的OPC(一人公司),我做了!
  • 保姆级教程:用ENVI 5搞定高光谱VNIR与SWIR影像的融合拼接(附公共ROI裁剪技巧)
  • 2026 泸州卫生间漏水、外墙、楼顶、地下室、阳光房渗漏维修师傅推荐|同城附近上门防水补漏公司测评 - 企业资讯
  • COM3D2实时编辑器完整指南:如何快速修改游戏角色属性与状态
  • D2RML:暗黑破坏神2重制版专业级多开自动化解决方案
  • Oracle 11g R2 安装踩坑实录:从‘agent nmhs’报错到成功启动的完整排错指南
  • 原创性如何?8款AI论文网站势力榜,毕业季救星!
  • Django Auth 系统底层剖析与用户模型重构
  • 2026年窗户漏水深度选型:如何为你的家庭匹配最佳方案 - 资讯纵览
  • 2026 揭阳卫生间漏水、外墙、楼顶、地下室、阳光房渗漏维修师傅推荐|同城附近上门防水补漏公司测评 - 企业资讯
  • 计算机毕业设计之基于线性回归算法的东方财富网股票趋势分析与预测
  • PDF文件瘦身终极指南:用开源工具pdfsizeopt轻松减少70%体积
  • 2026年6月膨胀节厂家推荐排行榜:波纹/金属/管道/不锈钢/四氟/方形/压力容器膨胀节公司精选 - 企业推荐官【官方】
  • Mac菜单栏太乱?3步用Ice打造清爽高效工作空间
  • Xournal++:重新定义数字手写笔记的跨平台开源解决方案
  • STK卫星仿真数据怎么导出?一个MATLAB脚本搞定TLE文件生成与保存
  • GoF设计模式——外观模式
  • Agent Plan:从“模型订阅“到“Agent能力订阅“,火山引擎如何重新定义AI Agent开发范式
  • 计算机毕业设计之基于协同过滤算法的大学生职业推荐系统设计与实现
  • 2026 惠州卫生间漏水、外墙、楼顶、地下室、阳光房渗漏维修师傅推荐|同城附近上门防水补漏公司测评 - 企业资讯
  • CSS Grid 实战布局模式:从基础到生产级方案
  • B站m4s视频转换终极指南:3分钟解锁缓存视频自由播放
  • 揭秘Legacy iOS Kit:旧设备系统恢复与越狱的深度技术解析
  • 2026 贵阳卫生间漏水、外墙、楼顶、地下室、阳光房渗漏维修师傅推荐|同城附近上门防水补漏公司测评 - 企业资讯
  • 网络安全第116天