预习报告部分
一、实验目的:
用Logisim实现CPU设计,并领会其原理及操作机制。
二、实验原理:
现代CPU的结构主要包括以下几个主要部分:
控制单元(Control Unit):负责指令的解码和执行,控制CPU内部各个部件的协调工作。
算术逻辑单元(Arithmetic Logic Unit,简称ALU):负责进行算术运算和逻辑运算,如加减乘除、比较、位移等。
寄存器(Register):用于暂时存储数据和指令,包括通用寄存器、专用寄存器和状态寄存器等。
数据寄存器(Data Register):用于临时存储CPU需要频繁访问的数据,以提高数据读取效率。
指令寄存器(Instruction Register):用于存储CPU需要执行的指令,以提高指令的获取速度。
总线(Bus):用于CPU内部各个部件之间的数据传输和通信。
时钟(Clock):用于同步CPU内部各个部件的工作节奏,一般而言所说的CPU的主频就是指的时钟计数器的频率。
程序计数器(Program counter):程序计数器,用于存储下一跳计算机指令的地址。
CPU实现的运算操作有算术运算、逻辑运算和移位。算术单元一般简单CPU实现的运算操作有算术运算、逻辑运算和移位。算术运算主要包括加法、减法、增1、减1等,逻辑运算主要包括与、或、非、异或,移位实现左移右移或者不变。用补码表示整数的时候,加减法可以统一为加法运算。加法、减法,还需要增1、减1。通过与非和异或两个门就可以设计,由两路信号输入,通过选择功能。
控制器是整个CPU的控制中心,用来控制数据的流向,程序的转移。一般来说,控制器包括程序计数器(PC),指令译码器(ID),有时也将指令寄存器(IR)放到控制器中。总的控制功能是这样实现的:程序计数器负责保存程序执行到的位置,指令寄存器保存当前指令,指令译码器把指令转化成控制字。
三、实验内容:
通过运用Logisim软件进行模拟设计,设计并实现一个具备一定操作功能的CPU。通过熟练使用logisim软件,熟悉CPU的各个部分的作用以及具体运行过程,设计出一个完整的简易的CPU。
四、实验所用设备: PC计算机,Logisim软件
五、实验步骤:
CPU的指令执行过程可以简单地描述为以下几个步骤:
1.初始化PC计数器:由程序计数器(PC)指定指令在存储器的位置。(程序计数器保存供识别程序位置的数值。换言之,程序计数器记录了CPU在程序里的踪迹。)
2.取指:根据PC,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)放到指令寄存器。
3.指令解码:CPU根据存储器提取到的指令来决定其执行行为。
3.1.首先译码,指令被拆解为有意义的片段。根据CPU的指令集架构(ISA)定义将数值解译为指令。
3.2.一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(AddiTIon)运算的运算目标。
3.3.二是分析参与这次操作的各操作数所在的地址,即操作数的有效地址。
4.执行指令:在提取和解码阶段之后,紧接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。
5.数据写回:是一条指令的最终阶段,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。
6.更新PC计数器:根据指令代码和分支标志,从前面步骤得出的结果,生成下一条指令的地址放到PC里。
实验报告部分
一、实验步骤:
1.运算器
CPU实现的运算操作有算术运算、逻辑运算和移位。算术运算主要包括加法、减法、曾1、减1等,逻辑运算主要包括与、或、非、异或,移位实现左移右移或者不变。
(1)算术单元
使用一个的4选一数据选择器和一个加法器构建出一个算术单元,使用A和B进行数据输入,使用S1、S0和Cin进行不同功能的选择。
A和B是8路数据输入,S1、S0和Cin进行功能选择,右侧输出结果
(2)算术逻辑单元
将算术单元和逻辑单元结合起来,算术逻辑单元的设计旨在实现对输入A和B进行不同操作的选择,包括执行算术运算和逻辑运算。具体而言,ALU需要能够灵活地进行加法、减法、乘法、除法等算术运算,同时也能执行逻辑运算,例如与、或、非、异或等。
(3)移位器
移位器是一个重要的部件,其主要作用是对数据进行位移操作。移位器可以将二进制数据在寄存器或内存中向左或向右移动一定数量的位,实现不同的功能,通过对数据进行灵活的位移操作,提供了对各种算术和逻辑运算的支持。
(4)综合
当运算的结果超过最大表示范围的时候,就会发生溢出,状态标志设置了溢出OV、符号SI、进位CA、零ZO。将各个部分结合起来组成运算器。
溢出OV(算数)、符号SG(算数)、进位CA(算术移位)、零ZO(算术逻辑都有效)。
溢出OV检测:采用了对加法器的符号进位和最高进位进行异或运算以实现溢出判定,因此在布线时将加法器拆成了7bit+1bit。1表示溢出。
符号SG检测:通过检测加法器输出的符号位即可得出符号,为1时表示负数。
进位CA检测:移位操作移出的位或者是加法器最高位进位,因此需要在不同的操作时选用不同的线路,1表示进位。
零ZO检测:当输出为零时,所有位一定为零,因此逻辑就是全零得一,可用或非门实现。为1时,表示结果为0。
2.寄存器组
先对寄存器进行写入,并指定对哪一个寄存器写,用地址来表示一个具体的寄存器,然后从寄存器中取两个操作数输入运算器,寄存器组中有两个输出,这两个输出要分别选择连接到两个寄存器,实现选择两个寄存器分别输出到A、B两端。
3.控制器
控制器是整个CPU的控制中枢,主要任务是精确地管理和指导数据在CPU内的流动,以及有效地掌控程序的执行流程。通过生成适时的控制信号,控制器引导各个部件按照指令序列协调工作,确保数据在寄存器、运算器等部件之间正确传递。控制器包括程序计数器,指令译码器,指令寄存器。
(1)程序计数器
程序计数器存储着当前正在执行的指令的内存地址。当CPU需要执行下一条指令时,它从程序计数器中读取地址,并将其发送到内存,以获取相应的指令。程序计数器可以用寄存器、加法器和数据选择器实现。如果要顺序执行,则MUX选择常数01,指令所在地址每次加一,如果要跳转,则MUX选择下方的通路,下一条指令地址为当前地址加上偏移量。
(2)指令寄存器
指令寄存器存储当前指令的二进制表示。当控制器从内存中读取下一条指令时,该指令会被加载到指令寄存器中,以供CPU执行。
(3)控制字
通过控制字,将各个通路的控制信号汇集起来,组合成一个二进制数,通过一个二进制数实现对整个CPU内部各个功能的控制。
(4)指令译码器
指令译码器主要作用是解析和翻译从指令寄存器中读取的二进制指令。指令译码器负责理解指令的操作类型、操作数、以及执行方式,并生成相应的控制信号,以指导CPU的其他部分执行正确的操作。
其功能包括两个寄存器运算、寄存器加常量运算、写读主存、跳转。
(5)综合
4.CPU综合
1.运算器的封装:将算术逻辑单元、移位器、溢出检测等组件整合到一个模块中。
2.寄存器组的封装:是将多个寄存器单元整合到一个模块中。对每个寄存器单元添加使能端,确保在需要写入数据时进行使能。
3.控制器的封装:将程序计数器、状态寄存器、指令寄存器和指令译码器整合到一个模块中。
综合:
在一个指令周期过程中,首先,先从ROM中取指令,通过时钟的上升沿,将指令传送至指令寄存器。然后,经过指令译码、运算器处理或RAM读取等步骤,需要在第二个时钟上升沿触发相应操作。这确保了指令的解析、运算或数据访问等操作在正确的时钟周期内完成。其次,需要将运算器的计算结果或RAM中读取的数据需要送至寄存器组,因此寄存器组的操作需要第三个时钟上升沿。这确保了数据的正确传递和存储。最后,在第四个时钟上升沿时触发时,更新修改程序计数器以指向下一条指令。
综上所述,一个指令周期需要四个机器周期,且可以使用时钟发生器、一个四进制计数器和一个译码器实现。
二、实验数据及结果分析:
输入一条跳转指令,如jmp -5指令为80fb,即往上跳5个地址。如图所示
经过四次时钟上升沿,执行了跳转指令。
三、实验结论:
在本次实验过程中,我首先根据指令集和数据通路图设计了CPU的基本框架,然后逐步添加了各种控制信号和数据传输路径。通过不断调整和优化,我成功实现了一个能够执行基本指令集的CPU。同时通过在Logisim软件上实现CPU组建和功能实现实验的过程中,我深入了解到了计算机组成原理的基本概念和实际运作方式。通过设计运算器,寄存器,控制器等部分,以及对logisim软件的使用,我深入学习了计算机系统结构和数字逻辑设计的原理,进行了详细的模拟设计,这个综合性的设计过程不仅强调了各个模块的协同作业,同时也展现了整个CPU系统的高效运转,验证了CPU的功能和性能,并且保证了设计的准确性和可靠性,实现了实验预期的功能。
四、总结及心得体会:
在进行CPU设计实验的过程中,我深刻领悟到了理论知识与实践应用之间的桥梁作用。这一过程不仅锻炼了我的技术能力,尤其是在数字电路设计和计算机体系结构方面,还提升了我的创新思维和问题解决技巧。在使用 Logisim 进行 CPU 设计的过程中,我积累了许多宝贵的经验和心得。首先,设计 CPU 需要深入理解计算机体系结构和数字电路原理。通过 Logisim,我深入学习了算术逻辑单元、寄存器组、控制器等核心组件的设计与实现,这为我打下了坚实的基础。其次,时钟同步是设计中的一个重要考虑因素。在 Logisim 中,合理设置时钟同步确保了各个模块之间的协同工作,确保 CPU 在整个时钟周期内能够正确执行指令。在实现算术运算、逻辑运算、寄存器读写等功能时,我深刻体会到了每个模块的重要性。合理的模块划分、清晰的功能定义以及模块之间的高效连接,是实现一个稳健 CPU 的关键。通过Logisim工具,我学会了如何将抽象的理论概念转化为实际可操作的电路设计。此外,通过沟通交流解决问题我也明白了在项目中沟通和协调的重要性。总体而言,这次实验不仅增强了我的专业知识,也为我未来在技术领域的发展奠定了坚实基础。