计算机组成原理3个实验-logisim实现“七段数码管”、“有限状态机控制的8*8位乘法器”、“单周期MIPS CPU设计”。

news2024/9/20 16:32:46

目录

标题1.首先是七段数码管 

 标题二:有限状态机控制的8*8位乘法器

标题三:单周期MIPS CPU设计


标题1.首先是七段数码管 

1看一下实验要求:

 

 2.接下来就是详细设计:

1. 组合逻辑设计

       由于7段数码管由7个发光的数码管构成,因为我们想用二进制将0-9这几个数字表示出来。所以他需要4位数字才能够把这7个数码管表示的数字都囊括其中,这7位输出来控制发光二极管来显示数字0~9。

首先先列出七段数码管显示的数字:

由此可见,例如:当想要输出零这个数字时,除了g这段数码管不亮以外,其他的数码管都要亮,以此类推,我们用二进制表示要输出的数字,比如0001那就是要输出1,0010就是要输出2。由此我们可以得到7段数码管显示译码器真值表:

 得到真值表后,接着便是组合逻辑电路的实现。这里利用logisim里的自动生成电路功能:

然后确定输入和输出

 

       

 然后选择真值表的形式依次填入上面得到的译码器真值表(注意和上表一致,others部分全部设置为0),表达式和最小项不用管,设置完成后点击生成电路。就会得到这样一个译码电路:

 接着就是电路的实现,我用一个计数器加时钟来实现输入,当clock时钟为上升沿时,计数器加一,然后用分线器变成二进制输入到封装好的译码电路,七段数码管直接用logisim里的。测试结果完美!

 标题二:有限状态机控制的8*8位乘法器

注意,这个乘法器不是普通的乘法器,它是由Moore型有限状态机控制的乘法器 

1.实验要求:

 2.详细设计:

时序逻辑设计

首先,由于采用有限状态机作为控制电路,我们需要先确认有限状态机的输入与输出

由此可见,有限状态机有三个输入,7个输出(因为还有一个done信号,表示运算结束),这里我们不采用ALU,使用普通的加法器,因此LP信号可以不用给出,所以少了一个输出,变成了6个。接下来便是控制电路的设计。首先先画出状态转换图,如下,sat表示start信号:

 然后便是状态转换表,我们采用二进制编码重写状态转换表和输出表,这样使用的数位少一点。当然了,用独热编码也是OK的,因为有5个状态。独热编码需要5位数字,00001,00010,00100,01000,10000。数位太多了。

用二进制编码重写状态转换表: 

然后再写输出表:

由于已经得到了二进制编码的状态转换表和输出表,接着用logisim自动生成电路按照这些表自动生成就好。

这是下一状态的电路图:

 还有就是输出的电路图:

 然后将这两个组合在一起就是有限状态机:

 得到有限状态机控制电路后就可以开始组件全部的电路:

       注意:当乘法器运行结束后的那个done信号出现之后他应该连到哪里去?这个done信号表明整个电路应该结束,所以我把它跟电路的时钟用与门连接起来,这样一来只要done信号出现,那么时钟将不再起作用,那么自然整个电路就停下来了。 

       运行的时候先输入运行的二进制数字,再点开start信号,最后再开时钟。

标题三:单周期MIPS CPU设计

单周期控制器(也就是cpu控制器,起了另一个名字):设计:

接下来详细介绍控制器的实现:

首先由于整个控制器是需要op以及func作为控制信号的指导,所以需要两个输入引脚将这两个信号输入,对于非R类型的指令而言,只需比较他的op是多少就那么这条指令就成立,比如lw的op指令是23(16进制),用一个比较器比较就可以得出。

而对于R类型的指令,由于R类型的数据的op都是000000,那么接下来就要看它的function,只需比较function就可以得出他们这几条指令,如图:

封装如下:

寄存器文件RegFile设计:

ALU设计:

 总设计:

 ********************************************************************************************************

2023/1/24

正月初三,风轻轻吹.......

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

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

相关文章

信息论复习—率失真理论

目录 失真的概念: 信息率与失真的关系: 信息率失真理论: 失真函数矩阵: 平均失真度定义为: 平均失真度与信道转移概率的关系: 率失真函数: 率失真函数的物理意义: 率失真函数…

05 |「链表」必刷题

前言 前言:刷链表面试高频题。 文章目录前言一. 基础回顾二. 高频考题1、例题例题1:LeetCode 206 反转链表1)题目链接2) 算法思路3)源码剖析4)时间复杂度例题2:LeetCode 92 反转链表II1&#xf…

C++编译之(3)-camke/CMakeLists.txt的编译使用教程

引言 上一节介绍了前面我们介绍了make/Makefile来对c项目进行编译,我们继续以该项目为例讲解; C编译之(1)-g单/多文件/库的编译 C编译之(2)-make及makefile编译过程 我们先看看上一节的实战的目录结构如下: - mutilFilesDemo- include // 头…

Docker入门与应用

Docker入门与应用1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结1.4.安装Docker2.Docker的…

“华为杯”研究生数学建模竞赛2005年-【华为杯】D题:仓库容量有限条件下的随机存贮管理(附获奖论文)

赛题描述 工厂生产需定期地定购各种原料,商家销售要成批地购进各种商品。无论是原料或商品,都有一个怎样存贮的问题。存得少了无法满足需求,影响利润;存得太多,存贮费用就高。因此说存贮管理是降低成本、提高经济效益的有效途径和方法。 问题2 以下是来自某个大型超市的…

全链路追踪 jaeger

