24 - 取指令微程序

2024-04-23 09:52
文章标签 24 微程序 取指令

本文主要是介绍24 - 取指令微程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

1. CPU 电路

请添加图片描述

2. 实验

2.1 目标

将 RAM 中 0 地址、1 地址、2 地址中的数据分别取出放入 IR、DST、SRC 三个寄存器中

2.2 指令设计

// pin.pyMSR = 1
MAR = 2
MDR = 3
RAM = 4
IR = 5
DST = 6
SRC = 7
A = 8
B = 9
C = 10
D = 11
DI = 12
SI = 13
SP = 14
BP = 15
CS = 16
DS = 17
SS = 18
ES = 19
VEC = 20
T1 = 21
T2 = 22MSR_OUT = MSR
MAR_OUT = MAR
MDR_OUT = MDR
RAM_OUT = RAM
IR_OUT = IR
DST_OUT = DST
SRC_OUT = SRC
A_OUT = A
B_OUT = B
C_OUT = C
D_OUT = D
DI_OUT = DI
SI_OUT = SI
SP_OUT = SP
BP_OUT = BP
CS_OUT = CS
DS_OUT = DS
SS_OUT = SS
ES_OUT = ES
VEC_OUT = VEC
T1_OUT = T1
T2_OUT = T2_DST_SHIFT = 5MSR_IN = MSR << _DST_SHIFT
MAR_IN = MAR << _DST_SHIFT
MDR_IN = MDR << _DST_SHIFT
RAM_IN = RAM << _DST_SHIFT
IR_IN = IR << _DST_SHIFT
DST_IN = DST << _DST_SHIFT
SRC_IN = SRC << _DST_SHIFT
A_IN = A << _DST_SHIFT
B_IN = B << _DST_SHIFT
C_IN = C << _DST_SHIFT
D_IN = D << _DST_SHIFT
DI_IN = DI << _DST_SHIFT
SI_IN = SI << _DST_SHIFT
SP_IN = SP << _DST_SHIFT
BP_IN = BP << _DST_SHIFT
CS_IN = CS << _DST_SHIFT
DS_IN = DS << _DST_SHIFT
SS_IN = SS << _DST_SHIFT
ES_IN = ES << _DST_SHIFT
VEC_IN = VEC << _DST_SHIFT
T1_IN = T1 << _DST_SHIFT
T2_IN = T2 << _DST_SHIFTSRC_R = 2 ** 10
SRC_W = 2 ** 11
DST_R = 2 ** 12
DST_W = 2 ** 13PC_WE = 2 ** 14
PC_CS = 2 ** 15
PC_EN = 2 ** 16PC_OUT = PC_CS
PC_IN = PC_CS | PC_WE
PC_INC = PC_CS | PC_WE | PC_ENHLT = 2 ** 31
// assembly.py
import pinFETCH = [pin.PC_OUT | pin.MAR_IN,pin.RAM_OUT | pin.IR_IN | pin.PC_INC,pin.PC_OUT | pin.MAR_IN,pin.RAM_OUT | pin.DST_IN | pin.PC_INC,pin.PC_OUT | pin.MAR_IN,pin.RAM_OUT | pin.SRC_IN | pin.PC_INC,
]
import os
import pin
import assembly as ASMdirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'micro.bin')micro = [pin.HLT for _ in range(0x10000)]for addr in range(0x10000):ir = addr >> 8psw = (addr >> 4) & 0xfcyc = addr & 0xfif cyc < len(ASM.FETCH):micro[addr] = ASM.FETCH[cyc]with open(filename, 'wb') as file:for var in micro:value = var.to_bytes(4, byteorder='little')file.write(value)print('Compile micro instruction finish!!!')

2.3 指令讲解

FETCH = [pin.PC_OUT | pin.MAR_IN,pin.RAM_OUT | pin.IR_IN | pin.PC_INC,pin.PC_OUT | pin.MAR_IN,pin.RAM_OUT | pin.DST_IN | pin.PC_INC,pin.PC_OUT | pin.MAR_IN,pin.RAM_OUT | pin.SRC_IN | pin.PC_INC,
]

2.3.1 第 1 条指令分析

  • 一共有 6 条微指令,这里的示例图解是第一条指令:
    1. ROM 中存放程序,地址 16 位,高 8 位代表指令,中间 4 位代表 PSW,后 4 位代表微程序的周期,即 |指令 IR 8 位 | PSW | 微程序周期 |
    1. pin.PC_OUT | pin.MAR_IN ==> 0x0000 8040
    1. 根据图中红色箭头方向
    1. 控制单元,即图中 CONTROL UNIT 的 PC 输出2,二进制 10,对应 PC 寄存器的 IO 为 2,也就是将 PC 寄存器内的数据通过 DO 输出,此时 PC 寄存器的内容是 0。
    1. 控制单元,即图中 CONTROL UNIT 的 MAR 输出 3,二进制 11,对应 MAR 寄存器的 IO 为 3,也就是将 MAR 寄存器上的 DI 输入存入寄存器内部,此时 MAR 的 DI 为 PC 寄存器的输出 DO。

