实验目的

理解主存地址基本概念,理解存储位扩展基本思想,并能利用相关原理构建能同时支持字节、半字、字访问的存储子系统。

主要任务

Logisim\text{Logisim}RAM\text{RAM} 组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用 4488 位的 RAM\text{RAM} 组件进行扩展,设计完成既能按照 88 位、也能按 1616 位、也能按照 3232 位进行读写访问的 3232 位存储器。
AddrAddr1212 字节地址输入(字访问时忽略最低两位,半字访问时忽略最低位,倒数第二位片选,字节访问时,低两位进行片选)。DinDin3232 位写入数据 (不同访问模式有效数据均存放在最低位,高位忽略)。ModeMode 为访问模式控制位(0000 表示字访问,0101 表示 11 字节访问,1010 表示 22 字节访问)。WEWE 是写使能,11 表示写入,00 表示读出。DoutDout 是读出数据 (不同访问模式有效数据均存放在最低位,高位补零)。

实验原理

AddrAddr1212 字节地址,低两位为片选地址,高 1010 位为 RAM\text{RAM} 的块内地址,每一个 RAM\text{RAM} 可输出一个字节。
先考虑输出。整个字输出时,将四个 RAM\text{RAM} 的数据全部输出。单字输出时根据字节地址末两位,选择一个 RAM\text{RAM} 输出。半字输出时,若地址末两位为 0000 或01,输出的是 00 号和 11RAM\text{RAM} 组成的半字;否则,输出 22 号和 33RAM\text{RAM} 组成的半字;因此片选为字节地址的倒数第二位。
再考虑输入,定义每一个 RAM\text{RAM} 的输入为 In0,In1,In2,In3In_0,In_1,In_2,In_3。整字输入时,In0,In1,In2,In3In_0,In_1,In_2,In_3 分别得到 DinDin 的第 07,815,1623,24310\sim7,8\sim15,16\sim23,24\sim31 位。单字输入时,根据忽略高位的原则,In0,In1,In2,In3In_0,In_1,In_2,In_3 都得到 DinDin 的第 070\sim7 位,然后根据写入片选信号选择一个 RAM\text{RAM} 输入。半字输入时,根据边界对齐和忽略高位的原则,In0,In2In_0,In_2 得到 DinDin 的第 070\sim7 位,In1,In3In_1,In_3 得到 DinDin 的第 8158\sim15 位,然后根据写入的片选信号选择高半字或低半字存储。
接下来分析写入数据时的片选信号,我们可以考虑 In0,In1,In2,In3In_0,In_1,In_2,In_3 的输入条件(根据 ModeMode 分类讨论)。若要输入 In0In_0:① Mode=1Mode=1;② Mode=2Mode=2,字节地址末两位为 0000;③ Mode=3Mode=3,字节地址倒数第二位为 00。若要输入 In1In_1:① Mode=1Mode=1;② Mode=2Mode=2,字节地址末两位为 0101;③ Mode=3Mode=3,字节地址倒数第二位为 00。若要输入 In2In_2:① Mode=1Mode=1;② Mode=2Mode=2,字节地址末两位为 1010;③ Mode=3Mode=3,字节地址倒数第二位为 11。若要输入 In3In_3:① Mode=1Mode=1;② Mode=2Mode=2,字节地址末两位为 1111;③ Mode=3Mode=3,字节地址倒数第二位为 11
可构造数字逻辑电路得到输入的片选信号,与写使能信号通过或门,即可确定是否输入数据。
综上所述,设计完成了既能按照 88 位、也能按 1616 位、也能按照 3232 位进行读写访问的 3232 位存储器。

电路图

MIPS RAM.png