17 - 微程序控制

---- 整理自B站UP主 踌躇月光 的视频

1. 实验目标

  • 将 RAM 中 0 地址内容和 1 地址内容相加,结果存入 2 地址。
      1. 需要从 RAM 读取数据
      1. 需要寄存器暂存数据
      1. 需要从 ROM 中读取控制程序

在这里插入图片描述

  • 3 + 4 => 7

2. 实验过程

【17 - 微程序控制】

2.1 改造 ALU

请添加图片描述

2.2 程序计数器 PC

  • 对应修改使用 ALU 实现的程序计数器 PC

请添加图片描述

2.3 实现电路总览

在这里插入图片描述

2.3.1 第 0 步:控制程序实现

  • 通过读取 ROM 的数据实现对几个寄存器和 PC 计数器以及内存 RAM 的控制。
      1. 通过手动开关 MAN 和点击 脉冲信号 PUL 的方式,给电路上电 POW,CLOCK 信号给每个器件提供时钟信号
      1. 实现电路中的红色矩形框中的 PC 计数器,初始状态为 0,从 ROM 的 0 地址读取出的内容,实际上就是上面几个器件的控制指令的集合,即通过不同 bit 位的组合来控制上述的器件
      1. 在时钟的下降沿,红色框内的 PC 计数器完成一次加一计数,输出变为 1,从 ROM 的 1 地址读取出下一个指令集合进行下一次控制操作
      1. 依次类推

请添加图片描述

  • 这里先给出 ROM 中存储的内容的实现。
import os

dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'ins.bin')

WE_A = 2 ** 0	# 寄存器A的WE,使能为1
CS_A = 2 ** 1	# 寄存器A的CS,使能为1

WE_B = 2 ** 2	# 同理
CS_B = 2 ** 3

WE_C = 2 ** 4	# 同理
CS_C = 2 ** 5

ALU_ADD = 0
ALU_SUB = 2 ** 6
ALU_OUT = 2 ** 7

WE_M = 2 ** 8
CS_M = 2 ** 9

WE_PC = 2 ** 10
EN_PC = 2 ** 11
CS_PC = 2 ** 12

HLT = 2 ** 15

micro = [
    CS_M | CS_A | WE_A  |  WE_PC | EN_PC | CS_PC, # 内存中值移到寄存器A,同时PC加一
    CS_M | CS_B | WE_B  |  WE_PC | EN_PC | CS_PC, # 内存中值移到寄存器B,同时PC加一
    ALU_OUT | CS_C | WE_C,
    CS_C | WE_M | CS_M  |  WE_PC | EN_PC | CS_PC,
    HLT,
]

with open(filename, 'wb') as file:
    for value in micro:
        result = value.to_bytes(2, byteorder='little')
        file.write(result)
        print(value, result)
        
print('Finish complete!!!')

2.3.2 第 1 步:0 地址内容指令的目的

在这里插入图片描述

0 地址的内容为 0x1E03,对应的二进制为 0001 1110 0000 0011,对应到上图中的 15~0 位的控制端,就是对相应的器件的控制。

在这里插入图片描述
在这里插入图片描述

由上图可知,初始状态 PC 计数器的值为 0,与其相连的内存 RAM 中的 0 地址的数据内容,在第一个时钟上升沿被写入到寄存器 A,同时 PC 计数器加一。

请添加图片描述

2.3.3 第 2 步:1 地址内容指令的目的

这里不再贴出图片,可自行通过工程文件进行查看。1 地址指令的目的是:将内存 RAM 中的 1 地址数据读出后写入到寄存器 B 中。

请添加图片描述

2.3.4 第 3 步:2 地址内容指令的目的

将 ALU 中相加得到的结果写入到寄存器 C 中。

请添加图片描述

2.3.5 第 4 步:3 地址内容指令的目的

寄存器 C 中的内容写入到内存 RAM 中的 3 地址处。

请添加图片描述

2.3.5 第 5 步:4 地址内容指令的目的

进入 HLT 。

2.4 实验总体效果

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成都欣丰洪泰文化传媒有限公司电商服务的新锐力量

在当今电商行业风起云涌的时代,成都欣丰洪泰文化传媒有限公司以其独特的视角和专业的服务,成为了业内的佼佼者。该公司专注于电商服务,致力于为广大商家提供全方位、多层次的解决方案,助力商家在激烈的市场竞争中脱颖而出。 一、…

位置编码学习

基本概念 关于位置编码的一切:https://kexue.fm/archives/8130#T5%E5%BC%8F 残差连接 Post Norm 关注深度 残差的意思是给前面的层搞一条“绿色通道”,让梯度可以更直接地回传,但是在Post Norm中,这条“绿色通道”被严重削弱…

今日arXiv最热大模型论文:人民大学发布,拯救打工人!Office真实场景下的大模型表格处理

引言:大语言模型事实召回机制探索 该论文深入研究了基于Transformer的语言模型在零射击和少射击场景下的事实记忆任务机制。模型通过任务特定的注意力头部从语境中提取主题实体,并通过多层感知机回忆所需答案。作者提出了一种新的分析方法,可…

牛客 2024春招冲刺题单 ONT82 腐烂的苹果【中等 BFS Java,Go】

题目 题目链接: https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34 思路 广度优先搜索。首先找到2坐标集合,然后每次往四周为1的坐标扩展参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数…

RAG基础知识及应用

