Logism · MIPS-RAM设计 实验
实验六 MIPS-RAM设计
设计要求
Logisim 中 RAM 组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用4个8位的 RAM 组件进行扩展,设计完成既能按照8位、也能按16位、也能按照32位进行读写访问的32位存储器
实验目的
学生理解主存地址基本概念,理解存储位扩展基本思想,并能利用相关原理构建能同时支持字节、半字、字访问的存储子系统。
方案设计
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.输入数据的划分
b.RAM控制-mode
c.RAM控制-片选
d.输出控制
C.de'bug过程
a.片选选择,没做好审题,这里是取【低位】作为片选信号而非高位,所以分离器选择是0 1位置分离出去
b.半字节的地址选择是采用【倒数低2位,也就是1号】位置,而非用0号最低位作为选择
c.字节地址输入时候由于思想不明确错了2次,第一次是全地址输入,第二次又想着是片选信号只要前2位,多次试错发觉这是给到【片内地址】,应该是除去前2位后的地址部分。
d.辅助模块设计是最头大的地方,1 2字节访问时的启用条件不明晰
1字节启用条件应该有2个:【字节地址选择(比较器)】且【1字节访问模式01】;当时只考虑了字节地址有没有选到而没有考虑mode访问模式导致出错。
2字节(半字节)设计上也是令人头疼的地方:类比于1字节的bug修复过程,我考虑到了【2字节访问模式10】,但是对于【字节地址选择】没有想法,提交过程也是出错的;经过研究测试发现,如果是 2字节访问,【导数第二位=0】是一个独特的共性,我通过非门取反接入后给个且关系,实现了同上侧的2个同时成立的判断条件
本地测试报告-时钟频率调高,不然跑的很慢
成果展示
心得体会
给我感触最深的有2点,模块化设计与辅助模块;模块化设计能够将大问题拆分成多个小问题组,以期实现逐个击破;辅助模块在小问题的实现过程中能够实现部分小功能,来实现电路的简化;在大体系的调整修正中,可以从小模块的调整入手,实现局部微调。具有相似性的电路可以直接copy+微调,可以减少工作量,最难的地方应该是在于逻辑关系的思考。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!