🌷1. 闯关目的
🌼第1关:汉字字库存储芯片扩展实验
(1) 理解存储系统进行位扩展、字扩展的基本原理;
(2) 使用相关原理解决实验中汉字字库的存储扩展问题,并能够使用正确的字库数据填充。
🌼第2关:MIPS寄存器文件设计
(1) 理解 MIPS 寄存器文件基本概念;
(2) 熟悉多路选择器、译码器、解复用器等 Logisim 组件的使用,使用相关组件构建 MIPS 寄存器文件。
🌼第3关:MIPS RAM设计
(1) 理解主存地址基本概念以及理解存储位扩展基本思想;
(2) 使用相关原理构建能同时支持字节、半字、字访问的存储子系统。
🌼第4关:全相联cache设计
(1) 掌握 cache 实现的三个关键技术:数据查找,地址映射,替换算法;
(2) 熟悉译码器,多路选择器,寄存器的使用,能根据不同的映射策略在 Logisim 平台中用数字逻辑电路实现 cache 机制。
🌼第5关:直接相联cache设计
(1) 掌握 cache 实现的三个关键技术:数据查找,地址映射,替换算法;
(2) 熟悉译码器,多路选择器,寄存器的使用,能根据不同的映射策略在 Logisim 平台中用数字逻辑电路实现 cache 机制。
🌼第6关:4路组相连cache设计
(1) 掌握 cache 实现的三个关键技术:数据查找,地址映射,替换算法;
(2) 熟悉译码器,多路选择器,寄存器的使用,能根据不同的映射策略在 Logisim 平台中用数字逻辑电路实现 cache 机制。
🌼第7关:2路组相联cache设计
(1) 掌握 cache 实现的三个关键技术:数据查找,地址映射,替换算法;
(2) 熟悉译码器,多路选择器,寄存器的使用,能根据不同的映射策略在 Logisim 平台中用数字逻辑电路实现 cache 机制。
🌷2. 闯关内容
🌼第1关:汉字字库存储芯片扩展实验
现有如下 ROM 组件,4片4K*32位 ROM ,7片 16K*32位 ROM,请在 Logisim 平台构建 GB2312 汉字编码的16K*16点阵汉字字库,电路输入为汉字区号和位号,电路输出为8×32位(16K*16=256 位点阵信息),具体参见工程文件中的 storage.circ 文件,分别对应汉字区位码的区号和位号,中间区域为8个32位的输出引脚,可一次性提供一个汉字的256位点阵显示信息,右侧是实际显示区域,用于观测汉字显示是否正常。待完成字库子电路封装已经完成,请勿修改以免影响后续自动测试功能。
🌼第2关:MIPS寄存器文件设计
使用 Logisim 平台构建一个简化的 MIPS 寄存器文件,内部包含4个32位寄存器。
🌼第3关:MIPS RAM设计
Logisim 中 RAM 组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用4个8位的 RAM 组件进行扩展,设计完成既能按照8位、也能按16位、也能按照32位进行读写访问的32位存储器。
🌼第4关:全相联cache设计
在Logisim 中设计完成的 cache 系统自动测试电路,为简化实验设计,这里所有 cache 模块均为只读 cache(类似指令 cache),无写入机制。电路左侧计数器与存储器部分会在时钟驱动下逐一生成地址访问序列给 cache 模块。计数器模块的使能端受命中信号驱动,缺失时使能端无效,计数器不计数,等待系统将待请求数据所在块从二级存储器中调度到 cache 后才能继续计数。cache 与二级存储器之间通过块交换逻辑实现数据块交换,由于二级存储器相比 cache 慢很多,所以一次块交换需要多个时钟周期才能完成,cache 模块判断数据块准备好的逻辑是 blkready 信号有效,该信号有效且时钟到来时,cache 将块数据从 BlkDin 端口一次性载入到对应cache 行缓冲区中,此时 cache 数据命中,直接输出请求数据,解锁计数器使能端,继续访问下一个地址。
自动测试电路会逐一取出 trace 存储器中的主存地址去访问存储系统,并逐一将数据从 cache 模块取出送校验和计算电路计算校验和,计数器值为256时会停止电路运行,此时所有存储访问的 cache 命中率将会在右上角 LED 数码管显示。本次实验的主要任务就是设计该电路的核心模块 cache 子电路。
结合引脚功能说明,实现全相联 cache 模块,该 cache 模块共包括8个 cache 行,每个数据块包含包括4个字节共32位数据。
🌼第5关:直接相联cache设计
在Logisim 中设计完成的 cache 系统自动测试电路,为简化实验设计,这里所有 cache 模块均为只读 cache(类似指令 cache),无写入机制。电路左侧计数器与存储器部分会在时钟驱动下逐一生成地址访问序列给 cache 模块。计数器模块的使能端受命中信号驱动,缺失时使能端无效,计数器不计数,等待系统将待请求数据所在块从二级存储器中调度到 cache 后才能继续计数。cache 与二级存储器之间通过块交换逻辑实现数据块交换,由于二级存储器相比 cache 慢很多,所以一次块交换需要多个时钟周期才能完成,cache 模块判断数据块准备好的逻辑是 blkready 信号有效,该信号有效且时钟到来时,cache 将块数据从 BlkDin 端口一次性载入到对应cache 行缓冲区中,此时 cache 数据命中,直接输出请求数据,解锁计数器使能端,继续访问下一个地址。
自动测试电路会逐一取出 trace 存储器中的主存地址去访问存储系统,并逐一将数据从 cache 模块取出送校验和计算电路计算校验和,计数器值为256时会停止电路运行,此时所有存储访问的 cache 命中率将会在右上角 LED 数码管显示。本次实验的主要任务就是设计该电路的核心模块 cache 子电路。
结合引脚功能说明,实现全相联 cache 模块,该 cache 模块共包括8个 cache 行,每个数据块包含包括4个字节共32位数据。
🌼第6关:4路组相连cache设计
在Logisim 中设计完成的 cache 系统自动测试电路,为简化实验设计,这里所有 cache 模块均为只读 cache(类似指令 cache),无写入机制。电路左侧计数器与存储器部分会在时钟驱动下逐一生成地址访问序列给 cache 模块。计数器模块的使能端受命中信号驱动,缺失时使能端无效,计数器不计数,等待系统将待请求数据所在块从二级存储器中调度到 cache 后才能继续计数。cache 与二级存储器之间通过块交换逻辑实现数据块交换,由于二级存储器相比 cache 慢很多,所以一次块交换需要多个时钟周期才能完成,cache 模块判断数据块准备好的逻辑是 blkready 信号有效,该信号有效且时钟到来时,cache 将块数据从 BlkDin 端口一次性载入到对应cache 行缓冲区中,此时 cache 数据命中,直接输出请求数据,解锁计数器使能端,继续访问下一个地址。
自动测试电路会逐一取出 trace 存储器中的主存地址去访问存储系统,并逐一将数据从 cache 模块取出送校验和计算电路计算校验和,计数器值为256时会停止电路运行,此时所有存储访问的 cache 命中率将会在右上角 LED 数码管显示。本次实验的主要任务就是设计该电路的核心模块 cache 子电路。
结合引脚功能说明,实现全相联 cache 模块,该 cache 模块共包括8个 cache 行,每个数据块包含包括4个字节共32位数据。
🌼第7关:2路组相联cache设计
在Logisim 中设计完成的 cache 系统自动测试电路,为简化实验设计,这里所有 cache 模块均为只读 cache(类似指令 cache),无写入机制。电路左侧计数器与存储器部分会在时钟驱动下逐一生成地址访问序列给 cache 模块。计数器模块的使能端受命中信号驱动,缺失时使能端无效,计数器不计数,等待系统将待请求数据所在块从二级存储器中调度到 cache 后才能继续计数。cache 与二级存储器之间通过块交换逻辑实现数据块交换,由于二级存储器相比 cache 慢很多,所以一次块交换需要多个时钟周期才能完成,cache 模块判断数据块准备好的逻辑是 blkready 信号有效,该信号有效且时钟到来时,cache 将块数据从 BlkDin 端口一次性载入到对应cache 行缓冲区中,此时 cache 数据命中,直接输出请求数据,解锁计数器使能端,继续访问下一个地址。
自动测试电路会逐一取出 trace 存储器中的主存地址去访问存储系统,并逐一将数据从 cache 模块取出送校验和计算电路计算校验和,计数器值为256时会停止电路运行,此时所有存储访问的 cache 命中率将会在右上角 LED 数码管显示。本次实验的主要任务就是设计该电路的核心模块 cache 子电路。
结合引脚功能说明,实现全相联 cache 模块,该 cache 模块共包括8个 cache 行,每个数据块包含包括4个字节共32位数据。
🌷3. 闯关步骤
🌼第1关:汉字字库存储芯片扩展实验
图3-1
图3-2 测试
🌼第2关:MIPS寄存器文件设计
图3-3
图3-4 测试
🌼第3关:MIPS RAM设计
图3-5
图3-6 测试
🌼第4关:全相联cache设计
图3-6
🌼第5关:直接相联cache设计
图3-7
🌼第6关:4路组相连cache设计
图3-8
🌼第7关:2路组相联cache设计
图3-9
🌷4. 闯关总结
🌼第1关:汉字字库存储芯片扩展实验
1. 通关设计:利用区号和位号进行检索的字形码存储器,区位码转逻辑电路:(区号-1)*94+位号-1,而一个汉字字形码需要3232=1024位,在logisim中ROM存储器最多32位应进行位扩展,则需要1024/32=32片16K32位ROM,根据实验要求,实现16*16点阵标准汉字字库即可,256/32=8片16K×32位ROM,将逻辑地址送到八个ROM地址端进行并发,根据实验任务,利用四片小容量(4K×32位)ROM进行字扩展替换原有存储器(16K×32位)。
2. 4K×32位ROM中地址线是12位,16K×32位ROM中地址线的位数是14位,将4片小容量ROM的地址端并联,将并联后的地址段在分线器的0-11端,然后通过分线器将14位地址线的高两位(12-13端)引出连接在2-4译码器的输入端,而译码器的输出端分别与四个ROM的sel端连接,最后将4片小容量ROM数据段并联和D1连接,完成字扩展。
🌼第2关:MIPS寄存器文件设计
1. 通关设计:第0号寄存器的值始终为零,用常量0的32位数据位宽接入第0号寄存器的输入。将Din的隧道接入剩下的3个寄存器输入处。用一个解复用器完成WE对4个寄存器的使能端输入,W#为其选择端接口,并且为了简化实验过程,R1#R2#W#都只有2位位宽,也便于与解复用器的位宽对接。将CLK与4个寄存器的时钟接口对接。使用多路选择器完成寄存器RD1和RD2的输出,RD1和RD2为R1#和R2#的值。选择端接入R1#和R2#,R1#和R2#分别为第1个和第2个读寄存器的编号。
🌼第3关:MIPS RAM设计
1. 00 表示字访问,01 表示 1 字节访问 (即单字节访问),10 表示 2 字节访问 (即半字访问)。
2. 实验中字32bit,单字节8bit,半字为16bit地址在字访问时忽略最低两位;半字访问时忽略最低位,倒数第二位为片选;字节访问时,第二位需要进行片选。为避免存储单元中的数据被覆盖,需要根据Mode和低二位决定4个存储器谁被存储。
🌼第4关:全相联cache设计
1. cache的地址格式:cache的容量是16KB,所以按字编码的话,cache的总线长度是14位。块的大小是512B,即块内地址是9位。因此块标记 14-9=5位,所以cache一共有32行。
2. 清零中的毛刺问题解决:清零动作改成同步清零,具体可以增加一个D触发器,将清零信号接输入,输出接异步清零,并且D触发器时钟触发方式修改为上跳沿。
🌼第5关:直接相联cache设计
1. cache更新策略说明当发生cache命中时,写操作应该如何更新数据。cache更新策略分成两种:写直通和回写。
2. 此次试验可以模仿第4关进行解决。
🌼第6关:4路组相连cache设计
通关设计:将cache分成4路,因此每路大小是8 KB。cache line size是32 Bytes,因此一共有256组(8 KB / 32 Bytes)。由于cache line size是32 Bytes,所以offset需要5位。一共256组,所以index需要8位,剩下的就是tag部分,占用35位。
🌼第7关:2路组相联cache设计
通关设计:将cache分成2路,每路包含4行cache line。一个组有两个cache line,总共4个组,假设从地址0x0654地址读取一个字节数据。由于cache line size是8 Bytes,因此offset需要3 bits,这和之前直接映射缓存一样。不一样的地方是index,在两路组相连缓存中,index只需要2 bits,因为一路只有4行cache line。先根据index找到set,然后将组内的所有cache line对应的tag取出来和地址中的tag部分对比,如果其中一个相等就意味着命中。