华科计算机组成原理存储系统实验(Logisim)

大家好,我是小黄鸭,这篇差不多更完了。

实验所用的软件资源/测试电路也全部开放,地址在MOOC中国大学为:https://www.icourse163.org/learn/HUST-1205809816#/learn/announce

附带实验测试,地址在Educode上为:https://www.educoder.net/shixuns/gemohls5/challenges
请在logisim中点击保存后再去编译器复制代码到Educode进行测试

这篇是关于存储系统的实验,较于运算器实验难度提升了一大截,更加的注重原理

汉字字库存储芯片扩展实验

  1. 用logisim打开storage.circ,该实验附带有8个文本文件,分别是对8个存储器的输入。这里是在电路设计之后,手动复制粘贴到相应只读存储器中。
    输入
  2. 源文件中已经将位扩展连接完毕,即电路图中下端的连接,具体原理见中国大学MOOC上该实验的视频讲解。
    位扩展
  3. 实验要求设计出对4片8×32位的存储器进行字扩展位32×32位的存储器,即将4片存储器进行连接用来代替电路中空白区域,以实现整个逻辑电路的功能。
  4. 上方4片的8×32位的存储器输入,是将HZK16.1.txt文本划分为4部分,例如第一部分为第0000–0FF0行编辑到第一个存储器中,第二部分为1000-1FF0……,分别对4个ROM进行编辑。

在这里插入图片描述
最后可在相应的电路测试文件中进行测试。

汉字字库存储芯片扩展实验

MIPS寄存器文件设计

  1. 实验原理如下图,该实验是设计中间黄色的寄存器文件电路。该寄存器文件的设计可以实现在一个时钟周期内完成两个数的运算并将结果返回到一个寄存器中。
    实验目的
  2. 引脚的功能如下图所示
    引脚功能
  3. 源码附带检测功能电路。如下图中,在错误记录电路中,若没有出错,则全为0;若出现错误,则在存储器中显示出错数据,根据出错数据对电路进行修改。最后,整个电路无错误则显示成绩为100分。
    测试电路
  4. 完整电路图如下
    MIPS寄存器文件设计

MIPS RAM 设计

该实验难度较大

  1. 实验内容:LogisimRAM 组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用4个4K*8位的 RAM 组件进行扩展,设计完成既能按照8位、也能按16位、也能按照32位进行读写访问的32位存储器。
  2. 引脚说明如下图,这里增加了一个Mode接口,来决定不同的访问模式(字节/半字/字),设计引脚时要对地址理解深入
    引脚
  3. 输入输出总线控制是该实验的难点。即DinDout引脚,首先给出三种模式下输入输出的用例,如下图。
    Din和Dout
    • 当为字输入输出时,即Mode=00,此时直接输入输出4Byte的数据,即32位数据。
    • 当为字节输入输出时,即Mode=01,此时只需输入和输出1Byte的数据,并且该Byte i一定放置在4个字节的最低位。DinByte i由片选信号wi决定;在Dout中,由字节地址的最低两位来确定
    • 当为半字节输入输出时,即Mode=10,此时需要选择两个Byte的数据,分别是01或者23,而他们的相对位置是确定的。Din中,0和2连接低8位,1和3连接高8位,具体片选由wi决定;在Dout中,由第二低位来确定。
      Din和Dout
  4. ModeWi引脚设置,先用一个解码器,将Mode值转化为对应的信号,再根据三种不同的输入输出方式,通过信号的改变,实现不同的片选型号。
    Mode和Wi
  5. 整体框架,由于是给出的是字节地址,因此取2-11位,分别输入到4片ROM中,作为数据存储的地址。使能端由片选型号wi来决定是否有效,输入端位由di来输入数据。
    整体框图
  6. 在相应的测试电路中进行测试,显示PASS

测试实验整体图片:
MIPS RAm

