实验-设计一个应用系统(计算机组成原理)

目录

一. 实验内容

二. 实验步骤

(1)七段数码管显示模块

(2)指令模块

(3)控制模块

(4)ALU模块

(5)CPU模块

三. 实现效果

四. 实验环境

五. 实验小结及思考

一. 实验内容

设计一个简易的计算器:

        在上一个实验当中,你已经成功设计好了一个cpu,在该cpu基础之上,请你利用软硬件协同设计思想,在此基础之上设计一个简单的整数“加,减,乘,除”计算器,对于计算器计算的结果,你需要用七段数码管进行展示。

二. 实验步骤

(1)七段数码管显示模块

        在这个简易计算器中,我们最终需要将结果显示七段数码管上面。在这里我们首先需要设计一个译码器,使得输入0~9可以显示在七段数码管上面。

        利用一个真值表,输入一个4bit的数,可以表达0~9,并且成功点亮七段数码管8个LED灯的相应LED灯。真值表如下:

        (10~15不显示结果)

        利用如上的真值表,就可以设计出以下电路:

        来实现输入对应的0~9可以在数码管上面显示出来。

        由于输出的结果是16进制的数,且是32bit的,需要转化为两个十进制的数来显示。可以将得到的结果利用分隔线这个运算器来实现除A(10)的操作,把商的低4位给第一个数码管(十位)。把余数的低4位给第二个数码管(个位)。电路连接如下:

(2)指令模块

        我们需要重新写一段代码,翻译成机器码,存储到ROM中。

        以上是在venus仿真器中编写的代码。实现每次从内存中取两个数据,分别进行加减乘除运算后,再把结果写回到内存中的运算。我们将以上代码翻译为机器码后,再复制到CPU的ROM中。

(3)控制模块

        因为在实验二中,并没有用到sub和div这两条指令。所以在这个模块中,我们需要添加这两条指令。查询RISC-V指令集手册,可以补全实现二的表格。如下:

        然后需要在control模块中添加这两条模块的识别电路,通过opcode、fun3、fun7来共同实现。再添加一个复用器,选择位设定为2,来控制当识别为sub或div指令的时候,选择ROM中的第8和第9条机器码来识别一些控制信号。电路如下:

(4)ALU模块

        在ALU模块中,原本没有除法运算,所以需要添加除法运算的电路模块。在实验二里,AULSel的0011是未使用的,在这里就可以用于除法的使用。利用一个分隔器来实现除法运算,电路如下:

(5)CPU模块

        由于将四则运算的结果分别存到t4、t5、t6、s0寄存器里,所以在在CPU中,只需要将对应寄存器的值传输给译码器后,再连接七段数码管即可。电路如下:

三. 实现效果

        将机器码加载到ROM中,将数据加载到RAM中,开始运行,即可得到如下效果:

        在RAM中:

        数码管显示:

        此结果与venus仿真器中的结果一致:

四. 实验环境

        使用Logisim完成RISC-V处理器的设计和调试。

        使用Venus仿真器完成测试程序的运行和调试、内存转储(memory dump)。

五. 实验小结及思考

1.了解了ALUSel是什么。

        ALUSel信号用于ALU中,选择对应的运算。它的值需要根据我们具体设置的ALU来设定。

2.在汇编语言中懂得了.word 和 .space 是两种常用的伪指令(pseudo-instruction),它们用于在数据段中定义和初始化数据。

        .word 用于在内存中定义一个或多个32位(或根据目标处理器架构可能是其他位宽)的整数。

        这些整数可以是立即数(即直接给出的数值),也可以是标签(代表另一个内存位置的值,但这在 .word 中不常见,通常用于其他类型的指令或伪指令中)。

        .space 用于在内存中分配一定大小的空间,但不初始化这些空间(即这些空间的内容是未定义的,可能是随机的或零,取决于系统的内存管理)。.space 通常需要一个参数,指定要分配的空间大小(以字节为单位)。

