第五章、基于Verilog的CPU设计.(DOC)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档