CPU自制入门1.5 系统蓝图_CPU自制入门1.5 系统蓝图试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > CPU自制入门 > 1.5 系统蓝图

CPU自制入门——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,暂时存储器),可以不通过总线进行高速访问。定时器与UART 输出的中断请求信号直接连接到AZ Processor。AZPR SoC 还需要输入复位信号以及相位为0 度与180 度的两种时钟信号。基于外部输入的复位信号和基准时钟信号,时钟模块可以生成所需的复位信号与两种时钟信号。图1-74 为本章即将制作的AZPR SoC 的框图。 图1-74 本章制作目标:AZPR SoC 首先,我们在1.6 节制作用于整体通信连接的总线。其次,在1.7 节制作ROM。然后,在1.8 节制作本章的主要部分——CPU。在1.9 节制作I/O。最后,1.10 节将各部分连接,完成AZPR SoC。 1.5.2  关于本章中的代码 代码的阅读方法 本章将代码归纳到表格里进行说明。本节仅选取进行某种控制的代码片段进行说明。我们一般会省略模块声明与信号线定义的部分。而各个模块的端口、信号线、头文件中定义的宏,则以列表的形式在文中给出。 本章中,Verilog HDL 程序的一个代码文件中仅包含一个模块,并且文件名与模块名一致。表1-9 列出了模块的层次,表1-10 给出了头文件一览。 表1-9 模块层次 表1-10 头文件一览 代码规范 本书中的Verilog HDL 代码,以可读性和易懂性作为第一原则进行编写。为了方便读者理解,代码中尽可能插入注释进行说明。 代码中避免使用魔术数字(Magic number),而较多采用宏。魔术数字是指嵌入代码中的常数。不使用魔术数字可以增强代码的可移植性。全部宏都在头文件中定义。 每行代码文字数量都在80 以内,行的缩进使用制表符。代码中每一行长度都控制在终端显示设备的行宽以内,这样有助于阅读。通常终端的一行可显示80 字,不单是Verilog HDL 代码,各种代码多采用每行80 字的宽度。缩进字符推荐使用制表符。制表符的优点是宽度可在文本编辑器内设定,阅读代码的人可以自由调整。笔者的环境中, 一个制表符相当于4 个空格的宽度。 变量名与宏的命名规则 变量名使用英文小写字母、数字以及下划线(_)进行命名。为了明确控制信号的极性,负逻辑信号线的名称以下划线(_)结尾。宏使用英文大写字母、英文小写字母、数字以及下划线(_)进行命名。常数使用大写英文字母和下划线(_)进行命名。在定义比特位或总线时,使用单词首字母大写的驼峰拼写法(Upper CamelCase)。 宏的定义在头文件中进行。头文件中加入包含文件防范(Include guard)语句防止重复定义。包含文件防范是防止同一个文件被多次包含的技术。包含文件中的代码全部写在`ifndef 之中,并在其中定义防范用的宏。当再次引用该文件时,`ifndef 中的代码就会无效。宏的命名规则如图1-75 所示。 图1-75 宏的命名规则 全局通用宏 本章代码中,全局通用的头文件如表1-11 所示。 表1-11 通用头文件 nettype.h 中对Verilog HDL 的默认网络类型进行定义。为了避免人为失误,通常将默认网络类型设置为无效。代码1-4 为nettype.h 的代码。 代码1-4 定义默认网络类型(nettype.h) global_config.h 中定义有可能变化的参数。比如说,复位信号的极性有可能随着使用端口的更换而改变,内存控制信号的极性也有可能随着FPGA 芯片的不同而不同。这个文件还定义选择使用的I/O 等。表1-12 列出了global_config.h 中的宏一览。 表1-12 宏一览(global_config.h) stddef.h 中对全局通用宏进行定义。其中,定义了信号电平高低的H、L,以及控制信号的有效、无效等通用宏。stddef.h 中的宏一览如表1-13 所示。 表1-13 宏一览(stddef.h) 专栏 字编址与字节位移 CPU 有时需要一次处理宽度大于一个字节的数据。比如说,32 位(4 字节)CPU 需要处理32 位数据,64 位(8 字节)CPU 需要处理64 位数据。CPU 能处理的数据宽度称为字, 为每一个字宽的数据赋予一个地址的方式称为字编址。CPU 内部因为以字为单位处理数据, 方便起见,有时编址方式也采用字编址。 AZ Processor 是32 位CPU,一个字有32 位(4 字节)。因此每4 个字节分配1 个地址。AZ Processor 的寻址空间为32 位。虽然这32 位地址为字节编址,但CPU 内部将高位的30 位以字编址,低位的2 位(4 字节的地址空间)用作字节位移使用。图1-76 说明了字编址与字节位移的关系。 图1-76 字编址与字节位移的关系

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《CPU自制入门》其他试读目录

• 1.1 序
• 1.2 计算机系统
• 1.3 数字电路基础
• 1.4 Verilog HDL 语言
• 1.5 系统蓝图 [当前]
• 1.6 总线的设计与实现
• 1.7 存储器的设计与实现
• 1.8 AZ Processor 的设计与实现
• 1.9 I/O 的设计与实现
• 1.10 AZPR SoC 整体连接
• 1.11 AZPR SoC 的仿真
• 1.12 本章总结