3.学会了如何读入外设,以及如何把数据输出到外设中。

        可以通过设置使能端和其他控制信号将外设数据输入寄存器文件中和把数据输出到外设中。

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

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

相关文章

【博客系统】博客系统第四弹:令牌技术

令牌机制 为什么不能使用 Session 实现登录功能? 传统思路: 登录页面把用户名密码提交给服务器。服务器端验证用户名密码是否正确,并返回校验结果给前端。如果密码正确,则在服务器端创建 Session。通过 Cookie 把 sessionId 返回…

【瑞数3代】药监评审中心逆向分析 | 后缀MmEwMD参数

1.目标 目标网址:https://www.cde.org.cn/main/news/listpage/545cf855a50574699b46b26bcb165f32 import requestscookies {FSSBBIl1UgzbN7N80S: 8sYeMWaC_IHoNl8Ckfx2y9MLiueMCkPr2V3MIoZkrMPUfzMMaXKzAoxpNPvyw4lt,Path: /,FSSBBIl1UgzbN7N80T: 3js3ygV.St6BvO20…

【漫话机器学习系列】274.基尼指数(Gini Index)

决策树中的基尼指数(Gini Index)详解 —— 从公式理解到实际应用 在构建决策树模型时,一个核心问题是:如何选择最优的特征来进行节点划分? 这就涉及到了“划分准则”的问题。常见的准则有信息增益、信息增益率以及本文…

R语言学习--Day07--T分布与T检验

