【自己动手画CPU】控制器设计(二)

简介: 作者深入探讨了自制CPU的控制器设计,为自学者提供了宝贵的实践指导。文章详细介绍了控制器的设计原理与关键步骤,涵盖了寄存器的配置、指令的执行以及时序控制等方面内容。通过图文并茂的演示,读者可以清晰了解如何从零开始搭建一个基本的控制器,并使其能够执行简单的指令。作者以通俗易懂的方式呈现技术细节,使初学者能够轻松理解和模仿。

1.gif

7dd2b7f171704327b7d8987c49da4628.gif


🌷1. 闯关目的

🌼第1关:8位可控加减法电路设计

(1) 掌握一位全加器的实现逻辑和多位可控加减法电路的实现逻辑;

(2) 熟悉 Logisim 平台基本功能,能在 logisim 中实现多位可控加减法电路。

🌼第2关:原码一位乘法器设计

(1) 掌握原码一位乘法运算的基本原理;

(2) 熟练掌握 Logisim 寄存器电路的使用,能在 Logisim 平台中设计实现一个 8*8位的无符号数乘法器。

🌼第3关:MIPS运算器设计

(1) 理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法;

(2) 熟悉多路选择器的使用,能利用前述实验完成的32位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。

🌼第4关:汉字字库存储芯片扩展实验

(1) 理解存储系统进行位扩展、字扩展的基本原理;

(2) 使用相关原理解决实验中汉字字库的存储扩展问题,并能够使用正确的字库数据填充。

🌼第5关:寄存器文件设计

(1) 理解 MIPS 寄存器文件基本概念;

(2) 熟悉多路选择器、译码器、解复用器等 Logisim 组件的使用,使用相关组件构建 MIPS 寄存器文件。

🌼第6关:MIPS RAM设计

(1) 理解主存地址基本概念以及理解存储位扩展基本思想;

(2) 使用相关原理构建能同时支持字节、半字、字访问的存储子系统。

🌼第7关:4路组相连cache设计

(1) 掌握 cache 实现的三个关键技术:数据查找,地址映射,替换算法;

(2) 熟悉译码器,多路选择器,寄存器的使用,能根据不同的映射策略在 Logisim 平台中用数字逻辑电路实现 cache 机制。

🌼第8关:单周期MIPS CPU设计

(1) 掌握控制器设计的基本原理,利用硬布线控制器的设计原理,在 Logisim 平台中设计实现 MIPS 单周期 CPU。

🌼第9关:微程序地址转移逻辑设计

(1) 理解微程序控制器中微程序分支的基本原理,要求能设计微地址转移逻辑。

🌼第10关:MIPS微程序CPU设计

(1) 掌握微程序控制器设计的基本原理,能利用微程序控制器的设计原理,设计实现多周期 MIPS 处理器。

🌼第11关:硬布线控制器状态机设计

(1) 理解硬布线控制器中有限状态机FSM的基本原理,要求能设计控制器状态机逻辑。

🌼第12关:多周期MIPS硬布线控制器CPU设计(排序程序)

(1) 理解 MIPS 多周期处理器的基本原理,能利用硬布线控制器的设计原理,设计实现 MIPS 多周期 CPU。

图4.2-4

🌷2. 闯关内容

🌼第1关:8位可控加减法电路设计

在 Logisim 模拟器中打开 alu.circ 文件,在对应子电路中利用已经封装好的全加器设计8位串行可控加减法电路,用户可以直接使用在电路中使用对应的隧道标签,其中 X,Y 为两输入数,Sub 为加减控制信号,S 为运算结果输出,Cout 为进位输出,OF 为有符号运算溢出位。

🌼第2关:原码一位乘法器设计

在 alu.circ 文件中的原码一位乘法器子电路中,增加控制电路和数据通路,使得该电路能自动完成8位无符号数的一位乘法运算。再设置引脚初始值,然后驱动时钟自动仿真,电路可自动完成运算。运算结束,结果传输到输出引脚。运算结束时,实验框架如图4.2-1所示:

图4.2-1

🌼第3关:MIPS运算器设计

利用前面实验封装好的32位加法器以及 Logisim 平台中现有运算部件,构建一个32位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号溢出 OF 、无符号溢出 UOF ,结果相等 Equal ),ALU 功能以及输入输出引脚见后表,在主电路中详细测试自己封装的 ALU ,并分析该运算器的优缺点,实验框架如图4.2-2所示:

图4.2-2

🌼第4关:汉字字库存储芯片扩展实验

现有如下 ROM 组件,4片4K*32位 ROM ,7片  16K*32位 ROM,请在 Logisim 平台构建 GB2312 汉字编码的16K*16点阵汉字字库,电路输入为汉字区号和位号,电路输出为8×32位(16K*16=256 位点阵信息),具体参见工程文件中的 storage.circ 文件,分别对应汉字区位码的区号和位号,中间区域为8个32位的输出引脚,可一次性提供一个汉字的256位点阵显示信息,右侧是实际显示区域,用于观测汉字显示是否正常。待完成字库子电路封装已经完成,请勿修改以免影响后续自动测试功能。

