计算机组成原理32位MIPS CPU设计实验(指令译码器电路设计 、时序发生器状态机设计、时序发生器输出函数、硬布线控制器)

news2024/12/26 4:54:57

实验四 32位MIPS CPU设计实验

这次实验是32位MIPS CPU设计实验(单总线CPU-定长指令周期-3级时序),在头歌当中一共需要我们进行六道题的测试,分别为MIPS指令译码器设计,定长指令周期(时序发生FSM设计,时序发生器输出函数设计,硬布线控制器,单总线CPU设计),硬布线控制器组合逻辑单元。其中由于第六题是对前面五题一个最终的检验,所以我们不需要进行新的设计,这边我按照老师给的提纲分享了以下四个实验的具体设计原理:1、指令译码器电路设计 2、时序发生器状态机(定长指令周期)设计3、时序发生器输出函数(定长指令周期)4、硬布线控制器

1指令译码器电路设计

1.1设计要求

了解指令译码的基本概念,将32位MIPS指令字译码成不同的指令译码信号。利用logisim平台中现有运算部件构建利用比较器等功能模块将32位MIPS 指令字译码生成LW、SW、BEQ、SLT、ADDI、OtherInstr等指令译码信号,早给定CPU中实现支持以上指令的电路

1.2方案设计

1.2.1 指令作用

首先我们需要了解到这六条MIPS指令的作用,其中所有的imm立即数都需要括展到32位
Lw指令作用:从数存(数据存储器)中取数据写进寄存器
Sw指令作用:将寄存器中的值写入数存
Beq指令作用:当寄存器1的值和寄存器2的值相等时发生跳转,跳转的目的地址位当前指令的地址加上符号括展的imm的值
ADDI指令作用:用于寄存器中数值加上常数
Slt指令作用:比较rs和rt两个寄存器中的值,如果rs中的值小于rt中的值,则把rd计算器置一,否则把rd计算器清零
在这里插入图片描述

1.2.2 单总线CPU原理

这次使用为单总线CPU
首先我们看以下单总线结构CPU在logisim中的实现,我们可以看到在实际logisim,使用了slt信号控制alu进行比较rs和rt两个寄存器中的值的大小,本次简单的CPU实验,不需要sub信号,但是sub信号在A输入引脚可以进行连接,大家可以在下图寻找,当前并没有使用,psw寄存器只保留了一位equal的控制位,psw中并没有设计其余的状态标记,ALU的每一次运算都会比较x和y,在这边呢,就是A和B引脚输出的两个值的大小是否相等,并通过psw寄存器输出equal信号在这里插入图片描述

1.2.3 指令译码原理

在这里插入图片描述

指令译码器是控制器核心功能部件,实现译码功能,负责将指令字翻译成一根根的指令译码信号,每一根指令译码信号代表一条具体的指令,如上图中的I1…Im。根据指令码的特定信息,译码产生指令译码信号,时钟产生器承担了持续控制的功能生成状态周期M和时钟节拍T,控制器利用这些持续信号,对操作信号进行持续调制。

1.2.4 设计思路

将指令寄存器IR送来的32位指令字,生成指令译码信号,当前IR中存放的是哪一种指令,讲过译码器之后,就应该令相应的引脚置一,而其余输出引脚为0在这里插入图片描述
那么这边是利用比较器等功能模块将32位MIPS指令字译码对应生成指令译码信号,用比较器将IR送来的指令字的op字段,和已由分线器提取出的op字段,其中题目将各个op部分对应的常量值已经给出,我们需要对应指令码结构,将对应的op字段送到比较器,相比较之后的输出结果就连到相应的指令当中在这里插入图片描述
在这里插入图片描述

1.3实验步骤

  1. 打开源程序,查看控制器的输入引脚,还有其他重要的输出引脚
  2. 查看指令码结构,与系统自带的op字段,然后进行连接
  3. 输出相应经过比较之后输出的指令结果