全相联cache 设计

  1. 存储系统实验一共给了三种模式的cache设计实验,其中较为简单的为直接相联映射,较为困难的为组相联映射,而我给大家写的这个是位于中等难度的全相联映射,当理清cache设计的基本原理,相信大家也能够完成其他两种映射方式。
  2. 首先为实验目的与要求。如下图,而根据该实验考察的三个技术,我把它细分为四个部分:字节地址和cache槽的设计、写入和写出设计、比较设计、淘汰算法设计。关于cache不同映射方式都可以根据这四个方面来设计(直接相联映射没有淘汰算法,只用设计前三个
    实验目的
    实验要求
  3. 首先看一下全相联映射的原理图,理清原理和思路才方便下手。全相联映射是主存地址随机存储在任意的cache行,也就是只要是空行就可以进行存储,没有选择。然后通过标记位地址与8个cache槽中的标记位进行比较,判断是否命中,选择具体的1个cache槽;再通字内偏移地址,选择该cache槽中的单个字节来进行写入和写出的操作。
    原理图
    四部曲开始
  4. 字节地址和cache槽的设计。
    1. 由于全相联映射是主存地址随机存储在任意的cache行,也就是只要是空行就可以进行存储,也正是不需要选择行号,就不需要行地址,只需要Tag标记位和Offset字内偏移地址。由于每个cache副本中只包含4个字节,因此Offset只需要2位,所以Tag标记位为字节地址16位-Offset2位=14位。字节地址
    2. cache槽的设计则是整个题目的核心。cache主要包含四部分:Valid标志、主存标记位、淘汰技术标记、数据副本。而我们需要考虑的主要是前三部分,并且这三部分和之后的设计息息相关。 当中valid位有效位,判断该cache槽是否被命中过,存入了数据;Tag位是存入的主存标记位;淘汰计数是一个计数器,初值为0,若行命中标志Li有效时,读入数据0,达到清零的效果,若Li无效,则随着时钟频率一直进行计数。(与后面的淘汰算法密切相关)。而数据副本通过三态门缓冲器连接到总结上,这里三态门缓冲器的作用是当Li行有效时,将数据副本中输出的数据进行缓存,也就是使8个chche槽中的数据都可以缓存到1个Solt,这里就实现了总线的作用,十分优化。 这里给出了一个cache槽,其余的进行类似的复制。cache槽
  5. 写入和写出设计。
    1. 写出设计即通过字内偏移地址Offset进行选择总线Slot上的某一字节进行输出。
    2. 写入设计则要当BlkReady数据准备完成时(测试电路中的数据准备)选择具体的cache行进行写入,而写入的前提是该行为空,即Miss信号有效,才能写入数据。
    3. ==写入行的判断:若存在空行,即FULL信号无效,则选择相应的空行进行写入;若FULL信号有效,则选择淘汰的行进行写入。两种情况都为之后的淘汰算法中选出的行号。写出写入
  6. 比较设计。不同的映射模式最大的区别就在于比较设计上。这里以全相联为例,全相联因为是随机选取的cache行进行写入,因此没有行地址(索引),因此直接进行8个cache槽的并发比较,得到命中的cacheLi,并给出MissHit信号。比较方法见图所示。原理比较算法
  7. 淘汰算法。淘汰算法分为两个部分,一个是当存在cache槽为空,空行的选择;一个是当cache槽满时,淘汰行的选择
    1. 在空行的选择中,通过优先比较器来实现,优先比较器通过比较,输出的是索引较大的非0行,因此先对所有行的标志位取反,取反后,若为1,则表示该行为空;若为0,则表示该行已经存在数据。若所有行都存在数据则FULL行满信号有效。空行选择
    2. 在淘汰行的选择中,主要运用到LRU淘汰算法(即最近最少使用淘汰算法,不懂得自己百度一下),由于我们在cache槽设计中的计数器是当行选中时清零,行为选中时随时钟频率进行计数,因此这里计数的最大值即为最少使用的cache槽。 而我们用文件中附带的归并算法,这里的归并算法是输出两个值中较大的一位的数据和索引(这里不懂得双击电路文件中的归并算法,进去研究一下),最后得到相应的淘汰行。归并算法
    3. 下面给出三种映射模式的淘汰算法和全相联相应的设计图。
      原理图
  8. 整个实验的电路图如下完整电路图

持续更新,如有问题或者建议可在下方留言或者私聊。

猜你喜欢

转载自blog.csdn.net/weixin_44529208/article/details/105998940