Logism · MIPS-RAM设计 实验

实验 MIPS-RAM设计

设计要求

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

Logism · MIPS-RAM设计 实验_第1张图片

 Logism · MIPS-RAM设计 实验_第2张图片

实验目的

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

方案设计

        A.宏观部署

                a.输入数据的划分
        根据mode对数据进行位划分,分配到d0 d1 d2 d4四个隧道,对应四个寄存器输入;将输入的32位Din拆分成4分,在mode情况下,D0-D3分别分配到:
Mode=0:1 2 3 4                  字访问
Mode=1:1 1 1 1                  1字访问
Mode=2:1 2 1 2                  2字访问

                b.RAM控制-mode
        部署辅助隧道00 01 10 11来表示mode当前的数字,采用解复用器
        部署芯片启用模块,在上侧辅助模块的协助下,对应三种mode方式, 利用比较器的基础逻辑门的加持,实现对应芯片启用信号w0 w1 w2 w3

                c.RAM控制-片选
                核心是2个信号的控制,mode与we;we为读写启用信号
mode是模式选择启用某些芯片,已经由前面【辅助模块】将mode映射称为【w0:是否启用对应芯片】,同时mode还实现了对【输入数据】的划分,为d0 1 2 3 。
所以对于芯片的控制被简化为【we是否启用读写+w0123是否启用芯片】
输入数据被简化为d0123,已经由辅助模块实现对DIN输入的划分

                d.输出控制
        已经由四个RIPS读出对应byte输出,根据mode情况用分线器合并一下数据即可
Mode=0 四个合并输出即可
Mode=1 拆成4个,8拓展32位后输出
Mode=2 22合并后拓展到32位

        B.实验步骤

                a.输入数据的划分

Logism · MIPS-RAM设计 实验_第3张图片

                b.RAM控制-mode

Logism · MIPS-RAM设计 实验_第4张图片Logism · MIPS-RAM设计 实验_第5张图片

                c.RAM控制-片选

Logism · MIPS-RAM设计 实验_第6张图片

                d.输出控制

Logism · MIPS-RAM设计 实验_第7张图片

        C.de'bug过程

                a.片选选择,没做好审题,这里是取【低位】作为片选信号而非高位,所以分离器选择是0 1位置分离出去

                b.半字节的地址选择是采用【倒数低2位,也就是1号】位置,而非用0号最低位作为选择

                c.字节地址输入时候由于思想不明确错了2次,第一次是全地址输入,第二次又想着是片选信号只要前2位,多次试错发觉这是给到【片内地址】,应该是除去前2位后的地址部分。

Logism · MIPS-RAM设计 实验_第8张图片

                d.辅助模块设计是最头大的地方,1 2字节访问时的启用条件不明晰
        1字节启用条件应该有2个:【字节地址选择(比较器)】且【1字节访问模式01】;当时只考虑了字节地址有没有选到而没有考虑mode访问模式导致出错。
        2字节(半字节)设计上也是令人头疼的地方:类比于1字节的bug修复过程,我考虑到了【2字节访问模式10】,但是对于【字节地址选择】没有想法,提交过程也是出错的;经过研究测试发现,如果是 2字节访问,【导数第二位=0】是一个独特的共性,我通过非门取反接入后给个且关系,实现了同上侧的2个同时成立的判断条件

本地测试报告-时钟频率调高,不然跑的很慢

Logism · MIPS-RAM设计 实验_第9张图片

成果展示

Logism · MIPS-RAM设计 实验_第10张图片

Logism · MIPS-RAM设计 实验_第11张图片

心得体会

            给我感触最深的有2点,模块化设计与辅助模块;模块化设计能够将大问题拆分成多个小问题组,以期实现逐个击破;辅助模块在小问题的实现过程中能够实现部分小功能,来实现电路的简化;在大体系的调整修正中,可以从小模块的调整入手,实现局部微调。具有相似性的电路可以直接copy+微调,可以减少工作量,最难的地方应该是在于逻辑关系的思考。

你可能感兴趣的:(附加实验库,fpga开发)