简单介绍下RAG的基础知识和RAG开源应用 “茴香豆" 一. RAG 基础知识 1. RAG工作原理 RAG是将向量数据库和大模型问答能力的有效结合,从而达到让大模型的知识能力增加的目的。首先将知识源存储在向量数据库中,当提出问题时,去向量数据库…

客户案例丨拓数派向量计算引擎PieCloudVector助力东吴证券AIGC应用升级

1.项目背景 随着人工智能技术的不断创新和应用,我们可以看到人工智能在各个领域的应用越来越广泛。深度学习技术在图像识别、语音识别、自然语言处理等领域表现出色。机器学习算法的改进将解决更多实际问题,如增强学习、迁移学习和联合学习等&#xff…

学生用什么品牌的台灯好,学生护眼台灯推荐品牌

在童年的岁月里,我们常常无知于如何正确地使用眼睛,对于何种光线最有益眼睛健康也缺乏了解。这些年轻时的疏忽,如今在我的眼镜度数上得到了反映,近视已接近千度,这是许多同样经历的视友都能共鸣的体验。随着时间的推移…

MoonBit 最新动态:MoonBit 引入实验性的测试覆盖率统计工具

MoonBit更新 支持 array.iter intrinsic 并且已经对标准库中的函数进行标注&#xff0c;从而可以在特定情况下将循环进行内联&#xff0c;以提升运行效率 /// intrinsic %array.iter pub fn iter[T](self : Array[T], f : (T) -> Unit) -> Unit {for i 0; i < self…

pymilvus创建IVF_FLAT向量索引

索引简介 索引的作用是加速大型数据集上的查询。 目前&#xff0c;向量字段仅支持一种索引类型&#xff0c;即只能创建一个索引。 milvus支持的向量索引类型大部分使用近似最近邻搜索算法(ANNS,approximate nearest neighbors search) 。ANNS 的核心思想不再局限于返回最准确…

棋牌室计时吧台计费收费灯控管理系统软件操作流程

棋牌室计时吧台计费收费灯控管理系统软件操作流程 一、前言 以下软件操作教程以&#xff0c;佳易王棋牌桌球计时计费管理系统软件灯控版V17.87为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 该计时计费软件可以是棋牌和桌球混合同时计时计费 …

uniapp:Hbuilder没有检测到设备请插入设备或启动模拟器的问题解决

问题 使用模拟器调试运行项目时&#xff0c;出现以下提示&#xff0c;“没有检测到设备&#xff0c;请插入设备或启动模拟器后点击刷新再试”。排查了一天最终找到原因。 解决 已确认模拟器是已经正常启动&#xff0c;并且Hbuilder设置中的adb路径和端口都配置没有问题&#…

123124

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

如何挂载img镜像以及lvm分区

上一章节&#xff0c;我在win10下利用qemu安装了一个aarch64的 kylin-server-v10的ISO系统镜像包。安装时将系统安装到了虚拟硬盘kylin-server-v10.img 里&#xff0c;现在有个需求&#xff0c;要读出kylin-server-v10.img中文件系统的内容。 通过fdisk命令可以看到 kylin-ser…

element-ui drawer 组件源码分享

今日简单分享 drawer 组件的源码实现&#xff0c;从以下五个方面来分享&#xff1a; 1、drawer 组件页面结构 2、drawer 组件属性 3、drawer 组件 slot 4、drawer 组件方法 5、drawer 组件事件 一、drawer 组件页面结构 二、drawer 组件属性 2.1 append-to-body 属性&am…

vulhub之fastjson篇-1.2.27-rce

一、启动环境 虚拟机:kali靶机:192.168.125.130/172.19.0.1(docker地址:172.19.0.2) 虚拟机:kali攻击机:192.168.125.130/172.19.0.1 本地MAC:172.XX.XX.XX 启动 fastjson 反序列化导致任意命令执行漏洞 环境 1.进入 vulhub 的 Fastjson 1.2.47 路径 cd /../../vulhub/fa…

vue前端项目到后端执行逻辑——自己改的话要怎么改

文章目录 vue前端项目到后端流程——自己改的话要怎么改 vue前端项目到后端流程——自己改的话要怎么改

外部模块介绍(七) 蓝牙HC05

HC05原理图 2. 蓝牙模块的调试 2.1 两种工作模式: HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式。在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。 当模块处于自动连接工作模式时,将自动根据事…

深入解析template,掌握C++模板的精髓!

掌握C模板&#xff08;template&#xff09;的优雅之道&#xff01; 一、什么是模板&#xff1f;二、模板如何工作&#xff1f;三、C 中的模板类型3.1、 类模板3.2、 函数模板 四、模板参数推导4.1、模板参数推导示例4.2、函数模板参数推导4.3、类模板参数推导&#xff08;C17 …

Spring 源码学习笔记(二)之Bean标签默认属性的解析

分析调用栈 Spring 通过读取 xml 配置文件注册 bean &#xff0c;通过工厂可以获取注册的 bean&#xff0c;示例代码&#xff1a; XmlBeanFactory beanFactory new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); Object main beanFactory.g…

通过网络api获取日期对应的节假日信息

网络接口获取链接&#xff1a;免费节假日API_原百度节假日API HolidayJudge.h #pragma once#include <QtWidgets/QWidget> #include "ui_HolidayJudge.h"enum DATESTATE {WORK0,//工作日DAYOFF,//休息日HOLIDAY//节假日 };class HolidayJudge : public QWidg…