🌼第5关:寄存器文件设计

使用 Logisim 平台构建一个简化的 MIPS 寄存器文件,内部包含4个32位寄存器。

🌼第6关:MIPS RAM设计

Logisim 中 RAM 组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用4个8位的 RAM 组件进行扩展,设计完成既能按照8位、也能按16位、也能按照32位进行读写访问的32位存储器。

🌼第7关: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位数据。

🌼第8关:单周期MIPS CPU设计

利用运算器实验,存储系统实验中构建的运算器、寄存器文件、存储系统等部件以及 Logisim 中其它功能部件,构建一个32位 MIPS CPU 单周期处理器。

🌼第9关:微程序地址转移逻辑设计

图4.2-3

设计如上电路,根据指令译码信号生成微程序入口地址。

🌼第10关:MIPS微程序CPU设计

对照多周期 MIPS 处理器数据通路,采用微程序控制器的设计方法实现控制器,构造多周期 MIPS 处理器,要求能支持表中的8条 MIPS 核心指令,最终设计实现的 MIPS 处理器能运行实验包中的冒泡排序测试程序 sort.asm,该程序自动在数据存储器0~15号字单元中写入16个数据,然后利用冒泡排序将数据升序排序。实验电路应能自动统计指令数目、时钟周期数。

🌼第11关:硬布线控制器状态机设计

在logisim中打开实验资料包中的 data.circ 文件,在对应电路中完成偶校验检错电路。输入:17位校验码,校验位存放在最高位;输出:16位原始数据,1位检错位;实验电路输入输出引脚定义,注意17位校验码的每一位都通过分线器利用隧道标签引出,方便实验时使用。

🌼第12关:多周期MIPS硬布线控制器CPU设计(排序程序)

(1) 构建主要功能部件和数据通路

在 Logisim 平台中设计 MIPS 多周期处理器所需的主要功能部件,其中寄存器文件使用 cs3410 中的标准库,其中运算器既可以使用运算器实验中自行设计的运算器,也可以使用标准库中的 ALU 模块,构建多周期 MIPS 处理器数据通路,最终将各功能部件连接形成数据通路。

图4.2-4

(2) 构建硬布线控制器

根据给定的状态机,构建硬布线控制器

图4.2-5

要求支持8条基本指令

图4.2-6

图4.2-7

🌷3. 闯关步骤

🌼第1关:8位可控加减法电路设计

图4.2-8

🌼第2关:原码一位乘法器设计

图4.2-9

🌼第3关:MIPS运算器设计

图4.2-10

🌼第4关:汉字字库存储芯片扩展实验

图4.2-11

🌼第5关:寄存器文件设计

图4.2-12

图4.2-13

🌼第6关:MIPS RAM设计

图4.2-14

图4.2-15 测试

🌼第7关:4路组相连cache设计

图4.2-16

🌼第8关:单周期MIPS CPU设计

图4.2-17

🌼第9关:微程序地址转移逻辑设计

图4.2-18

🌼第10关:MIPS微程序CPU设计

图4.2-19

🌼第11关:硬布线控制器状态机设计

图4.2-20

🌼第12关:多周期MIPS硬布线控制器CPU设计(排序程序)

图4.2-21

🌷4. 闯关总结

🌼第1关:8位可控加减法电路设计

1. 并行加法器:进位输出仅与最低位进位输入C0有关(Cn=Gn+PnGn-1+PnPn-1Gn-2+PnPn-1Pn-2Gn-3 …+PnPn-1…P1C0),而不是依赖于低位进位(Cn= Gn + Pn Cn-1)。

2. 硬件实现:可控反相异或门。配合异或门,Sub通过置0置1,既能实现Y和非Y,同时还能作为Cin的0、1信号输入;OF为溢出标志位,溢出输出1(这里1为高电平)。判断有符号数加减运算是否溢出的硬件实现:最高有效位的进位⊕符号位的进位,1表示溢出。

🌼第2关:原码一位乘法器设计

1. 位移次数控制:采用计数器+比较器的硬件实现,控制右移9次即可(题目中有提示),LOAD在=0时,给到1信号;将b送入右侧寄存器中,其他时候都=0就按照位移情况对右侧寄存器开展更新

2. 位移的实现:采用上下四组8位宽分离器实现,左边高位右边低位,乘积右移,最高位有八位加法器的进位输入得到,右移弹出的数据用于数据选择器部署下次是+0还是+a。

🌼第3关:MIPS运算器设计

1. 通关设计:利用前面实验封装好的 32 位加法器以及 logisim 平台中现有运算部件构建一个 32 位算术逻辑运算单元,通过多路选择器处理,将加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移分别进行运算并得到结果,通过多路选择器将所选运算方式对应的结果给Result,乘除运算时将高位结果或者余数给Result2,其余情况下Result2结果为0。