1.4故障与调试

1.4.1 slt连接问题

故障现象:slt信号的译码条件有两个,连线时发生问题
在这里插入图片描述
原因分析:slt信号的译码条件有两个,分别是op和0,以及funct字段的值是固定的十进制44,这两个条件需要同时成立,slt引脚才能输出1,那么两个条件同时成立,连线方式较其他的指令有点复杂
解决方案:在00另一边连的是op,funct旁边连接2a,这样就是正确的连接方式。

1.5测试与分析

溢出测试用例见表 1.3 。
表 1.3溢出信号测试用例
Cnt IR LW SW BEQ ADDI SLT OtherI

  1. 0000 2010ffff 0 0 0 1 0 0
  2. 0001 20110000 0 0 0 1 0 0
  3. 0002 ae300200 0 1 0 0 0 0
  4. 0003 22100001 0 0 0 1 0 0
  5. 0004 22310004 0 0 0 1 0 0
  6. 0005 ae300200 0 1 0 0 0 0
  7. 0006 22100001 0 0 0 1 0 0
  8. 0007 22310004 0 0 0 1 0 0
  9. 0008 ae300200 0 1 0 0 0 0
  10. 0009 22100001 0 0 0 1 0 0
  11. 000a 22310004 0 0 0 1 0 0
  12. 000b ae300200 0 1 0 0 0 0
  13. 000c 22100001 0 0 0 1 0 0
  14. 000d 22310004 0 0 0 1 0 0
  15. 000e ae300200 0 1 0 0 0 0
  16. 000f 22100001 0 0 0 1 0 0
  17. 0010 22310004 0 0 0 1 0 0
  18. 0011 ae300200 0 1 0 0 0 0
  19. 0012 22100001 0 0 0 1 0 0
  20. 0013 22310004 0 0 0 1 0 0
  21. 0014 ae300200 0 1 0 0 0 0
  22. 0015 22100001 0 0 0 1 0 0
  23. 0016 22310004 0 0 0 1 0 0
  24. 0017 ae300200 0 1 0 0 0 0
  25. 0018 20100000 0 0 0 1 0 0
  26. 0019 2011001c 0 0 0 1 0 0
  27. 001a 8e130200 1 0 0 0 0 0
  28. 001b 8e340200 1 0 0 0 0 0
  29. 001c 0274402a 0 0 0 0 1 0
  30. 001d 11000002 0 0 1 0 0 0
  31. 001e ae330200 0 1 0 0 0 0
  32. 001f ae140200 0 1 0 0 0 0
  33. 0020 2231fffc 0 0 0 1 0 0
  34. 0021 12110001 0 0 1 0 0 0
  35. 0022 1000fff7 0 0 1 0 0 0
  36. 0023 22100004 0 0 0 1 0 0
  37. 0024 2011001c 0 0 0 1 0 0
  38. 0025 12110001 0 0 1 0 0 0
  39. 0026 1000fff3 0 0 1 0 0 0
  40. 0027 1000ffff 0 0 1 0 0 0
  41. 0028 00000000 0 0 0 0 0 1
    在这里插入图片描述

2时序发生器状态机(定长指令周期)设计

2.1设计要求

利用数字逻辑电路相关知识设计定长指令周期的三级时序系统,时序发生器包括状态机和输出函数两部分,设计状态机。
上一关实现了指令译码器后,就可以开始实现上图中的另外一个核心功能模块,时序发生器了,时序发生器内部框图如下图所示,主要包括状态寄存器,状态机组合逻辑,输出函数组合逻辑三部分。其中状态机负责现态与次态的转换,输出函数根据当前状态生成状态周期电位和节拍周期电位。

2.2方案设计

2.2.1时序产生器原理

