CPU自制入门[试读]
1.1 序
本章中,我们首先着手设计CPU、内存、I/O以及它们之间的连接总线,随后使用硬件描述语言Verilog HDL进行实现。最终将这些模块组合,形成一台简单的计算机。 本章最大的特点是使用硬件描述语言实现计算机的各个基础部件,并详细讲解制作过程。通过学习本章内容,我们不仅可以理解计算机的各组成要素,还能动手制作并实现它们。 1.1 序...............................................................2 1.2 计算机系统................................................4 1.3 数字... 查看全部[ 1.1 序 ]
1.2 计算机系统
本节将介绍计算机系统的构成要素及其功能。 什么是计算机 计算机是根据程序进行运算和数据处理的计算机器。近年来,随着PC(Personal Computer,个人电脑)在普通家庭中的广泛普及,计算机对我们的生活产生了深远的影响。如今,不仅是PC,与我们生活息息相关的手机、家电等也广泛应用了计算机。 通常,计算机由以下几部分组成:负责计算和处理数据的CPU、负责存储程序和数据的存储器,以及和外部进行数据交换的I/O(Input/Output,输入输出装置)。各部分通过总线连接就构成了一台计算机。 计算机的构成要素如图1-3 所示。以PC 机的组成为例,一般使用Intel 或AMD 公司的C... 查看全部[ 1.2 计算机系统 ]
1.3 数字电路基础
本节将介绍数字电路的基础知识。数字电路是利用数字信号的电子电路。近年来,绝大多数的计算机都是基于数字电路实现的。 1.3.1 什么是数字电路 数字电路是利用两种不连续的电位来表示信息的电子电路。数字电路中的电源电压H (High,高)电平、接地电压L(Low,低)电平分别代表1 和0,以此实现信息的表达。大部分数字电路是基于叫做MOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor, 金属氧化物半导体场效应管)的场效应管实现的。在数字电路中,MOSFET 通过组合可以实现各种各样的逻辑电路。 1.3.2 数值表达 数字电... 查看全部[ 1.3 数字电路基础 ]
1.4 Verilog HDL 语言
本节将讲述Verilog HDL 语言的基础知识, 也会一并介绍基于Icarus Verilog 和GTKWave 的仿真环境。本书使用的Verilog HDL 是基于Verilog HDL 2001 标准的语言规范。这一节主要说明Verilog HDL 的基础语法,读者们可以跳跃阅读,在读写代码需要的时候再翻回来查阅。 1.4.1 什么是Verilog HDL Verilog HDL 是一种HDL 语言(Hardware Description Language,硬件描述性语言)。使用Verilog HDL 语言可以进行抽象度较高的RTL(Register Transfer Leve... 查看全部[ 1.4 Verilog HDL 语言 ]
1.5 系统蓝图
本节将介绍本章即将制作的系统,同时也会对本章中代码的阅读方法、全局通用的宏进行说明。 1.5.1 目标系统整体介绍 AZPR SoC 是以AZ Processor 为中心,结合存放程序的ROM(Read Only Memory)、测量时间的计时器、串口通信的UART(Universal Asynchronous Receiver Transmitter)、控制LED 和开关的GPIO(General Purpose Input Output),以及连接以上模块的总线构成的。 AZ Processor 拥有专用的SPM(Scratchpad Memory,暂时存储器),可以不通过总... 查看全部[ 1.5 系统蓝图 ]
1.6 总线的设计与实现
本节介绍总线的设计与实现。总线是将CPU、内存和I/O 相互连接的共享通道。因为总线和本章所有电路都有关连,所以我们先来制作。 1.6.1 总线的设计 本书设计的总线主控为4 通道,总线从属为8 通道。总线的信号线如表1-14 所示。 表1-14 总线信号线 通过总线访问时,需要预先确定总线主控与总线从属之间的通信规则。这种使用信号线的通信规则称为总线协议。本书使用的总线为使用时钟信号同步数据传输的同步总线。图1-77 展示了读取访问时的总线波形。 图1-77 读取访问时的总线波形 [Ⅰ]请求总线使用权 总线主控在获得总线的使用权后方可使用总线。主控发出总线使用权请求信号(... 查看全部[ 1.6 总线的设计与实现 ]
1.7 存储器的设计与实现
本节将介绍存放数据和程序的存储器的设计与实现。制作存储器用到了FPGA 的RAM 区域。 1.7.1 FPGA 的RAM 区域 许多FPGA 都有可供用户自由使用的RAM 区域。赛灵思生产的FPGA 称之为块RAM,大小从几千字节到几兆字节不等。在第2 章将要设计的电路板上搭载的Spartan- 3E XC3S250E,有27KB 可以利用的块RAM。 块RAM 可以作为子模块,以实例化的方式使用。块RAM 提供的功能如表1-22 所示。本书使用Single Port ROM 和True Dual Port RAM 两种类型。 表1-22 块RAM 的种类 更多关于赛灵思的块R... 查看全部[ 1.7 存储器的设计与实现 ]
1.8 AZ Processor 的设计与实现
本节将对CPU 的设计与实现进行说明。首先讲述流水线处理技术的概要和实现方法,然后设计并实现AZ Processor。 1.8.1 关于CPU 流水线处理 流水线处理是一种提高CPU 的处理性能的技术。所谓流水线处理,是将处理操作分为多个阶段,然后像流水线作业一样执行。图1-84 展示了流水线处理的示意图。 图1-84 流水线处理示意图 CPU 中的各种硬件资源,只在处理的相应阶段使用,其他时间大多处于空闲状态。比如,运算器在指令执行时使用,在指令读取、解码时空闲。因此,为了高效使用这些硬件资源,引入了流水线处理技术。 在流水线处理的情况下,读取某条指令之后,在该指令解码的... 查看全部[ 1.8 AZ Processor 的设计与实现 ]
1.9 I/O 的设计与实现
本节讲解I/O 的设计与实现。本节要设计的I/O 有三种,分别是测量时间用的定时器、串口通信规范UART(Universal Asynchronous Receiver Transmitter),以及控制LED、开关用的GPIO(General Purpose Input Output)。它们都是最基本的I/O,几乎所有计算机都配有全部三种或其中一部分I/O 接口。 1.9.1 定时器 什么是定时器 定时器是用来测量时间的装置。和我们日常使用的厨房定时器、起床闹钟的功能完全相同。计算机可以利用定时器实现时间测量、周期性处理、超时判断等许多用途。定时器通过软件设置定时的时长并启动,经... 查看全部[ 1.9 I/O 的设计与实现 ]
1.10 AZPR SoC 整体连接
本节中,我们将做好的CPU、内存,以及各种I/O 使用总线连接,完成AZPR SoC 的制作。首先,我们要制作名为chip 的模块,该模块中使用总线连接CPU、内存与I/O。然后, 我们制作为chip 提供时钟与复位功能的时钟模块。最后,制作将chip 与时钟模块相连的顶层模块。 1.10.1 各模块的连接 本节我们将做好的CPU、ROM、定时器、UART、GPIO,以及连接这些模块的总线进行组装。整体组装的模块名为chip。chip 的连接框图如图1-129 所示。 总线主控与总线从属的连接关系如表1-69 所示。未连接的总线主控和总线从属的控制信号设为无效,数据信号设为0。这些... 查看全部[ 1.10 AZPR SoC 整体连接 ]
1.11 AZPR SoC 的仿真
本节对制作完成的AZPR SoC 的仿真进行讲解。我们首先要为仿真编写仿真模型和Testbench,然后讲解使用Icarus Verilog 进行仿真的方法。 1.11.1 仿真模型的编写 对整个系统进行仿真时,需要准备FPGA 中使用的DCM 和内存模型。虽然可以使用FPGA 厂商发布的官方模型,但我们选择自行设计仿真模型。 DCM 模型 我们配置的DCM 将依据输入的时钟,输出频率相同但相位为0 度和180 度的两种时钟。DCM 模型的信号线一览如表1-73 所示、源程序如代码1-44 所示。 表1-73 信号线一览(x_s3e_dcm.v) 代码1-44 DCM 模型(... 查看全部[ 1.11 AZPR SoC 的仿真 ]
1.12 本章总结
本章中,我们设计了CPU、内存、I/O,以及它们的连接总线,制作了一个简单的计算机系统SoC。全章的讲解都围绕着一个中心——到底如何去实现。 本章涉及的计算机系统背景知识非常丰富,讲解时一语带过的部分也比较多。但是, 我们认为在探索学术知识的本质时,实际“动手制作”是非常重要的一环。希望本章的内容可以对读者深入理解计算机系统有所帮助。同时,我们也希望能将“动手制作”的乐趣传递给读者们。... 查看全部[ 1.12 本章总结 ]