第五章、基于Verilog的CPU设计.(DOC)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作为电子或计算机专业的学生,电脑(计算机)对于大家已经不再是什么新鲜的东西了。大 家都知道,计算机可以为我们做很多的事情,替我们节约很多时间,为我们计算各种复杂的 数据并且准且无误。那么,计算机为什么能够做这些事情呢?计算机内部到底是怎么工作的 呢?本章将为你展示计算机的主要部件的设计过程。
计算机最核心的部分叫做中央处理器,也就是我们常说的 CPU,计算机所做的工作都是由 CPU 来 完 成 的 。 当 然 , 作 为 学 习 , 我 们 不 能 够 设 计 出 类 似 奔 腾 处 理 器 ( Pentium microprocessor)的 CPU,我们用一个能够完成简单功能的简单的 CPU 作为讲解,麻雀虽小, 五脏俱全,这个简单的 cpu 具有一般 CPU 的全部基本特征。
AND addr 将 A 寄存器的内容与上存储器中的 addr 地址处的内容
HLT
停止指令的执行
前两条指令,“LDA”和“STA”是数据传输指令,就像助记符表示的那样,这些指令在 A 寄存器和存储器之间传送数据。对于 LDA 指令,“源”数据是存储器的 addr 地址处的值(也 称为内容),目的寄存器是 A 寄存器;对于 STA 指令,“源”数据是 A 寄存器,目的寄存器 是存储器的 addr 地址处的存储空间。
这里为了以后的表达方便,我们采用一种简单的方式来表示上述指令的功能,如:表示 LDA addr 指令可以用 A(addr),而 STA addr 可以用(addr)A 来表示。同样,加法指令 ADD addr 用 AA+(addr)表示,减法指令 SUB addr 用 AA - (addr)表示。“AND addr” 用 AA & (addr)表示。注意,由于这里涉及到计算的结果,我们设置了一些标志用来标识 结果的特殊性,如:Z(零标志),标识运算的结果A中为0;N(负数标志),标识运算的 结果A中小于0;V(溢出标志),标识运算的结果A溢出;C(进位标志),标识运算的结 果A中产生了进位;值得一提的是C位的处理,加法和减法对于C的处理是不一样的。对于 ADD,进位标志是A中的最高位产生了进位;对于减法,最高位产生借位将C为置1。
CPU 概览 众所周知,cpu 只能识别二进制数据,也就是机器码。所以,在 CPU 内部靠不同的二进制 序列来区别不同的机器码。我们把这些机器码存储在一个存储器中,共 CPU 读取使用。同 时,为了用户和程序员能够更好的记住机器码的含义,采用相应的助记符来表示这些机器码, 如:用 LDA 表示二进制的 000 等。这些助记符通常被称为汇编语言,不同架构的计算机的 汇编语言通常都是各不相同的。
AA+(01100)
STA 01101
(01100)A
LDA 01011
A(01011)
AND 01100
AA & (01100)
STA 01110
(01110)A
LDA SUB
01011 01100
A(01011) AA-(01100)
STA 01111
(01111)A
HLT
halt the computer
为了能够更好的理解 CPU 的运行,我们以一个简单的汇编程序的执行来讲解。这个程序将使
用以上的全部指令。在这里,我们使用助记符的方式写汇编程序,实际在,在存储器内部是
以二进制码来存储的,例如:第一行“LDA 01011”在存储器中为 00001011。
LDA 01011
A(01011)
ADD 01100
00011
00001011
00100
10001100
00101
00101110
00110
00001011
00111
01101100
01000
00101111
01001
10100000
01010
01011
10101010
01100
01010101
01101
01110
01111
…
现在,我们逐步分析汇编程序的执行情况,根据上表,我们看到,前三条指令的目的是将
01011 地址处对应的数据和 01100 处对应的数据进行相加,并且把结果存储到地址 01101 处。
见下表阴影处。由于计算结果为 11111111,所以,影响标志位 NF。
存储器地址
内容(指令或者数据)
00000
00001011
00001 00010 00011 00100
助记符
执行的功能
LDA addr 将地址为 addr 处的存储器中的内容装载到 A 寄存器
STA addr 将 A 寄存器的内容存储到存储器中的 addr 地址处
ADD addr 将 A 寄存器的内容加上存储器中的 addr 地址处的内容
SUB addr 将 A 寄存器的内容减去存储器中的 addr 地址处的内容
CPU 的内部框架
下图是本章准备设计的一个 CPU 内部结构框架。
PC
控制器
存储器
指令解码器
ALU
CPU 的内部工作原理 不同架构的计算机工作原理也是不同的,此处仅以本课本中讲授的 CPU 工作原理为例讲解。 首先,CPU 的指令是存储在存储器中的,所以 cpu 执行指令的第一步是从存储器中取出 (fetch)指令,第二步,将取出的指令解码,第三步,根据指令解码出的功能决定是否再从 存储器中取出需要处理的数据,第四步,根据解码出的指令决定进行相应的计算,这由 (ALU)完成。第五步,根据解码出的指令决定是否将计算结果存入存储器,第六步,修 改 PC 指针,为下一次取指令做准备。整个执行过程由控制器控制。
我们把这段程序放在存储器的开始(更方便程序的启动)。由于在代码中我们用到了存储器
地址为 01011 和 01100 中的数据,所以我们可以在那两个位置放置一些要处理的数据。存储 器中的详细内容参见下表。
存储器地址
内容(指令或者数据)
00000
00001011
00001
01001100
Leabharlann Baidu00010
00101101
在介绍具体的 CPU 硬件架构之前,我们先确定一些 CPU 能够执行的指令,在这里,为了教 学演示,我们设定 6 个计算机指令,分别为:LDA 指令、STA 指令、ADD 指令、SUB 指令、 AND 指令和 HLT 指令。指令集表示的含义见下表:
操作码 000 001 010 011 100 101
计算机最核心的部分叫做中央处理器,也就是我们常说的 CPU,计算机所做的工作都是由 CPU 来 完 成 的 。 当 然 , 作 为 学 习 , 我 们 不 能 够 设 计 出 类 似 奔 腾 处 理 器 ( Pentium microprocessor)的 CPU,我们用一个能够完成简单功能的简单的 CPU 作为讲解,麻雀虽小, 五脏俱全,这个简单的 cpu 具有一般 CPU 的全部基本特征。
AND addr 将 A 寄存器的内容与上存储器中的 addr 地址处的内容
HLT
停止指令的执行
前两条指令,“LDA”和“STA”是数据传输指令,就像助记符表示的那样,这些指令在 A 寄存器和存储器之间传送数据。对于 LDA 指令,“源”数据是存储器的 addr 地址处的值(也 称为内容),目的寄存器是 A 寄存器;对于 STA 指令,“源”数据是 A 寄存器,目的寄存器 是存储器的 addr 地址处的存储空间。
这里为了以后的表达方便,我们采用一种简单的方式来表示上述指令的功能,如:表示 LDA addr 指令可以用 A(addr),而 STA addr 可以用(addr)A 来表示。同样,加法指令 ADD addr 用 AA+(addr)表示,减法指令 SUB addr 用 AA - (addr)表示。“AND addr” 用 AA & (addr)表示。注意,由于这里涉及到计算的结果,我们设置了一些标志用来标识 结果的特殊性,如:Z(零标志),标识运算的结果A中为0;N(负数标志),标识运算的 结果A中小于0;V(溢出标志),标识运算的结果A溢出;C(进位标志),标识运算的结 果A中产生了进位;值得一提的是C位的处理,加法和减法对于C的处理是不一样的。对于 ADD,进位标志是A中的最高位产生了进位;对于减法,最高位产生借位将C为置1。
CPU 概览 众所周知,cpu 只能识别二进制数据,也就是机器码。所以,在 CPU 内部靠不同的二进制 序列来区别不同的机器码。我们把这些机器码存储在一个存储器中,共 CPU 读取使用。同 时,为了用户和程序员能够更好的记住机器码的含义,采用相应的助记符来表示这些机器码, 如:用 LDA 表示二进制的 000 等。这些助记符通常被称为汇编语言,不同架构的计算机的 汇编语言通常都是各不相同的。
AA+(01100)
STA 01101
(01100)A
LDA 01011
A(01011)
AND 01100
AA & (01100)
STA 01110
(01110)A
LDA SUB
01011 01100
A(01011) AA-(01100)
STA 01111
(01111)A
HLT
halt the computer
为了能够更好的理解 CPU 的运行,我们以一个简单的汇编程序的执行来讲解。这个程序将使
用以上的全部指令。在这里,我们使用助记符的方式写汇编程序,实际在,在存储器内部是
以二进制码来存储的,例如:第一行“LDA 01011”在存储器中为 00001011。
LDA 01011
A(01011)
ADD 01100
00011
00001011
00100
10001100
00101
00101110
00110
00001011
00111
01101100
01000
00101111
01001
10100000
01010
01011
10101010
01100
01010101
01101
01110
01111
…
现在,我们逐步分析汇编程序的执行情况,根据上表,我们看到,前三条指令的目的是将
01011 地址处对应的数据和 01100 处对应的数据进行相加,并且把结果存储到地址 01101 处。
见下表阴影处。由于计算结果为 11111111,所以,影响标志位 NF。
存储器地址
内容(指令或者数据)
00000
00001011
00001 00010 00011 00100
助记符
执行的功能
LDA addr 将地址为 addr 处的存储器中的内容装载到 A 寄存器
STA addr 将 A 寄存器的内容存储到存储器中的 addr 地址处
ADD addr 将 A 寄存器的内容加上存储器中的 addr 地址处的内容
SUB addr 将 A 寄存器的内容减去存储器中的 addr 地址处的内容
CPU 的内部框架
下图是本章准备设计的一个 CPU 内部结构框架。
PC
控制器
存储器
指令解码器
ALU
CPU 的内部工作原理 不同架构的计算机工作原理也是不同的,此处仅以本课本中讲授的 CPU 工作原理为例讲解。 首先,CPU 的指令是存储在存储器中的,所以 cpu 执行指令的第一步是从存储器中取出 (fetch)指令,第二步,将取出的指令解码,第三步,根据指令解码出的功能决定是否再从 存储器中取出需要处理的数据,第四步,根据解码出的指令决定进行相应的计算,这由 (ALU)完成。第五步,根据解码出的指令决定是否将计算结果存入存储器,第六步,修 改 PC 指针,为下一次取指令做准备。整个执行过程由控制器控制。
我们把这段程序放在存储器的开始(更方便程序的启动)。由于在代码中我们用到了存储器
地址为 01011 和 01100 中的数据,所以我们可以在那两个位置放置一些要处理的数据。存储 器中的详细内容参见下表。
存储器地址
内容(指令或者数据)
00000
00001011
00001
01001100
Leabharlann Baidu00010
00101101
在介绍具体的 CPU 硬件架构之前,我们先确定一些 CPU 能够执行的指令,在这里,为了教 学演示,我们设定 6 个计算机指令,分别为:LDA 指令、STA 指令、ADD 指令、SUB 指令、 AND 指令和 HLT 指令。指令集表示的含义见下表:
操作码 000 001 010 011 100 101