昨天我们介绍了R中用于对数据进行分类的聚类分析的方法,接下来我们来看T分布。 T分布 T分布适用于帮我们估计整组数据(较小的数据量,一般小于30)的真实值在哪一个区间,具体是计算置信区间(一般为95%&#…

数据结构与算法-线性表-双向链表(Double Linked List)

1 线性表 1.4 双向链表(Double Linked List) 双向链表的结点中有两个指针域,一个指向直接后继,另一个指向直接前驱,主要是为了解决前向查找的问题。 双向链表结构: 书籍和视频教程都只讲解了插入和删除的…

甘特图实例 dhtmlxGantt.js

本文介绍了如何使用dhtmlxGantt库创建一个基础的甘特图示例,并对其进行汉化和自定义配置。首先,通过引入dhtmlxgantt.css和dhtmlxgantt.js文件初始化甘特图。接着,通过设置gantt.i18n.setLocale("cn")实现核心文本的汉化&#xff0…

C++23 新增扁平化关联容器详解

文章目录 一、引言已有关联容器回顾新容器的引入原因 二、std::flat_set定义与特性代码示例适用场景 三、std::flat_multiset定义与特性代码示例适用场景 四、std::flat_map定义与特性代码示例适用场景 五、std::flat_multimap定义与特性代码示例适用场景 六、与其他容器的比较…

使用zap,对web应用/API接口 做安全检测

https://www.zaproxy.org/getting-started/ 检测方法 docker pull ghcr.io/zaproxy/zaproxy:stable# 执行baseline测试 docker run -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \ -t https://baseline.yeshen.org# 执行api测试 docker run -t ghcr.io/zaproxy/zaproxy…

Qt—模态与非模态对话框

Qt—模态与非模态对话框 核心概念 ​模态对话框​​:强制用户优先处理当前窗口,阻塞指定范围的用户交互。​非模态对话框​​:允许用户自由切换窗口,无交互限制。 一、模态对话框类型与行为 1. 应用级模态(Applica…

Axure高保真CRM客户关系管理系统原型

一套出色的CRM(客户关系管理)系统,无疑是企业管理者掌控客户动态、提升销售业绩的得力助手。今天,就为大家介绍一款精心打造的Axure高保真CRM客户关系管理系统原型模板,助你轻松开启高效客户管理之旅。 这款CRM原型模…

【羊圈——状压 + DP / 记忆化搜索DP】

题目 一般DP代码&#xff08;注意&#xff0c;这里只能向外推(起始状态是f(1,0)&#xff0c;不能向内推&#xff08;不然会导致之前的羊圈被割裂&#xff09;&#xff09; #include <bits/stdc.h> using namespace std;const int MAX_N 210; const int MAX_M 16;int n…

讲解Mysql InnoDB的MVCC

1. 定义 MVCC是多版本并发控制&#xff08;Multi - Version Concurrency Control&#xff09;的缩写。它是InnoDB存储引擎实现高并发控制的一种机制。在数据库系统中&#xff0c;多个事务可能会同时对数据进行读写操作&#xff0c;而MVCC通过为数据行保存多个版本来解决并发事务…

ZeroMQ Sockets介绍及应用示例

1. 概念解释 ZeroMQ Sockets提供了一种类标准套接字&#xff08;socket-like&#xff09;的 API&#xff0c;是消息导向的通信机制&#xff0c;基于 TCP/UDP 等传输层协议&#xff0c;但封装了底层细节&#xff08;如连接管理、消息路由、缓冲区等&#xff09;&#xff0c;提供…

语音合成之十五 语音合成(TTS)分句生成拼接时的响度一致性问题:现状、成因与对策

语音合成&#xff08;TTS&#xff09;分句生成拼接时的响度一致性问题&#xff1a;现状、成因与对策 引言&#xff1a;分段式文本转语音中的响度一致性挑战业界对响度差异问题的认知拼接语音片段中响度变化的根本原因分段拼接的固有挑战各片段预测韵律特征的差异文本特征和模型…

Android中Binder驱动作用?

Binder驱动的作用与核心功能 Binder驱动是Android系统中实现进程间通信&#xff08;IPC&#xff09;的核心底层组件&#xff0c;它工作于Linux内核层&#xff0c;负责管理跨进程通信的建立、数据传输、资源同步等关键任务。以下是其核心作用及实现细节&#xff1a; 1. ​​进程…

网络学习-TCP协议(七)

一、TCP协议 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。 1、三次握手 客户端&#xff1a; 1、先发起连接&#xff0c;发送SYN置1&#xff0c;seqnum12345(随机值)----半连接…

【Python 基础与实战】从基础语法到项目应用的全流程解析

&#xff08;1&#xff09;列表和元组的区别是什么?如何从列表创建元组?如何从元组创建列表? 列表和元组的区别&#xff1a; 可变性&#xff1a;列表是可变的&#xff0c;即可以对列表进行元素的增、删、改操作。例如&#xff0c;可以使用append()方法添加元素&#xff0c;r…

Docker部署Zookeeper集群

简介 ZooKeeper 是一个开源的分布式协调服务&#xff0c;由 Apache 软件基金会开发和维护。它主要用于管理和协调分布式系统中的多个节点&#xff0c;以解决分布式环境下的常见问题&#xff0c;如配置管理、服务发现、分布式锁等。ZooKeeper 提供了一种可靠的机制&#xff0c;…

【学习笔记】Sophus (Python) 使用文档

以下是一份针对 Sophus 库的 Python 使用文档&#xff0c;涵盖基础概念、安装方法、核心功能及代码示例。内容围绕 SO3&#xff08;3D旋转群&#xff09;和 SE3&#xff08;3D刚体变换群&#xff09;展开&#xff0c;适合机器人学、SLAM、三维几何等领域。 Sophus (Python) 使用…

计算机图形学:(三)MVP变换扩展

Three.js WebGL允许把JavaScript和OpenGL 结合在一起运用&#xff0c;但使用WebGL原生的API来写3D程序非常的复杂&#xff0c;同时需要相对较多的数学知识&#xff0c;对于前端开发者来说学习成本非常高。 Three.js是基于webGL的封装的一个易于使用且轻量级的3D库&#xff0c;T…