其实这个原理较为简单,只需要了解这张图片就可以了,我们针对单总线架构cpu设计的定长指令周期的三级时序系统,由机器周期,节拍电位构成。其中机器周期用于表示当前指令处于哪一个周期,取指令周期mif,持续四个周期t,t1,t2,t3,t4之后变为低电平,而同时Mcal计算周期变成高电平,表示指令执行进入了计算周期,然后计算周期经过t1,t2,t3,t4,四个时钟节拍之后,变为低电平无效。同时进入执行周期,执行周期执行完4个节拍之后,又进入到取指周期,以此往复不断的循环,从而实现程序的自动执行,而节拍电位t1,t2,t3,t4。每一个t完成一个微操作
在这里插入图片描述

2.2.2状态寄存器原理

作用是把三个状态周期,总共12个节拍的三级时序系统,简化成12个状态来进行表示,如下图所示,用s0表示取指令周期的第一个节拍,以此类推,一共12状态。每一个次态和输入的现态都是加1的关系,本质上是计数器.通过下图我们可以得到m和t与现态之间的关系
在这里插入图片描述

2.2.3 设计思路

由此可见,现态和次态的真值表,从而得到次态与输入信号和现态之间的逻辑表达式,从而可以是实现状态机的组合逻辑设计,组合时序只与输入的现态有关系的,所以只需要一个一个的进行累加就行,并且还需要将相应的excel文件填写完成,之后将生成的逻辑表示式输入就可以了

2.3实验步骤

1)清楚了解状态机,知道m和t与现态之间的关系
2)将表格单总线MIPS三级时序产生器逻辑自动生成当中,最左侧的状态转换表填完完成,就是我们实现状态机设计,所对应的真值表,这个表我们只需要填写现态,为十进制的现态值,以及十进制的次态值就可以了,其中现态二进制s3-s0的值,与次态n3-n0的值会自动生成
填写完成如下表
在这里插入图片描述
3)通过表格触发器输出函数,自动生成逻辑表达式,复制我圈起来部分的内容,将其粘贴到logisim当中在这里插入图片描述
4)点击logisim当中的时序发生器状态机(定长指令周期),然后点击分析组合逻辑电路
在这里插入图片描述
5)将在文件中复制的逻辑表达式,按照n3-n0的顺序,粘贴到下图当中,全部输入之后,点击生成电路在这里插入图片描述
6)点击生成电路,进行测试
在这里插入图片描述

2.4故障与调试

这个实验没有遇到问题,较为简单

2.5测试与分析

测试用例如下,实验电路通过所有测试用例
在这里插入图片描述
在这里插入图片描述

3时序发生器输出函数(定长指令周期)设计

3.1设计要求

理解传统三级时序系统中时序发生器的基本原理,设计定长指令周期的时序发生器状态机以及输出函数。利用数字逻辑电路相关知识设计定长指令周期的三级时序系统,时序发生器包括状态机和输出函数两部分,上一实验完成了状态机的设计,这一实验要求我们实现输出函数的设计部分,设计实现输出函数组合逻辑。

3.2方案设计

3.2.1实际产生器原理

实际发生器组合逻辑,是根据当前输入的现态输出Mif,Mcal,Mex,以及T1到T4的节拍电位,与状态机用同样的方法填写,四个事态为一周期,其中第一阶段Mif=1,T1-T4依此为1,第二阶段,Mcal=1,其他置零,第三阶段,Mex=1.填写同一个表格当中的输出函数表,填好这个表之后,通过输出函数自动生成,表中可以自动获取我们的Mif,Mcal,Mex,T1到T4的逻辑表达式了,把相应的逻辑表达式复制之后,思路与下图相同
在这里插入图片描述

3.2.1设计思路

据当前输入的现态输出Mif,Mcal,Mex,以及T1到T4的节拍电位,与状态机用同样的方法填写,填写同一个表格当中的输出函数表,填好这个表之后,通过输出函数自动生成,表中可以自动获取我们的Mif,Mcal,Mex,T1到T4的逻辑表达式了,帮相应的逻辑表达式复制之后, 开始运行

3.3实验步骤

