一、设计要求 ????Logisim中RAM组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用4个4K * 8 位的 RAM 组件进行扩展,设计完成既能按照8位、也能按照16位、也能按照32位进行读写访问的32位存储器,最终存储器引脚定义如下图。
????????????????????????????????????????????????????????????????????????? 图1.1 实验电路框架图 ?????????????????????????????????????????????????????????????????????? 图1.2 电路引脚与功能描述 二、方案设计 ????1.设计原理 ???? 字节:8位 ???? 半字:16位 ???? 字:32位 ????2.设计思路 ????RAM: ???? 因为要实现不同模式的访问,最小单位为字节,所以RAM位宽为8位,最大单位为字32位,所以一共需要4片8位RAM组件。 ?????把这四片RAM的数据对应标记为byte0,byte1,byte2,byte3 ???? 字节地址输入: ???? Addr为12位字节地址,RAM的地址位宽为10位,所以可用分线器将字节地址低2位作为片选 ???? 地址,高10位为RAM的块内地址,每个RAM可输出一个字节。 ???? 读出数据: ???? 字读出时,直接将四个RAM的数据全部输出 ???? 半字读出时,根据字节地址倒数第二位决定输出哪个半字(此时忽略字节地址最低位,倒数第二位实现片选) ???? 字节读出时,根据字节地址低两位决定输出哪个字节(字节地址低两位实现片选) ???? 写入数据: ???? 设每一个RAM的输入分别为r0,r1,r2,r3. ???? 字写入时,r0,r1,r2,r3分别得到Din的第0 ~ 7,8 ~ 15,16 ~ 23,24 ~ 31位 ???? 半字写入时,根据边界对齐和忽略高位的原则,r0和r2得到Din的第0 ~ 7位,r1和r3得到Din的第8 ~ 15位,然后根据写入的 ???????? ???? ???? ???? ?? 片选信号选择高半字或低半字存储 ???? 字节写入时,根据忽略高位的原则,r0,r1,r2,r3都得到Din的第0 ~ 7位,然后根据写入的片选信号选择一个RAM写入 ???? 写入数据时的片选信号: ???? 可以结合Mode对r0,r1,r2,r3的输入条件分类讨论(Mode:00字访问,01字节访问,10半字访问) ???? 输入r0条件: ①Mode=00; ②Mode=01,字节地址末两位为00; ③Mode=10,字节地址倒数第二位为0 ???? 输入r1条件: ①Mode=00; ②Mode=01,字节地址末两位为01; ③Mode=10,字节地址倒数第二位为0 ???? 输入r2条件: ①Mode=00; ②Mode=01,字节地址末两位为10; ③Mode=10,字节地址倒数第二位为1 ???? 输入r3条件: ①Mode=00; ②Mode=01,字节地址末两位为11; ③Mode=10,字节地址倒数第二位为1 ???? 可构造数字逻辑电路得到写入的片选信号,与写使能信号通过或门,即可确定是否写入数据。 ???? 综上所述,设计完成了既能按照8位、也能按照16位、也能按照32位进行读写访问的32位存储器。 ???? 3.设计电路图
三、实验步骤 ???? 1.下载educoder平台上的初始代码,并用Logisim打开 ???? 2.连接好RAM以及时钟、使能端等
???? 3.读出逻辑实现(从左到右为字读出、半字读出、字节读出)
???? 4.写入逻辑及写入片选信号逻辑实现
???? 5.调整布局,使线路整体匀称、美观
四、故障与调适 ???? 按照整体思路连接后,在“MIPS RAM测试”子电路进行测试,发现并没有出现“PASS”,而是“FAIL” ???? 原因分析: ???? 通过对右下方报错信息分析,结合对每一部分电路的检查,发现是在“Dout”电路中,半字和字节的连接顺序连接错误
???? 解决方案: ???? 将半字和字节的连接顺序调换,实现正确的逻辑
五、测试与分析 ???? 在“MIPS RAM测试”子电路中,按下CTRL+K进行自动测试
???? Educoder平台测试结果 六、实验总结 ???? 1.根据实验要求,结合各个引脚要求实现的功能进行整体构思 ???? 2.对功能进行划分,确定各引脚功能实现的顺序,采取“逐个击破”策略 ???? 3.对引脚功能的实现进行具体设计(从RAM连接到片选信号的设计) ???? 4.将各部分功能电路组合起来,争取实现目标要求,并进行测试 ???? 5.根据测试结果,寻找并纠正错误,完成电路设计 ------ ???? 本次实验看似简单,其实难度还是比较大,有几个细节要特别注意。整体来看,实验要求我们根据MODE信号,WE信号, 字节地址信号给出存储器访问的相关控制信号。虽然是一个组合电路设计,但是需要对内存地址有着比较深的理解。 ???? 刚刚开始实验时,一时间不知从哪里入手,还是去MOCC慕课听了谭老师讲解的一些注意事项,又深入了解学习了内存地址 后才逐渐摸到门道。最终在不断试错、结合前辈经验一路“摸爬滚打”构建出了实验的大体框架。在连接完电路后,我又结合之前实验对隧道的妙用,对电路进行了美化,自我感觉还是很好的。总之通过这次实验大大加深了我对内存地址的理解,对于Logisim的使用以及对逻辑电路的美化也是一次很好的训练,总之这次实验我收获很多!
参考: https://zhuanlan.zhihu.com/p/144958263 https://blog.csdn.net/weixin_45775050/article/details/122974628 https://blog.csdn.net/gyp0205/article/details/124694193?spm=1001.2014.3001.5502
|