Jaeger 概述 Jaeger 是 Uber 开发并开源的一款分布式追踪系统,兼容 OpenTracing API,适用于以下下场景: 分布式跟踪信息传递分布式事务监控问题分析服务依赖性分析性能优化 特性 高扩展性 Jaeger后端的设计没有单点故障,可以…

大数据 | 《Riffle:Optimized Shuffle Service for Large-Scale》论文阅读

1. 简介 1.1. 近期工作 研究工作鼓励运行大量小任务 小任务能提高并行性,减少端到端耗时工程经验反对运行过多的任务 过多的task在shuffle阶段会引入大量IO开销,根本原因在于map和reduce阶段之间的shuffle IO请求数量随着任务数量的增长呈现指数级的增…

emoji 符号大全,给各位程序员增加一些奇怪的知识点

这篇博客非常有意思,我将为大家整理和罗列一些好用的 emoji 表情站点。 文章目录EmojiXDcarpedm20emoji-cheat-sheetemojiterrafsymbols符号大全unicode.orgemojiallemojiguideemojipediaemoji696 编辑器emoji.inkEmoji Artemojifinderemoji 可以在许多社交媒体平台…

Redis 持久化-AOF

Redis 持久化-AOF 1.官方资料 在线文档 : https://redis.io/topics/persistence 2.AOF 是什么? 1、AOF(Append Only File) 2、以日志的形式来记录每个写操作(增量保存),将 Redis 执行过的所有写指令记录下来(比 如 set/del 操作会记录, 读操作 get 不记录) 3、…

【大数据趋势】1月24日 美元关键位置上,应该不会一次破,纳指有概率反弹,人民币结汇行情结束在即。

确定市场形态 - 美元指数 关键位置大概率不会一次就破,有较强反弹 作为长期的关键位置101-103这个区域,没有可能一次性涨破,或者一次性跌破,所以大概率有一次反弹出现。作为趋势线(红色)来看&#xff0c…

十大经典排序算法(动态演示+代码)-冒泡算法

时间、空间复杂度比较 排序算法平均时间复杂度最差时间复杂度空间复杂度数据对象稳定性冒泡排序O(n2)O(n2)O(1)稳定选择排序O(n2)O(n2)O(1)数组不稳定、链表稳定插入排序O(n2)O(n2)O(1)稳定快速排序O(n*log2n)O(n2)O(log2n)不稳定堆排序O(n*log2n)O(n*log2n)O(1)不稳定归并排序…

万能四码(0126版本)之分析

万能四码(0126版本)之分析一、万能四码的重新排列原版是这样的:0126,0134,0159,0178,0239,0247,0258,0357,0368,0456,0489…

【进阶C语言】程序环境与预处理

文章目录一.程序环境1.翻译环境编译器1.预处理2.编译3.汇编链接器2.运行环境总图解二.预处理1.预定义符号2.define1.define的定义2.替换规则3.定义的建议和使用的缺点1.加括号2.避免使用带有副作用的符号3.命名约定4.#和##1.#2.##5.宏和函数的对比6.undef3.条件编译1.常量表达式…

趣味三角——第3章——6个三角函数的成熟过程

目录 3.1 6个三角函数的演化进程简述 3.2 Johann Muller(别名Regiomontanus)的贡献 第3章 6个三角函数的成熟过程 It is quite difficult to describe with certainty the beginning of trigonometry . . . . In general, one may say that the emphasis was placed first …

ThinkPHP5 Request类method任意方法调用RCE

ThinkPHP v5.0.x 影响版本&#xff1a;5.0.0 < version < 5.0.23 漏洞点&#xff1a;\think\Request::method 修复&#xff1a;版本更新 top-think/framework4a4b5e6 改进Request类 环境 thinkphp5.0.23核心版&#xff08;需开启debug&#xff09;thinkphp5.0.22完…

设计模式 - 六大设计原则之LoD(迪米特法则原则)

文章目录概述Case学生类老师类Bad ImplBetter Impl老师类改造调用方&#xff1a;校长类改造概述 迪米特法&#xff08;Law Of Demeter &#xff0c; LoD&#xff09;则又叫最少知道原则&#xff08;Least Knowledge Principle&#xff09;&#xff0c;最早是在1987年由美国Nor…

【游戏客户端】如何实现环形进度条

【游戏客户端】如何实现环形进度条 Hello大家好&#xff0c;我是Lampard。好久没写博客了&#xff0c;之前在忙着制作项目的一个大的副本&#xff0c;趁着过年得闲&#xff0c;和大家分享一下制作过程中遇到的一些有趣的问题。今天主要是分享如何在cocos制作一个环形的进度条 (…

重写 equals 时为什么一定要重写 hashCode

equals 方法和 hashCode 方法是 Object 类中的两个基础方法&#xff0c;它们共同协作来判断两个对象是否相等。为什么要这样设计嘞&#xff1f;原因就出在“性能” 2 字上。 使用过 HashMap 我们就知道&#xff0c;通过 hash 计算之后&#xff0c;我们就可以直接定位出某个值存…

移动web 空间转换 3D

移动web 空间转换 3D空间转换 3D3D位移透视3D旋rotateXrotateY左手法则立体呈现空间转换 3D 3D坐标系 3D 坐标系比2D 多了一个Z轴。 一定要记住3个坐标轴取值的正反&#xff1a; X 轴 往右越大&#xff0c;是正值&#xff0c; 否则反之Y 轴 往下越大&#xff0c;是正值&…

React错误边界

首先 我们先构建出问题的场景 我们创建一个react项目 然后在src下创建 components 文件夹目录 在下面创建一个 error.jsx 组件 参开代码如下 import React from "react";export default class App extends React.Component{constructor(props){super(props);this.…