【自己动手画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部分对比,如果其中一个相等就意味着命中。

目录
相关文章
|
6月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
2026 0
|
6月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
598 0
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储
|
存储 缓存 数据处理
计算机临时存储CPU运算数据
【8月更文挑战第4天】
383 8
|
存储 弹性计算 程序员
新手程序员如何阿里云服务器配置?新人开发者CPU内存带宽存储怎么选?
对于新手开发者、个人或学生选择阿里云服务器,推荐ECS经济型e实例(ecs.e-c1m1.large),适用于小型网站或轻量应用。配置2核2G内存、3M固定带宽、40G ESSD系统盘,仅99元/年且续费同价。
|
运维 DataWorks 安全
DataWorks产品使用合集之如何查看空间资源、CPU、内存和存储空间容量
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
存储 弹性计算 监控
【阿里云弹性计算】深入阿里云ECS配置选择:CPU、内存与存储的最优搭配策略
【5月更文挑战第20天】阿里云ECS提供多种实例类型满足不同需求,如通用型、计算型、内存型等。选择CPU时,通用应用可选1-2核,计算密集型应用推荐4核以上。内存选择要考虑应用类型,内存密集型至少4GB起。存储方面,系统盘和数据盘容量依据应用和数据量决定,高性能应用可选SSD或高效云盘。结合业务特点和预算制定配置方案,并通过监控应用性能适时调整,确保资源最优利用。示例代码展示了使用阿里云CLI创建ECS实例的过程。
625 5
|
存储 芯片 块存储
计算机组成原理(2)-----存储芯片与CPU的连接
计算机组成原理(2)-----存储芯片与CPU的连接
1119 1
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用合集之如何查看空间资源、CPU和内存以及存储空间容量
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
438 0

热门文章

最新文章