2. 使用移位器实现逻辑左移、右移、算数右移运算。

🌼第4关:汉字字库存储芯片扩展实验

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连接,完成字扩展。

🌼第5关:寄存器文件设计

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个读寄存器的编号。

🌼第6关:MIPS RAM设计

1. 00 表示字访问,01 表示 1 字节访问 (即单字节访问),10 表示 2 字节访问 (即半字访问)。

2. 实验中字32bit,单字节8bit,半字为16bit地址在字访问时忽略最低两位;半字访问时忽略最低位,倒数第二位为片选;字节访问时,第二位需要进行片选。为避免存储单元中的数据被覆盖,需要根据Mode和低二位决定4个存储器谁被存储。

🌼第7关: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位。

🌼第8关:单周期MIPS CPU设计

1. 理解了单周期MIPS CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。

2. 出现”can not find jar library cs3410.jar”,由于 cs3410.jar 和测试平台中的 cs3410.jar 路径不一样,可将本地 cs3410.jar 先移动到 cpu.circ 同目录下后,打开 cpu.circ,logisim 会提示找不到 cs3410.jar,重新指向同目录 cs3410.jar,存盘退出,再重新上传电路文本内容即可解决。

🌼第9关:微程序地址转移逻辑设计

1. 地址转移逻辑电路用于产生下一条微指令的地址,主要由两级与门、或门构成。地址转移逻辑需要用到的数据信号有:后续微地址 μA3-μA0 、判别位 P1 、指令操作码 IR7-IR5 。

2. 微地址寄存器 74LS175 为控制存储器提供微指令地址。当 CLR = 0 时,微地址寄存器清零,从控制存储器 00H 地址开始执行微程序,地址转移逻辑生成下一条微指令的地址,如果时序信号连续发生,微指令也会按一定的顺序接连输出。

🌼第10关:MIPS微程序CPU设计

1. 设计思路:在MIPS多周期CPU(微程序)子电路中,构建CPU数据通路 PC、MEM、IR、DR、RegFile、ALU、Controller。

2. 实现微程序地址转移逻辑由指令状态变换图可知。

🌼第11关:硬布线控制器状态机设计

设计思路:首先分析所有指令的执行周期、间址周期、执行周期、中断周期的微操作序列,其中执行周期、间址周期、中断周期的微操作序列对所有指令时通用的,不同指令的执行周期不同;然后选择CPU的控制方式,每条指令都是对应的微操作序列构成,然后对第一步微操作序列划分到各个机器周期的节拍中绘制机器周期、节拍、指令的所有微操作图,以此写出每个微操作的组合逻辑表达式,以此进行电路设计。

🌼第12关:多周期MIPS硬布线控制器CPU设计(排序程序)

多周期MIPS CPU硬布线控制器设计和单周期CPU相比,仅是微指令控制器改变成硬布线控制器,而其他部分并未改变,所以数据通路部分和微指令控制器多周期MIPS CPU一样。

目录
相关文章
|
2月前
|
存储 缓存 并行计算
CPU组成元素:运算器+控制器(一)
CPU组成元素:运算器+控制器
85 0
|
5月前
|
存储 数据处理 vr&ar
②CPU - 运算器、控制器 【软考-软件设计师考点】
②CPU - 运算器、控制器 【软考-软件设计师考点】
199 0
|
2月前
|
存储 缓存 调度
CPU组成元素:运算器+控制器(二)
CPU组成元素:运算器+控制器
46 0
|
7月前
|
存储 调度
CPU 中控制器的作用
CPU 中控制器的作用
207 0
|
3月前
|
安全 机器人
ABB PLC自动化可编程逻辑控制器PLC AC500型 CPU
ABB PLC自动化可编程逻辑控制器PLC AC500型 CPU
|
3月前
|
开发框架 .NET Java
【自己动手画CPU】控制器设计(一)
《自己动手画CPU》系列博文探讨了一项令人兴奋的计算机科学项目——CPU控制器的设计。在第一篇文章中,作者深入介绍了控制器的设计理念和基本原理。文章首先解释了CPU控制器在计算机系统中的关键作用,然后详细讨论了设计过程中的重要步骤和考虑因素。通过作者的生动解说,读者将了解到CPU控制器设计的基本概念,并感受到从零开始构建计算机核心部件的挑战与乐趣。
115 1
【自己动手画CPU】控制器设计(一)
MOTOROLA MVME162-13 控制器将向CPU发出信
MOTOROLA MVME162-13 控制器将向CPU发出信
54 0
MOTOROLA MVME162-13 控制器将向CPU发出信
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十四章:硬布线控制器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十四章:硬布线控制器
106 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十三章:微程序控制器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十三章:微程序控制器
120 0
|
存储 网络协议 编译器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第八章:彩灯控制器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第八章:彩灯控制器
101 0