1)了解实际产生器原理,得出每个时期内Mif,Mcal,Mex在不同周期内数值的变化情况
2)根据上一步的数值的变化,将文件表中的输出函数真值表填写完成
在这里插入图片描述
3)将表填写完成之后,将其自动生成函数输入进logisim
在这里插入图片描述
4)运行电路进行检测

3.4故障与调试

3.4.1 复制出错

故障现象:输出函数真值表填写正确,但是在头歌网进行测评时,答案不正确
在这里插入图片描述
原因分析:再次检查函数真值表的填写,发现的确是正确的,那说明只能是复制错了
解决方案:再进行一次复制,结果正确

3.5测试与分析

测试用例如下,实验电路通过所有测试用例
在这里插入图片描述

4硬布线控制器设计

4.1设计要求

理解传统三级时序系统中硬布线控制器的设计原理,设计硬布线控制器组合逻辑单元,在实现了指令译码逻辑、时序发生器主要功能部件后,进一步设计实现控制器核心模块硬布线控制器组合逻辑单元

4.2方案设计

4.2.1设计思路

在实现了指令译码逻辑、时序发生器主要功能部件后,进一步设计实现控制器核心模块硬布线控制器组合逻辑单元, 列出所有微操作信号的产生条件,填写下面的excel表格,自动生成逻辑表达式,然后再Logisim中自动生成电路。

4.2.2硬布线控制器组合逻辑

在设计完上面的两个实验之后,就需要设计硬布线控制器的核心组合逻辑单元了,由于时序产生器以及承担了时序控制功能,所以硬布线控制器就变成了一个存组和逻辑,每一个控制信号c都是指令。所以我们只需要弄清楚各个操作控制信号其所产生的调节,就可以得到他们的逻辑表达式
在这里插入图片描述

4.2.3信号产生条件

如下图所示,通过前面的数据通路分析,得到五条不同指令,在取指令周期,计算周期,执行周期的不同节拍中,会给出不同的控制信号。这边是所有控制信号的产生条件,需要将下面两图结合来看。所有的控制信号的逻辑表达式,cpu电路重法所有控点的逻辑表达式,是需要经过化简得
在这里插入图片描述
在这里插入图片描述

4.3实验步骤

1)理解上面两图
2)进行表格状态的填写在这里插入图片描述
3)将生成的表达式复制进logisim,生成电路
4)然后进行测评

4.4.1 复制出错

故障现象:输出函数真值表填写正确,但是在头歌网进行测评时,答案不正确
在这里插入图片描述
原因分析:再次检查函数真值表的填写,发现的确是正确的,那说明只能是复制错了
解决方案:再进行一次复制,结果正确

4.5测试与分析

测试用例如下,实验电路通过所有测试用例
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构05:树与二叉树[C++][哈夫曼树HuffmanTree]

图源:文心一言 考研笔记整理6k字,小白友好、代码可跑,请小伙伴放心食用~~🥝🥝 第1版:查资料、画导图、画配图~🧩🧩 参考用书:王道考研《2024年 数据结构考研复习指导》…

一纸文书之MySQL的回忆录

MySQL要点学习:你可以在简历上说熟悉MySQL 什么是数据库?什么是数据库管理系统?什么是MySQL?什么是SQL?数据库数据库管理系统:SQL:结构化查询语言三者之间的关系 安装MySQL数据库管理系统MySQL常…

数据增强之裁剪、翻转与旋转

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 数据增强 Data Augmentation裁剪Croptransforms.CenterCroptransforms.RandomCroptransforms.RandomResizedCroptra…

【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块7

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

TortoiseGit 入门指南02:创建和克隆仓库

图标 本节讲解如何使用 TortoiseGit 创建和克隆仓库。但在此之前,我们先来看下 TortoiseGit 软件的一个特色:图标。 TortoiseGit 会给 工作区 中的文件和文件夹叠加图标(Icon Overlays),图标反应的是这些文件和文件夹…

