logisim实验七:MIPS RAM设计

本文记录了一次电子设计实验,旨在设计一个32位存储子系统,支持8位、16位和32位访问模式。通过Logisim软件,利用4个4K*8位的RAM组件实现存储位扩展。实验中,作者详细阐述了电路设计的思路,包括输入控制、RAM控制和输出控制,并在遇到问题时进行了调试。最终,通过测试和分析,成功解决了不输出结果、WE端未考虑及地址解析错误等问题,优化了设计逻辑,提高了调试效率。
摘要由CSDN通过智能技术生成

实验目的

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

实验内容

Logisim 中 RAM 组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用 4 个4 K*8 位的 RAM 组件进行扩展,设计完成既能按照 8 位、也能按 16 位、也能按照 32 位进行读写访问的 32 位存储器。
在这里插入图片描述

方案设计

  • 整体设计思路:控制电路可以分成三部分:对输入的待存储数据的控制与划分,对RAM芯片的控制,对输出数据的控制。分成三部分的好处在于可以减小问题规模,同时优化电路结构,避免过于冗杂。半字访问时片选位为0时访问0和1RAM,片选位为1时访问2和3RAM。接下来讨论三部分电路的设计思路。

  • 预处理:对输入的十二位地址和32位数据进行划分处理,方便后续操作。add1为低两位地址,用于字访问模式下的片选,add2为倒数第二位地址,用于半字访问模式下的片选。
    在这里插入图片描述

  • 输入控制:将输入的32位2进制待存数分成四个八位二进制数,In0,In1,In2,In3,然后分别讨论四个RAM组件的输入数据在不同访问模式下应该是多少,设输入到四个RAM组件的数据分别为IN0,IN1,IN2,IN3。IN0:任何控制模式下只能是In0(控制RAM组件在部分访问模式下不存取数据是RAM芯片芯片控制电路要干的事情,输入控制电路只要保证相应的RAM组件在需要存储数据的时候拿到正确的待存储数就可以了)。字访问时输入到四个RAM的数据分别为In0,In1,In2,In3;字节访问时输入到RAM的数据为In0;半字访问时输入到RAM的数据IN0和IN2为In0,IN1和IN3为In1。
    在这里插入图片描述

  • RAM控制:通过对存储引脚str的控制来确保存储数据的正确性,一个RAM是否需要存储数据取决于使能端WE的输入和访问模式,可以将两者的结果两者的最终结果相与得到str的控制信号。通过解复用器分别得到在半字访问和字节访问模式下的片选信号,将不同模式下的片选信号做或运算即为访问模式对RAM产生的控制信号。
    在这里插入图片描述

  • 输出控制:思路上与输入控制相似,对最终结果的四个部分OUT0,OUT1,OUT2,OUT3分别进行控制,通过分线器拼成Dout。设RAM组件直接输出的结果分别为out0,out1,out2,out2,字访问模式下最终结果的四个部分分别为各个RAM组件的输出;字节访问模式下OUT0的结果为所选定的那个RAM组件的输出,其余为0;半字访问模式下根据所选RAM组件的不同OUT0为out0或out1,OUT1为out1或out3,OUT2和OUT3为0。
    在这里插入图片描述

  • 整体电路
    在这里插入图片描述

实验步骤

  • 弄清电路要求,弄清各个引脚的功能。
  • 构思整体思路,对控制电路进行功能划分。
  • 分别设计三部分控制电路。
  • 连接各部分电路。
  • 测试发现bug,修改电路。
  • 总结收获。

故障与调试

  • 遇到的第一个bug是实验电路不输出结果,原因在于使用的片选引脚进行RAM组件的控制,这样的设计会使得未被选中的的RAM不输出结果,而在实验所给的测试样例中无论是否为本次操作选到的RAM组件,都要输出对应RAM中存储的数据。借此机会也弄清了输入输出的逻辑,在一次脉冲中输出的数据为此脉冲来到的前一瞬间对应RAM中存储的数据。
    在这里插入图片描述
  • 发现上面第一个bug后在测试之前同时修改了存在的第二个bug:没有考虑WE端。
  • 继续测试发现当访问模式不为字访问时输出结果错误,具体表现为访问一个没有存储过数据的地址输出结果不为0。把出现错误的区域锁定在了输出控制部分,因为在RAM控制电路部分的地址输入是直接从输入的地址中提取的,问题出在这个地方的概率很低。错误在于将RAM输出的结果作或运算得到最终输出,应该用多路选择器做数据选择。
    在这里插入图片描述
  • 同理,半字访问下的输出结果也是错的,测试到半字访问时将电路一并做了修改。
  • 半字访问的地址提取错误,应该是倒数第二位,还有一些类似的接错引脚,连电路的时候接着发现并修改了。
    在这里插入图片描述

测试与分析

  • 通过给定的测试电路与平台线上测试的方式找到了输出错误的样例,最终将电路修改正确。
    在这里插入图片描述
    在这里插入图片描述

实验总结

  • 通过本次实验,我进一步优化了设计逻辑电路的方法,通过将问题划分的方式可以大幅降低问题的复杂规模,降低设计难度。同时,我发现了调试电路时与平时调试程序的共性:遇到bug按出错概率从高到低检查验证各部分电路,可以大大提高调试效率。本次实验使我受益匪浅。
  • 21
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈希表扁豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值