1. 从零开始:为什么要在Logisim里折腾存储器和寄存器?
如果你刚开始接触计算机组成原理或者数字逻辑设计,听到“存储扩展”、“MIPS寄存器文件”这些词,可能头都大了。别慌,我刚开始学的时候也一样,感觉这玩意儿全是抽象的概念和冰冷的电路图。但后来我发现,用Logisim这个软件来动手搭一遍,感觉就完全不一样了。它就像一个数字电路的“乐高”模拟器,所有门电路、芯片、连线你都能用鼠标拖拽出来,接上就能看到信号怎么跑的。今天,我就想跟你分享我当年在Logisim里,从最基础的存储芯片扩展,一直做到一个简化版MIPS CPU核心部件——寄存器文件的完整过程。这不仅仅是完成一个实验作业,更是帮你把课本上那些天书一样的原理,变成手里看得见、摸得着(虽然是虚拟的)、能跑起来的电路。你会发现,计算机底层那些神奇的功能,比如存数据、取数据、做运算,归根结底就是这些简单的逻辑门和连线在按规则工作。
咱们这次要攻克的,主要是两个大关卡。第一个是“存储扩展实验”。简单说,你手头有几块不同大小的“存储砖头”(ROM芯片),任务是把它们巧妙地拼接、组合起来,做成一块更大、更符合我们需求(比如存汉字字模)的“存储墙”。这就像你用多块小积木拼成一个大模型,中间涉及到怎么给每块积木分配任务(片选),怎么把数据通路合并(字扩展)。第二个关卡是“MIPS寄存器文件设计”。寄存器你可以理解为CPU内部超高速、但数量很少的小仓库,是CPU运算时直接打交道的地方。我们要用基本的触发器、多路选择器这些元件,亲手搭建一个包含4个仓库(寄存器)的管理系统,实现存数据、取数据、以及保证0号仓库永远清空(值为0)的特殊规则。听起来是不是有点挑战性?别担心,跟着我的步骤和踩过的坑,你一定能顺利通关,而且会对计算机内部运作有豁然开朗的理解。
2. 汉字字库搭建实战:把多块小ROM拼成一块大“画板”
2.1 理解任务:我们要做一个什么样的“汉字点阵打印机”?
先来看看第一个项目的具体目标。我们手头的“积木”是:4片4K×32位的ROM和7片16K×32位的ROM。这里的“4K”、“16K”指的是地址空间,可以理解成这个存储芯片能存多少条信息;“32位”指的是每条信息的宽度,也就是一次能输出32个二进制位(0或1)。我们的终极目标是构建一个16K×16点阵的GB2312汉字字库。
这具体是什么意思呢?GB2312是我国早期的一套汉字编码标准,每个汉字用一个“区号”和一个“位号”来定位,就像一个大表格的行和列。而“16×16点阵”是指显示一个汉字,需要用16行、每行16个点(共256个点)的亮灭来表示其形状。每个点对应一个二进制位(1亮0灭)。所以,存储一个汉字,就需要256位的信息。我们的电路输入是汉字的区号和位号,输出则是这个汉字对应的256位点阵信息。
但问题来了:我们手头每片ROM的输出宽度是32位,一次只能给出32个点。要凑齐256个点,就需要8次输出(256 ÷ 32 = 8)。因此,电路需要有8个32位的输出引脚。这8个32位数据,按顺序组合起来,就是这个汉字的完整点阵。你可以把它想象成一个汉字点阵数据的“并行输出端口”。工程里已经给了storage.circ文件的大框架和显示部分,我们的核心工作就是设计中间那个“黑盒子”——如何用给定的ROM芯片,正确响应输入的区号位号,并输出对应的8组32位数据。
2.2 核心挑战与破解思路:字扩展与片选的艺术
直接上手连线肯定会懵,我们先拆解一下核心挑战。手头有7片现成的16K×32位ROM,这很好,每片都能独立存储16K个32位数据。但GB2312字库的寻址空间是16K(地址线需要14根,因为2^14=16384),而我们最终需要的数据宽度是256位,也就是8个32位并行输出。所以,我们至少需要8片能输出32位数据的ROM来同时工作,才能一次凑齐256位。
但我们只有7片16K×32的,不够8片。这时候,那4片4K×32位的ROM就派上用场了。我们可以用它们来“拼出”第8片16K×32位的ROM。这就是所谓的字扩展(或位扩展):用多个容量小的芯片,通过增加地址线的方式,组合成一个容量大的芯片。具体怎么拼呢?4片4K×32位的ROM,每片能存4K(2^12)个32位数据。如果我们把它们“串联”起来,让它们响应不同范围的高位地址,那么这4片芯片就能覆盖4倍于4K的地址空间,也就是16K。这就像把四个小房间(4K)排成一排,组成一个大套房(16K),每个房间有独立的门牌号(地址高位)来区分。
这里的关键就是片选信号。我们需要一个额外的逻辑电路(通常是一个译码器),根据输入地址的最高几位(对于4片4K拼16K的情况,就是第13和12位地址线),来决定当前要访问的是这四片小ROM中的哪一片。只有被选中的那片ROM才会工作并输出数据,其他三片则处于“休眠”状态(输出高阻态,不影响总线)。在Logisim里,ROM组件通常有一个“Enable”引脚,这就是片选端,低电平有效(接0时工作)或高电平有效(接1时工作),具体要看器件说明。
所以,整体设计思路就清晰了:
- 主体部分:使用7片16K×32位ROM作为输出数据的第1至第7组。
- 补充部分:使用4片4K×32位ROM,通过一个2-4译码器(因为用2位地址线区分4片)进行片选,将它们组合成一个等效的16K×32位ROM,作为输出数据的第8组。<

425

被折叠的 条评论
为什么被折叠?



