ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

p5 CACHE logisim 总结

2021-12-09 14:06:53  阅读:216  来源: 互联网

标签:Cache Group p5 CACHE BLOCK logisim 命中 HIT Block


前言

参考了指导书和各位大佬的博客搭完了Cache,然后莫名其妙的AC了。由于惊喜来的太突然,我甚至没搞懂Cache它就A了。还是总结一下顺便理清一下思路。如果明年软院没有再改革的话,也算留点东西叭嘿嘿嘿。 

模块

group_blcok

TAG:6位组内块地址

V:脏位,就是这个Block有没有被用过,被用过以后就是一直置1 一开始默认为0

DATA:每个Block里面都会存放4个32位的数据

这些都用寄存器存储,这里的EN_block是写使能信号

当block要更新的时候,EN_block=1

EN_block=0时,group_block只读它寄存的数据。

LRU

计算Cache的Group里是哪个BLock要更新。

前提:1)这个Group现在处于被选中的状态!如果没有被选中,这个group不做任何修改

           2)STOP=0!暂停了以后LRU也不更新。整个CACHE属于暂停运转的时候

更新原则

1)命中 且 写入

        HIT_BLOCK=1&Memwrite=1

        RAM里这个TAG地址对应存储的值被修改了,Cache里也应该进行相应的更新。

2)不命中 且 不写入

        HIT_BLOCK=0&Memwrite=0

        不写入可以看作是读取,读取的数没有在Cache里面,那么就要把这个数存到这个Group的某个Block里面。

        选这个被放入的Block的原则:count数最大的Block,即距离上一次用到它的时间最久的Block.如有两个或以上的相等的最大的count存在的情况,那么就取block标号最小的那个。

产生的信号:

                        EN_BLOCK 是Block的写使能信号,即该Block的值会发生修改。

COUNTER

        我们规定,只有在读取数据时才算作一次真正的访问,所以在写入时,不管有没有更新数据,都不算做一次访问

前提:

STOP=0&Memwrite=0&Enable_GROUP=1 (必须是选中这个组 才可以进行计数,要不然就是不访问)

归零:

命中当前块:当前块在这个周期被读取了

                      HIT_BLOCK=1

没有命中,但更新了当前块:这个块内值被替换了所以counter也要被清零

                                                HIT_BLOCK=0&EN_BLOCK=1

                                                EN_BLOCK指的是块的写使能,即该block要被写入

counter+1:

没用到这块数据&这个数据块不更新:HIT_BLOCK=0&EN_BLOCK=0

MuxForBlock

用多选器,选择四个中被选中的Block内的数据输出。

如何知晓被选中:产生的四个HIT_BLOCK的信号判断。

Cache_Group

HIT_BLOCK的信号产生:BLOCK_TAG==TAG_IN(读入的地址中的tag)&&V==1(这个BLOCK里已经有数据了)&&ENABLE_Group==1(这个组被选中了才行)

输出的Group_HIT信号:这个HIT信号指的是这个被选取的GROUP里面的块内值有没有命中的。 

记得要(HIT_BLOCK1||HIT_BLOCK2||HIT_BLOCK3||HIT_BLOCK4)&&ENABLE_Group==1

MuxForGroup

按照指导书老老实实写就行

一个比较难处理的点:怎么解决输出五个周期的0,再在第六个周期输出正确结果?

这模拟的就是从RAM里读取数据,前5个周期STOP==1我们先判断stop=1的时候就直接输出0

当stop=0的时候,如果命中且读取,就输出对应命中的Group里的数据输出,若未命中且读取,即从RAM里拿出数据,则就是输出RAM里读出的数据。其余情况输出0

Cache

ADD地址分解:

MuxGroup:选择命中的组是哪一组。

MuxBLock:选择块内地址的哪一个字

用MuxGroup产生ENABLE_Group信号:

HIT(是否命中):主要是为了判断读取时是从Cache里读取(HIT==1)还是RAM里读取(HIT==0)

HIT=GROUP_HIT1||GROUP_HIT2||GROUP_HIT3||GROUP_HIT4

RAM:产生STOP信号

MuxForGroup里选出的四个数据 还要再用MuxBlock 选择是这四个数据的哪一个。

ReadTimes&HitTimes 可以拿来计算命中率和缺失率。直接参考的某大佬的:

总结

自下而上的搭完以后,重新理解了一下Cache 实际上是自上而下理解它的。

先进行取址:

产生TAG、MuxGroup 、MuxBlock的三个信号。

产生了Enable_Group的信号。选中四个组中的一个组。

然后在被选中的Cache_Group里由Memwrite,Memread,Tag的信号判断 属于四种情况的哪一种

命中且读取

COUNTER值更新0;

MuxForBlock选出对应的块,输出该块数据(4条data);

LRU不更新数据;

用MuxBlock 将该块四条数据中选择对应的那个字。

命中且写入

COUNTER值保持不变;

LRU对应的值BLOCK使能变1(Block更新了);

Group_Block的值发生修改,存储的数据变化;

MuxForGroup输出0(因为不是读);

不命中且写入:

COUNTER值保持不变;

LRU中写使能全为0;

Group_Block的值不变;

MuxForGroup输出0(因为不是读);

RAM里对应地址值发生变化。

不命中且读取:

STOP=1

暂停五个周期

在第六个周期时:

LRU中计算出Cache对应的要替换的Block;

Group_Block的值发生修改,TAG和DATA都修改(将RAM读出的数据存储进对应的Group_Block);

COUNTER值更新0;

MuxForGroup输出RAM中读出的四条数据;

用MuxBlock 将该块四条数据中选择对应的那个字。

还不知道上机到底怎么考,希望能够过叭。

参考

以下大佬博客:

Cache在干嘛_Harbour_的博客-CSDN博客

P5 踩坑总结…_u012928469的博客-CSDN博客

P5 Cache - PYuYi - 博客园

标签:Cache,Group,p5,CACHE,BLOCK,logisim,命中,HIT,Block
来源: https://blog.csdn.net/yigaa/article/details/121818146

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有