【自己动手画CPU】存储系统设计

简介: 博文“【自己动手画CPU】存储系统设计”探讨了在自制 CPU 中存储系统的设计。存储系统是计算机中至关重要的组成部分,负责存储和检索数据。文章介绍了在 DIY CPU 中实现存储系统的关键考虑因素,包括存储器的类型、存储器与 CPU 的连接方式以及数据存取的速度和效率。通过深入探讨存储系统的设计原理和实现方式,读者可以更好地理解计算机内部结构,并且为自己动手设计和构建 CPU 提供了有益的指导和启发。

1.gif 7dd2b7f171704327b7d8987c49da4628.gif


🌷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部分对比,如果其中一个相等就意味着命中。

目录
相关文章
|
8月前
|
存储 弹性计算 缓存
阿里云服务器u1性能如何?CPU主频、内存、存储及带宽说明
阿里云服务器u1性能如何?CPU主频、内存、存储及带宽说明
211 0
|
12月前
|
存储 弹性计算 缓存
阿里云服务器u1性能如何?CPU主频、内存、存储及带宽说明
阿里云服务器u1性能如何?CPU主频、内存、存储及带宽说明,阿里云服务器u1通用算力型Universal实例高性价比,CPU采用Intel(R) Xeon(R) Platinum,主频是2.5 GHz,云服务器U1实例的基准vCPU算力与5代企业级实例持平,最高vCPU算力与6代企业级实例持平,提供2c-32c规格和1:1/2/4/8丰富配比,阿里云服务器u1适用于Web应用及网站,企业办公类应用,数据分析和计算等大多数通用的对vCPU算力和性能要求不高的应用场景。
236 0
|
12月前
|
存储 弹性计算 缓存
阿里云ECS服务器通用型g8i实例CPU网络存储安全性能
阿里云ECS服务器通用型g8i实例CPU网络存储安全性能,阿里云服务器ECS通用型实例规格族g8i采用2.7 GHz主频的Intel Xeon(Sapphire Rapids) Platinum 8475B处理器,3.2 GHz睿频,g8i实例采用阿里云全新CIPU架构
252 0
|
存储 弹性计算 固态存储
阿里云服务器ECS实例、CPU内存、带宽和系统盘存储选择方法来了
阿里云服务器配置如何选择?个人用户选择ECS共享型s6云服务器,1核2G、2核4G配置即可,企业公司用户可以选择独享型ECS计算型c6、通用型g7等,4核8G、8核16G、4核32G等配置,阿里云百科来详细说下不同用户选择阿里云服务器配置避坑指南
284 0
阿里云服务器ECS实例、CPU内存、带宽和系统盘存储选择方法来了
|
存储 运维 算法
CPU静默数据错误:存储系统数据不丢不错的设计思考
对于数据存储系统来说,保障数据不丢不错是底线,也是数据存储系统最难的部分。据统计,丢失数据中心10天的企业,93%会在1年内破产。那么如果想要做到数据不丢不错,我们可以采取怎样的措施呢?
CPU静默数据错误:存储系统数据不丢不错的设计思考
|
存储 测试技术 调度
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一导读
很难想象我们已经在虚拟化行业中走了这么远。那些曾经被认为只用于开发和测试使用的小技术如今已经用于生产工作,甚至用于关键业务级应用。VMware vSphere平台几乎能够无障碍地支撑任何虚拟化工作,接近100%的虚拟化。
3696 0
|
存储 测试技术
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.4 小结
本节书摘来华章计算机《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一书中的第3章 ,第3.4节,[美] 克里斯托弗·库塞克(Christopher Kusek) 著 吕南德特·施皮斯(Rynardt Spies)姚海鹏 刘韵洁 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1332 0
|
存储 测试技术
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.3.5 实验室的事后分析
本节书摘来华章计算机《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一书中的第3章 ,第3.3.5节,[美] 克里斯托弗·库塞克(Christopher Kusek) 著 吕南德特·施皮斯(Rynardt Spies)姚海鹏 刘韵洁 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1146 0
|
存储 测试技术
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.3.4 定义IOmeter的工作负载和配置
本节书摘来华章计算机《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一书中的第3章 ,第3.3.4节,[美] 克里斯托弗·库塞克(Christopher Kusek) 著 吕南德特·施皮斯(Rynardt Spies)姚海鹏 刘韵洁 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1501 0