跳表很难吗?手把手教你如何跳跃它!

文章目录 Ⅰ. 前言Ⅱ. 跳表(skiplist)1、什么是跳表2、跳表的发明历程3、跳表的搜索方式 Ⅲ. skiplist的算法性能分析1、理论准备2、性能分析(了解即可,主要记结论) Ⅳ. skiplist与平衡树、哈希表的比较Ⅴ. skiplist的…

【数字信号处理】线性调频Z(Chirp-Z,CZT)算法详解

CZT变换算法的引入 CZT算法的基本原理 注意:这里所要分析的复频谱点数为 M M M,这也是CZT变换之后的点数。

MySQL之DML和DDL

1、显示所有职工的基本信息: 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。 …

CentOS环境下的MYSQL8安装

MySQL 安装 参考连接:https://www.cnblogs.com/jasonx1an/p/16690866.html 下载 下载网址:https://dev.mysql.com/downloads/mysql/ 卸载 mariadb 查看 mariadb rpm -qa|grep mariadb卸载 mariadb rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps再…

深度学习调参技巧

一、常用的网络模型训练技巧? 使用更大的 batch size。使用更大的 batch size 可以加快训练的进度。但是对于凸优化问题,收敛速度会随着 batch size 的增加而降低。所以在相同的 epoch 下,使用更大的 batch size 可能会导致验证集的 acc更低…

Unittest加载执行用例的方法总结

目录 前言 方式1 方式2 方式3 方式4 方式5 方式6 方式7 总结 前言 说到测试框架,unittest是我最先接触的自动化测试框架之一了, 而且也是用的时间最长的, unittest框架有很多方法加载用例,让我们针对不同的项目&#xff0…

23 | MySQL是怎么保证数据不丢的?

以下内容出自《MySQL 实战 45 讲》 23 | MySQL是怎么保证数据不丢的? binlog 的写入机制 1、事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。 2、一个事务的 binlog 是不能被…

rust学习-所有权

运行程序必须管理使用内存的方式 (1)一些语言中具有垃圾回收机制,程序运行时不断寻找不再使用的内存 (2)一些语言中,开发者必须亲自分配和释放内存 (3)Rust 通过所有权系统管理内存…

Windows操作系统安全加固

Windows操作系统安全加固 一、安全加固基本思路1.1、安全基线1.2、系统信息审查 二、Windows安全配置加固2.1、漏洞修复——补丁安装2.2、漏洞修复——端口封禁2.2.1、windows高危端口加固实践——封禁135端口对外开放 2.3、安全配置加固——账号口令 一、安全加固基本思路 1.…

10.20UEC++/代理,单播,多播

构建一个无参无返回值类型的函数(也可以有参有返回值类型) 相对应的构建一个无参无返回值类型的代理

【计算机组成与体系结构课程设计】上机考试

1 (1) 针对图中的MIPS处理器数据通路(不考虑I/O),用红色或蓝色描出执行sw指令时的数据通路。(将该图下载到电脑,并用画图完成描线) (2) 写出执行sw指令时,各个元件控制端信号应该置什么值? 2 基于Minisys处理…

Qt保存代码

补全保存代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮对应的槽函数 void Widget::on_fontBtn_clicked() {…

使用常见的三个命令分析线程的信息

目录 jps jstack.exe jvisualvm.exe jmc.exe 这三个都在jdk\bin文件夹中!!! 查看线程等待状态与信息可以采用3种常见命令。 本文中针对以下代码进行演示 package ChapterOne.test;public class Run3 {public static void main(String[…

Coggle 30 Days of ML(23年7月)任务四:线性模型训练与预测

Coggle 30 Days of ML(23年7月)任务四:线性模型训练与预测 任务四:使用TFIDF特征和线性模型完成训练和预测 说明:在这个任务中,你需要使用TFIDF特征和线性模型(如逻辑回归)完成训练…