存储系统实验思路及Logisim图
第一关:汉字字库存储芯片扩展实验
掌握字扩展和位扩展即可完成第一关内容。
注意在加载ROM中汉字码时,可以复用参考字库中的数据。
对于第二个ROM,将参考字库中的数据均分为4份,分别粘贴到4个12位宽的ROM中。地址标号为0000-1ff0, 2000-2ff0, 3000-3fff0, 4000-4ff0(最后一个其实没有数据了)。
第二关:MIPS寄存器文件设计
本题只要理解下面的表格逻辑即可画出。
第三关:MIPS RAM设计
对于本题,实现一个RAM可以存取4字节、2字节(分为高16位存取和低16位存取)、1字节。
- 4字节最为简单,不用附加任何条件即可进行。
- 2字节需要判断是高16位还是低16位存取,只要找到16位中的低8位的地址,就找到了地址。
- 1字节精准判断哪个RAM可以存取。
本题我想了一个对Din做变形的方法:
将原数据Din做适当变换然后同时输入到四个RAM端,只要用组合逻辑识别不同字节的最低字节地址即可。(对于4字节,最低字节地址就是0~8位的地址;对于2字节,最低字节地址同上;对于1字节,就是本身的地址)
- 4字节的输入不做任何变换。
- 2字节的输入,例如:00AB或者AB00;输出为ABAB。
- 1字节的输入,例如:000A或者00A0或者0A00或者A000,输出为AAAA。
这样做的弊端是:没有完全按照汇编语言中对不同字节数的操作来存储。
好处是:数据的处理可以大大简化。
那么,如何区分是4字节输入、2字节输入还是1字节输入呢?
我将Byte3~Byte0的片选信号组合为4位二进制数。这样:
- 1111:4字节存储。
- 0011:低2字节存储。
- 1100:高2字节存储。
- 0001/0010/0100/1000:1字节存储。
- 0000~1111的其他数:无效,补0
针对这样的思路,设计电路各部分如下:
输入转化逻辑:按照上述思路实现。
片选信号组合逻辑,这部分没有做封装,显得比较乱。
结果需要再将变形的部分回退到正确结果。通过移位操作实现。
例如:输入AB00,中间转化为ABAB,最后读出为AB00,要转化为00AB。
全部的电路如下图所示:
第四关:2路组相联Cache设计
本题需要实现2路组相联Cache。本题可以复用MAX比较器,但我做完才看到有,因此没有用。
自己画一个比较器也挺简单的。
比较器部分:
字节地址分类:
命中电路:
未命中处理电路:
结果输出电路(这里可以简化):
Cache槽电路:(注意计数位宽16位,否则卡在educoder命中率94%无法通过)画相同的8个。
槽电路在视频讲解中已经给出逻辑图,只要实现清零部分的逻辑即可。
以下是原逻辑图:
全部电路:
做完了回顾一下思路也没有那么难,但是做的时候感觉逻辑好多好复杂QAQ。
重点是将大任务划分为几个块,然后分别实现。