初级项目_计算机组成原理课程设计
2022/8/24 10:33 昨天稍微听了一下老师介绍,然后云里雾里的也不知道具体要干啥,所以今天静下心来准备好好整理一下思路然后再开始进行课设的设计;
源码链接Gintoki-jpg/Com_Org_Design: 大二下计算机组成原理课程设计参考资料 (github.com)
题目一
1.实验目的
按照所给的数据格式、指令系统和数据通路以及所给的器件,设计一个基于硬布线控制器的顺序模型CPU
,要求满足:
- 能够在TEC-8上组装、调试及运行
- 在原指令基础上拓展指令至少三条
- 修改PC指针功能(任意指针)
2.资料参考
关于硬布线控制器和微程序控制器的区别,可以参考TEC-8仿真的说明书;
关于硬布线控制器的详细原理可以参考https://www.bilibili.com/video/BV1BE411D7ii?p=81&vd_source=276d55048634a5b508b1b53a1ecd56b3;
关于TEC-8怎么用参考《TEC-8使用手册》;
关于Quartus怎么用参考《Quartus ll说明书》;
3.VHDL语言
因为实验过程中使用到了VHDL语言,但是之前一直没有系统学习过,这里集中整理一下基本知识点;
3.1 HDL简介
HDL是一门用于描述数字电路的功能或行为的语言,用于在芯片制造之前进行有效的仿真和错误检测;
常用的HDL语言有VHDL和Verilog HDL;
3.2 VHDL基础
VHDL的注释由两个连续的虚线
--
引导;
3.2.1 标识符
标识符用来定义常数、变量、信号、端口、子程序或参数的名字;
注意:VHDL定义的保留字(关键字)不能用作标识符;
3.2.2 关键字
关键字(keyword)是VHDL中具有特别含义的单词,只能做为固定的用途,用户不能用其做为标识符;
3.2.3 数据对象
数据对象包括常量、变量、信号和文件
四种类型;
(1)常量
常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值在程序开始前进行,该值的数据类型在说明语句中指明;
常量所赋的值应和定义的数据类型一致;
常量在程序包、实体、构造体或进程的说明性区域内必须加以说明:
- 定义在程序包内的常量可供所含的任何实体、构造体所引用;
- 定义在实体说明内的常量只能在该实体内可见;
- 定义在进程说明性区域中的常量只能在该进程内可见;
(2)变量
变量只能在进程语句、函数语句和过程语句结构中使用。变量的赋值是直接的,非预设的,分配给变量的值立即成为当前值,变量不能表达“连线”或存储元件,不能设置传输延迟量。
(3)信号
信号表示逻辑门的输入或输出,类似于连接线,也可以表达存储元件的状态。信号通常在构造体、程序包和实体中说明;
3.2.4 数据类型
(1)预定义数据类型
VHDL的数据类型主要分为指的是预定义的数据类型,也就是在VHDL标准包STANDARD中定义好的自动包含进VHDL源文件中无需通过USE语句显式调用的;
- Boolean:取值为FALSE或TRUE,不是数值不能用于运算,常用于关系运算符;
- Bit:取值为0和1,用于逻辑运算;
- Bit_Vector:基于Bit类型的数组,用于逻辑运算;
- Character:通常使用’’括起,区分大小写;
- String:通常用””括起,区分大小写;
1 |
|
- Integer:可用32位有符号二进制数表示,要求用RANGE子句为所定义的数限定范围,以便根据范围来决定表示此信号或变量的二进制数的位数;
1 |
|
Real:实数,仅可用于仿真不可综合;
Time:物理量数据,完整的包括整数和单位两个部分,用至少一个空格隔开,仅用于仿真不可综合;
Severity Level:错误等级,表示系统状态,仅可用于仿真;
Std_Logic:标准逻辑位;
Std_Logic_Vector:标准逻辑位矢量,即基于Std_Logic类型的数组;
(2)自定义数据类型
1 |
|
1 |
|
1 |
|
3.2.5 属性
属性提供的是关于信号 类型等的指定特性;
‘event’:若属性对象有事件发生,则生成布尔值”true”,常用来检查时钟边沿是否有效;
‘range’:生成一个限制性数组对象的范围;
‘left’:生成数据类型或数据子类型的左边界值;
3.2.6 运算符
注意:&代表并置操作符,如a<=’1’&’0’&’d(1)’&’1’表示元素与元素并置,并置后的数组长度为4;
3.3 VHDL基本结构
VHDL基本的结构如下:
VHDL最基本的设计单元结构包含:程序包说明(库 程序包的说明调用) 实体说明(实体声明)以及结构体说明(结构体定义)三部分
3.3.1 实体
实体描述了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面;
实体名由设计者自由命名,用来表示被设计电路芯片的名称,但是必须与VHDL程序的文件名称相同;
(1)类属说明
类属为设计实体与外界通信的静态信息提供通道,用来规定端口的大小、实体中子元件的数目和实体的定时特性等;
(2)端口方向
同方向 同类型的端口可以放在同一个说明语句中
3.3.2 结构体
结构体定义了设计单元具体的功能,描述了该基本设计单元的行为、元件和内部的连接关系;
一个实体可对应多个结构体,每个结构体代表该实体功能的不同实现方案或不同实现方式。同一时刻只有一个结构体起作用,通过CONFIGURATION决定用哪个结构体进行仿真或综合;
在结构体描述中,具体给出了输入、输出信号之间的逻辑关系;
3.3.3 库、程序包的调用
- 格式
- 示例
3.4 VHDL语句
3.4.1 并行语句
结构体中执行的是同时进行、执行顺序与书写顺序无关的语句
(1)简单赋值语句
1 |
|
注意:目标信号的数据类型与右边表达式一致;
(2)选择信号赋值语句
选择值要覆盖所有可能情况,若不能一一指定,用OTHERS为其他情况找个出口;选择值必须互斥,不能出现条件重复或重叠的情况;
(3)条件信号赋值语句
各赋值语句有优先级的差别,按书写顺序从高到低排列;各赋值条件可以重叠;
(4)进程语句
进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。
进程本身是并行语句,但内部是顺序语句;
进程只有在特定的时刻(敏感信号发生变化)才会被激活;
(5)元件例化语句
元件例化引入一种连接关系,将预先设计好的实体定义为元件,并将此元件与当前设计实体中的端口相连接,从而为当前设计实体引入一个新的低一级的设计层次;
3.4.2 顺序语句
顺序语句仅出现在进程和子程序中;
顺序语句综合后,映射为实际的门电路,系统一上电,门电路开始工作。电路可实现逻辑上的顺序执行,实际上所有门电路是并行工作的;
(1)赋值语句
略
(2)流程控制语句
- IF语句
用IF语句描述组合逻辑电路时,务必涵盖所有的情况,否则综合后将引入锁存器!
- CASE语句
选择值不可重复或重叠;
当CASE语句的选择值无法覆盖所有的情况时,要用OTHERS指定未能列出的其他所有情况的输出值;
- LOOP语句
循环次数只能用具体数值表达,否则不可以综合;
- NEXT语句
NEXT语句主要用在LOOP语句执行中有条件或无条件转向控制,跳向LOOP语句的起点;
上述表达式可能出现如下三种情况:
- EXIT语句
EXIT语句主要用在LOOP语句执行中有条件或无条件内部转向控制,跳向LOOP语句的终点,用于退出循环。当程序需要处理保护、出错和警告状态时,语句能提供一个快捷、简便的方法;
(3)空操作语句
NULL为空操作语句,一般用于CASE中,表示在某些情况下对输出不作任何改变,隐含锁存信号。不能用于纯组合逻辑电路;
(4)等待语句
在进程或过程中执行到WAIT语句时,程序将被挂起,并设置好再次执行的条件;
(5)子程序调用语句
略
(6)返回语句
略
4.硬布线控制器
在《计算机组成原理》的博客中我们并没有过多的关注硬布线控制器,而是花大量篇幅介绍了微程序控制器,这里我们对硬布线控制器的底层原理做一个详细的说明;
控制器负责从主存中取指令并确定指令类型,控制器是计算机系统的指挥中心,控制器的主要功能有:
- 从主存中取出一条指令,并指出下一条指令在主存中的位置;
- 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作;
- 指挥并控制CPU、主存、输入和输出设备之间的数据流动方向;
控制器控制整个计算机系统的运行,分为CPU内部控制(依靠数据通路)和系统外部控制(依靠一组系统总线-数据总线 地址总线 控制总线):
- 系统内部的控制:根据控制信号构建数据通路,完成微操作规定的功能;
- 系统外部的控制:依靠一组系统总线进行控制;
尽管硬件可以直接执行机器指令,但是当我们研究其本质时发现它还能被拆分为多个小的微操作,这些微操作对应相应的控制信号,根据产生微操作控制信号的方式不同(也就是根据微操作信号发生器的结构不同),控制器分为硬布线和微程序;
硬布线控制器:
- 主要由PC IR 指令译码器 MAR MDR 时序系统 微操作发生器组成;
- 微操作控制信号由组合逻辑电路根据当前指令码、状态和时序即时产生;
- 执行速度快,不易扩充,常用于RISC;
微操作发生器:
- 输入:IR中的操作码、时钟脉冲、指令标志、外来信号;
- 输出:微操作控制信号(CPU内部控制信号/到控制总线的控制信号);
- 微操作控制信号以微程序的形式存放在控制存储器中;
- 执行速度慢,易扩充,常用于CISC;
注意硬布线和微程序都是用于解释机器指令的,除了产生控制信号的方式不同(对应的电路逻辑也不同,也就是微操作信号发生器的结构不同),其他概念几乎一样(输入输出都是一样的)——这也导致很多书本上直接在画图的时候不区分是硬布线控制器还是微程序控制器很容易让人混淆(CU暗示硬布线,CM暗示微程序);
4.1 控制单元
注意:
- 输入中的操作码是一个二进制编码对应一个状态而不是一个位对应一个状态,所以我们借助操作码译码器将其转换为一个位对应一个状态;
- 输入中的时钟实际是CLK机器主频,会经过一个节拍发生器产生多个有先后顺序的节拍信号T
0、T1…一个机器周期由多个时钟周期构成(这里的T0、T1…与常规的时钟仅仅只是定义上不同,一个是全高为一个周期,一个是一高一低为一个周期)