在这里插入图片描述

  • 第一条指令之后的结果:

在这里插入图片描述

2.3.2 后续指令分析

分析过程和第一条相同,这里只给出每一条指令之后的结果。

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

2.4 实验工程

【24 - 取指令微程序】

这篇关于24 - 取指令微程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/928467

相关文章

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm

SIGMOD-24概览Part7: Industry Session (Graph Data Management)

👇BG3: A Cost Effective and I/O Efficient Graph Database in ByteDance 🏛机构:字节 ➡️领域: Information systems → Data management systemsStorage management 📚摘要:介绍了字节新提出的ByteGraph 3.0(BG3)模型,用来处理大规模图结构数据 背景

【A题成品论文已出】24数学建模国赛A题成品论文(附参考代码)免费分享

A 题  “板凳龙”  闹元宵 摘要 “板凳龙”是一种传统的民俗文化活动,通常由许多板凳连接成龙的形状进行表演。本文基于螺旋线和板凳龙的运动特性,建立数学模型来分析舞龙队在不同情况下的运动轨迹、调头路径和速度优化等问题。问题主要涉及板凳龙的行进路径、碰撞避免、调头空间的设计,以及如何优化龙头的速度,以确保龙身与龙尾的行进安全。 针对问题一,舞龙队由223节板凳组成,龙头前把手的速度为1

【Git 学习笔记_24】Git 使用冷门操作技巧(四)——更多实用 git 别名设置、交互式新增提交

文章目录 11.8 更多别名设置别名1:只查看当前分支(git b)别名2:以图表形式显示自定义格式的 git 日志(git graph)别名3:查看由于合并分支导致的冲突后仍有冲突的、待合并的文件列表(git unmerged)别名4:查看 git 状态(git st)别名5:查看 git 简要状态(git s)别名6:查看最新版本的统计信息(git l1)别名7:查看最近 5 个版本的提

Leetcode面试经典题-24.两两交换链表中的节点

解法都在代码里,不懂就留言或者私信 这里先写一个递归的解,如果后面有时间,我再写个迭代的 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val =

图形API学习工程(24):D3D11读取非DDS格式的CubeMap

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 目标 在《图形API学习工程(21):使用CubeMap纹理》中,由于DirectX读取CubeMap的教程范例都是DDS格式的纹理,因此我也首先实现了DDS的版本,期望之后做处理。 上一篇使D3D12可以用非DDS格式的CubeMap了,本篇目标将是D3D11。 分析当前的流程 当前使用D

数字人直播防封技巧升级!头部源码厂商如何实现7*24小时无间断直播?

当前,许多用户在使用数字人直播的过程中都遇到了直播间违规和账号被封两大问题,并因此蒙受了一定的损失。在此背景下,不少有计划引入数字人直播的企业和搭建数字人直播系统的创业者也开始有了犹豫。为了让大家能够更放心地入局,本期,我们将通过分析这两大问题出现的原因,来整理数字人直播防封教程,希望能对大家有所帮助。 一、数字人直播是否会导致直播间违规和封号问题? 需要明确的一点是,当前,虽然许多人在进

【24数模国赛赛题思路已出】国赛B题第二套整体思路丨附参考代码丨免费分享

B 题 生产过程中的决策问题 一、问题1解析 问题1的任务是为企业设计一个合理的抽样检测方案,基于少量样本推断整批零配件的次品率,帮助企业决定是否接收供应商提供的这批零配件。具体来说,企业需要依据两个不同置信度(95% 和 90%)来判断次品率是否超过或不超过标称值(10%)。 供应商声称的次品率为不超过10%,但企业需要通过抽样检测来验证实际次品率是否符合此要求。通过设计合理的抽样方案,企

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from class path resource [bean1.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineN

24. Redis缓存问题

1. 前言 在小型项目中(例如大部分 toB 业务),Redis 被作为缓存,我们无需过多关注缓存的性能,但是对于高并发的场景(例如 toC 的在线电商业务),在商品秒杀或者库存抢购的时候,Redis 也可能存在诸多潜在的问题,例如缓存穿透、缓存雪崩。 2. 缓存问题 2.1 缓存穿透 面试官提问: Redis 的缓存穿透是什么意思?有什么解决方案? 题目解析: 首先给出缓