【计算机组成原理】五、中央处理器:2.数据通路、控制器(单总线结构、专用数据通路、硬布线控制器、微程序控制器)

news2024/9/23 1:19:44

3.数据通路

文章目录

    • 3.数据通路
      • 3.1单总线结构
      • 3.2专用数据通路
    • 4.控制器
      • 4.1硬布线控制器
        • 4.1.1基本结构
        • 4.1.2设计步骤
          • ==微操作总结==
          • 1)分析每个阶段的微操作序列
          • 2)安排微操作时序的原则
          • 3)电路设计
        • 4.1.3特点
      • 4.2微程序控制器
        • ==微指令包含关系==
        • 4.2.1基本结构
        • 4.2.2微指令格式
        • 4.2.3微指令编码方式
        • 4.2.4微指令的地址形成方式
        • 4.2.5设计微程序控制单元
      • 4.3硬布线vs微程序比较

如何设置部件之间的连接路径?

数据通路的基本结构:

  1. CPU内部单总线方式。
  2. CPU内部多总线方式。
  3. 专用数据通路方式。

3.1单总线结构

  1. 寄存器寄存器之间数据传输

一个out,一个in。

out:(PC)→Bus
in:Bus→MAR

或者简写:

(PC)→Bus→MAR

在这里插入图片描述

  1. 主存CPU之间数据传输

(PC)→Bus→MAR

1→R

MEM(MAR)→MDR

MDR→Bus→IR

在这里插入图片描述

  1. 执行算数/逻辑运算

Ad(IR)→Bus→MAR

1→R

MEM(MAR)→MDR

MDR→Bus→Y

(ACC)+(Y)→Z

Z→ACC

在这里插入图片描述

例题:

ADD (R0), R1

(R0)是间接寻址,R1是直接寻址

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

##最靠前的是核心操作
#1. 取指周期:公共操作

(PC)→MAR

	1→R				#CU控制内存。R:读指令,W:写指令	

M(MAR)→MDR			#从内存memory取指令

	(PC)+1→PC		#执行完指令PC就自动加1

(MDR)→IR			#指令放入指令寄存器IR,instruction register

	OP(IR)→ID		#指令译码。指令译码器ID,instruction decoder

#2. 间址周期:取R0

(R0)→MAR

M(MAR)→MDR

(MDR)→Y

3. 执行周期

(R1)+(Y)→Z

(Z)→MDR

(MDR)→M(MAR)			#因为这里的MAR地址还是R0的地址

3.2专用数据通路

取指周期

(PC)→MAR

(MAR)→MEM

1→R

M(MAR)→MDR

(MDR)→IR

(PC)+1→PC

OP(IR)→ID(译码)

在这里插入图片描述

例题:

5.3.2_数据通路-专用通路结构_哔哩哔哩_bilibili

(2)

(PC)→MAR

M(MAR)→MDR

(MDR)→IR

答案没写后面两个

(PC)+1→PC

OP(IR)→微操作信号发生器

(3)

在这里插入图片描述

(4)简述完成指令 LDA X 的数据通路(X为主存地址,LDA的功能为(X)→ACC)。

X→MAR

M(MAR)→MDR

(MDR)→ALU→ACC

(5)简述完成指令 ADD Y 的数据通路(Y为主存地址,ADD的功能为(ACC)+(Y)→ACC)。

Y→MAR

M(MAR)→MDR

(ACC)→ALU, (MDR)→ALU

ALU→ACC

(6)简述完成指令 STA Z 的数据通路(Z为主存地址,STA的功能为(ACC)→Z)。

Z→MAR

(ACC)→MDR

MDR→M(MAR)

4.控制器

控制器如何指挥整个系统的工作?

控制器的设计

  • 硬布线控制器
  • 微程序控制器
  • 毫微程序控制器(套娃)
    • 微程序设计用微程序解释机器指令,毫微程序设计用毫微程序解释微程序。

4.1硬布线控制器

纯用硬件实现的。

微操作控制信号由组合逻辑电路根据指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些“微命令”。而且是即时产生

4.1.1基本结构

标志触发器FE(取指周期)、IND(间址周期)、EX(执行周期)、INT(终端周期)

在这里插入图片描述

取指周期:

T0: (PC)→MDR: C1 = DE · T0

T1: M(MAR)→MDR C2 = FE·T1 + IND·T1(ADD+STA+LDA+JMP+BAN) + EX·T1(ADD+LDA)

​ FE·T1表示FE(取指令)阶段的T1时钟周期;

​ IND·T1(ADD+STA+LDA+JMP+BAN)表示IND阶段的T1时钟周期在ADD等操作下进行;

​ EX·T1(ADD+LDA)表示在EX阶段的T1时钟周期在ADD等操作下进行。


4.1.2设计步骤
  1. 分析每个阶段的微操作序列(取值、间址、执行、中断四个阶段)

    • 确定哪些指令在什么阶段、在什么条件下会使用到的微操作?
  2. 选择CPU的控制方式

    • 采用定长机器周期还是不定长机器周期?每个机器周期安排几个节拍?

      假设采用同步控制方式(定长机器周期),一个机器周期内安排3个节拍(T0, T1, T2)

  3. 安排微操作时序

    • 如何用3个节拍完成整个机器周期内的所有微操作?
  4. 电路设计

    确定每个微操作命令的逻辑表达式,并具体用电路实现。

    1. 列出操作时间表
      • 列出在取指、间址、执行、中断周期,TO、T1、T2节拍内有可能用到的所有微操作。
    2. 写出微操作命令的最简表达式
    3. 画出逻辑图
微操作总结
1)分析每个阶段的微操作序列
  1. 取指周期:所有指令都相同

(PC)→MAR

1→R #CU控制内存。R:读指令,W:写指令

M(MAR)→MDR #从内存memory取指令

(PC)+1→PC #执行完指令PC就自动加1

(MDR)→IR #指令放入指令寄存器IR,instruction register

OP(IR)→ID #指令译码。指令译码器ID,instruction decoder

  1. 间址周期:所有指令都类似

Ad(IR)→MAR

1→R

M(MAR)→MDR #此时找到的地址是EA有效地址

(MDR)→Ad(IR) #把原先的间接地址A换成新的EA

  1. 执行周期:各不相同

在这里插入图片描述

2)安排微操作时序的原则

原则1:微操作的先后顺序不得随意更改。

原则2:被控对象不同的微操作,尽量安排在一个节拍内完成。因为被控对象(→右面的那个)不同,那么同时进行就不会相互影响。

原则3:占用时间较短的微操作尽量安排在一个节拍内完成,并允许有先后顺序

下面每一行就是一个微操作,每一个T执行一个微指令

  1. 取指周期:所有指令都相同
(PC)→MAR
1→R			#存储器空闲即可
M(MAR)→MDR	#因为前面有MAR,所以在(1)之后
(PC)+1→PC	#在(1)之后
(MDR)→IR	#在(3)之后
OP(IR)→ID	#在(4)之后

所以:

T0:1,2

T1:3,4

T2:5,6(因为虽然5,6有前后关系,但是执行时间都很短,根据原则3,把它们放到一个节拍)

【说明】M(MAR)→MDR从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成。

MDR→IR是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完成OP(IR)→ID,也就是可以一次同时发出两个微命令。

  1. 间址周期:所有指令都类似
Ad(IR)→MAR
1→R			#存储器空闲即可
M(MAR)→MDR	#在(1)之后
(MDR)→Ad(IR)#在(3)之后

T0:1,2

T1:3

T2:4

  1. 执行周期:各不相同

在这里插入图片描述

3)电路设计

设计步骤:

  1. 列出操作时间表
    • 列出在取指、间址、执行、中断周期,TO、T1、T2节拍内有可能用到的所有微操作。
  2. 写出微操作命令的最简表达式
  3. 画出逻辑图

【备注】操作时间表巨长,很麻烦。

4.1.3特点
  1. 指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)。
  2. 如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。
  3. 由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。

4.2微程序控制器

硬件+软件实现

采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”中。

  • 分类:
  1. 静态微程序设计:微程序无需改变,采用 ROM。
  2. 动态微程序设计:通过改变微指令和微程序改变机器指令。有利于仿真,采用EPROM。

程序:由指令序列组成。

微程序:由微指令序列组成。

指令:是对程序执行步骤的描述,每一种指令对应一个微程序
比如 LDA X,这样一条指令对应的取指、间址、执行、中断全部看作一个微程序。

微指令:是对指令执行步骤的描述。

微命令与微操作一一对应

微指令中可能包含多个微命令。

微指令包含关系
  • 指令(4个微程序段部分构成一完整的微程序)
    • 微程序(段)(取指周期微程序、间址周期微程序…)
      • 微指令(一个节拍(T)内多行或一行微操作)
        • 微命令 = 微操作(一行微操作)

在这里插入图片描述

4.2.1基本结构

在这里插入图片描述

控制存储器CM(Memory Controller):

在这里插入图片描述

取指周期通常是公用的,故如果某指令系统中有n条机器指令(执行周期),则CM中微程序(段)的个数至少是n+1个。(因为 n条机器指令 是描述执行周期的微程序(段),所以还要加上一个取指周期微程序(段))

  • 为什么是+1(只加取指周期,没有间址周期…)?

因为一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包含间址周期、中断周期的微程序段。

4.2.2微指令格式

相容性微命令:可以并行完成的微命令。

互斥性微命令:不允许并行完成的微命令。

在这里插入图片描述

4.2.3微指令编码方式

微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。

  1. 直接编码(直接控制)方式
  2. 字段直接编码方式
  3. 字段间接编码方式(隐式编码)

在这里插入图片描述

优点:可以缩短微指令字长。

缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。

例题:

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

4.2.4微指令的地址形成方式

就是下一条指令地址的形成

  1. 微指令的下地址字段:指出微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为==断定方式(断定法)==。

  2. 根据机器指令的操作码,形成当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。

  3. 增量计数器法:(CMAR)+1→CMAR

    类似(PC)+1→PC

  4. 分支转移。

    操作控制字段转移方式转移地址

    转移方式:指明判别条件;
    转移地址:指明转移成功后的去向。

  5. 通过测试网络(顺序逻辑)

  6. 由硬件产生微程序入口地址

    第一条微指令地址,由专门硬件产生(用专门的硬件记录取指周期微程序首地址)。
    中断周期:由硬件产生中断周期微程序首地址(用专门的硬件记录)。

例题:

在这里插入图片描述

4.2.5设计微程序控制单元

设计步骤:

  1. 分析每个阶段的微操作序列
  2. 写出对应机器指令的微操作命令及节拍安排
  3. 确定微指令格式
    1. 根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数。
    2. 根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数。
    3. 最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
  4. 编写微指令码点
    • 根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。

与前面硬布线控器类似,也需要微指令(节拍)安排,唯一不同的是最后一个微操作。


微指令a,T0: (PC)→MAR

微指令a,T0: 1→R

微指令b,T1: M(MAR)→MDR

微指令b,T1: (PC)+1→PC

微指令c,T2: (MDR)→IR

微指令c,T2: OP(IR)→为地址形成部件(硬布线:OP(IR)→ID)


取指周期的第一条微指令a地址由硬件自动给出,后面的指令由前面指令的下地址指出。

所以要加上下地址的一个微操作:

AD(CMDR)→CMAR

就变成了:


微指令a,T0: (PC)→MAR

微指令a,T0: 1→R

​ T1:Ad(CMDR)→CMAR

微指令b,T2: M(MAR)→MDR

微指令b,T2: (PC)+1→PC

​ T3:Ad(CMDR)→CMAR

微指令c,T4: (MDR)→IR

微指令c,T4: OP(IR)→为地址形成部件(硬布线:OP(IR)→ID)

​ T5:微地址形成部件→CMAR

取指周期的最后一条微指令完成后,要根据指令操作码确定其执行周期的微程序首地址。

在这里插入图片描述


4.3硬布线vs微程序比较

硬布线控制器微程序控制器
工作原理微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生。微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可。
执行速度
规整性繁琐、不规整较规整
应用场合RISC CPU(精简指令集计算机)CISC CPU(复杂指令集计算机)
易扩充性困难易扩充修改

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

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

相关文章

大模型全量微调和 LoRA 微调:一看就懂_lora微调

在模型微调领域,全量微调和LoRA微调是我们经常听到的技术术语。 首先,我们需要了解什么是模型微调。模型微调本质上是因为有时我们发现模型在某个方面的性能不足。因此,我们希望通过一些训练方法来更新模型,使更新后的模型在某些…

达梦到达梦(dm-dm)创建dblink,报错:dblink连接丢失

原因 1:参考如下链接配置完dmmal.ini文件后,需要重启服务。 如果文件配置错误,重启服务会有很明显的报错。 https://eco.dameng.com/document/dm/zh-cn/sql-dev/practice-dblink.html [mal_inst1] mal_inst_name DMSERVER mal_host …

飞翔的马鞍 <收纳 No.2> 菱与欣桐画展8月18~31日在798举办

2024年8月18日下午三点,“菱与欣桐 收纳No.2”双人展开幕式在北京市朝阳区798国际艺术交流中心展厅举行。 艺术是永恒的,艺术家的生命力通过作品得以延续。开幕式上艺术家张菱分享了与女儿李欣桐在创作中的点滴记忆,以及她对艺术的执着与热爱…

Django框架自动化测试

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 本节介绍关…

2024.8.27(Dokerfile的应用、私有仓库)

一、Dockerfile应用 1、通过dockerfile创建⼀个在启动容器时,就可以启动httpd服务的镜像 [rootdocker ~]# mkdir httpd0 [rootdocker ~]# cd httpd0 [rootdocker httpd0]# vim abc.sh [rootdocker httpd0]# ls abc.sh [rootdocker httpd0]# echo " httpd serv…

C语言重难点总结(2)-指针操作与结构体、动态内存

本节学习内容 1.指针操作与结构体 2.函数(递归函数) 3.动态内存 一、指针操作与结构体 指针可以作为结构体的内部成员使用,也可以使用结构体指针操作结构体空间。 二、函数 1.指针函数 (1)什么是指针函数&#x…

企业家必看的十种让利的商业模式解析!

在当今的商业领域,众多创业者正面临前所未有的挑战。市场竞争激烈,价格战频繁,吸引投资者和推广产品都变得异常艰难。然而,问题的关键在于对“人心”的洞察。人们天生追求利益,因此,掌握如何点燃市场需求和…

运维有必要学编程吗?应该学哪种编程语言?

在以往的观念中,运维的工作内容是不涉及编程、开发的,因此以前也没用学编程的需求。然而随着互联网的发展和变化,现如今,运维也需要开始接触开发,接触编程了。 当然有很多运维朋友,本身是不认可的。可&…

IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了)。

文章目录 前言一、链接服务器vscode和pycharm的对比1、pycharm2、vscode3、总结 二、VS Code的安装与下载三、链接远程服务器1、安装远程插件:Remote-SSH2、写ssh配置文件3、链接服务器4、登录成功,打开文件夹 前言 大模型开发肯定要在服务器了&#xff…

使用PyTorch AlexNet预训练模型对新数据集进行训练及预测

在 https://blog.csdn.net/fengbingchun/article/details/112709281 中介绍了AlexNet网络,这里使用PyTorch中提供的AlexNet预训练模型对新数据集进行训练,然后使用生成的模型进行预测。主要包括三部分:新数据集自动拆分、训练、预测 1.新数据…

C++竞赛初阶L1-14-第六单元-数组(31~33课)543: T456473 年龄与疾病

题目内容 某医院进行一项研究,想知道某项疾病是否与年龄有关。因此对以往的诊断记录进行整理,统计 0-18 、 19-35 、 36-60、 61 及以上这四个年龄段的患者人数占总患者人数的比例。 输入格式 输入共 2 行。 第一行包含一个整数 N(0<n≤100),表示总患者人数。 第二…

OpenCV绘图函数(1)绘制带箭头的直线函数arrowedLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 绘制一个从第一个点指向第二个点的箭头线段。 cv::arrowedLine 函数在图像中绘制一个从 pt1 到 pt2 的箭头。另见 line 函数。 函数原型 void c…

Android Auto推出全新Google助手设计

智能手机与汽车的无缝整合已成为现代驾驶的重要组成部分&#xff0c;而 Android Auto 一直在这一领域处于领先地位。谷歌通过不断推出新功能和更新&#xff0c;体现了其致力于提升 Android Auto 体验的决心。最近&#xff0c;Android Auto 引入了 Google助手的全新设计。 当系…

vue3 使用vue-masonry加载更多,重新渲染

在使用 van-list做上拉加载更多&#xff0c;加载下一页的时候&#xff0c;会出现瀑布图重叠&#xff0c;原因是布局没有重新更新&#xff0c;所以需要 调用 vue-masonry更新布局的方法。 看了源码才知道可以这样用&#xff0c;api都没写&#xff0c;隐藏太深了。。。 vue3中通…

随心笔记--测试报告

项目名称 随心笔记 版本号 / 发布类型 正式发布 测试负责人 ** 测试完成日期 2024.8. 联系方式 130576**** 评审人 批准人 评审日期 批准日期 1.项目背景 设计“随心笔记”这个项目的初衷是为了提供一个便捷、个性化的博客管理平台&#xff0c;满足用户记录生…

yarn vite脚手架 react+ts搭建项目

创建react 1、确保你已经安装了Node.js&#xff08;建议使用最新的LTS版本&#xff09;。 2、安装Yarn&#xff08;如果尚未安装&#xff09;: npm install -g yarn 3、创建新项目: yarn create vite 根据提示安装 vite脚手架&#xff0c;如果已安装无提示信息 直接填写项目名…

人脸表情识别数据集分享(内含处理过的AffectNet等数据集)

前言&#xff1a; 人脸表情识别有三大主流数据集rafdb、affectnet、ferplus&#xff0c;之前跑rafdb精度挺正常的&#xff0c;但是另外两个数据集复现不出来精度&#xff0c;经过几个月的踩坑&#xff0c;我发现其实是数据集的原因。 我在官方找的AffectNet数据集有几十个G&…

SQL 高阶 (sql优化)

批量插入&#xff1a; sql 批量插入&#xff1a; INSERT INTO users(name, age) VALUES (Tom, 20), (Jerry, 22), (Bob, 19); -- 该方式 适合 500条以内。多线程插入批量插入&#xff0c;能够大幅提升插入速度。 经过测试&#xff1a;系统性能&#xff0c;8核16G 插入10w条数…

Leetcode 1108. IP地址无效化 C++实现

Leetcode 1108. IP 地址无效化 问题&#xff1a;给你一个有效的 IPv4 地址address&#xff0c;返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址&#xff0c;其实就是用 "[.]" 代替了每个 "."。 方法1&#xff1a;对字符串挨个进行判断&#xff0c;如…

java程序优化

Java程序的性能优化是一个复杂但非常重要的过程&#xff0c;它涉及多个方面。首先&#xff0c;我们需要识别性能瓶颈的具体位置&#xff0c;这通常可以通过性能分析工具&#xff08;如JProfiler, VisualVM等&#xff09;来完成。以下是一些通用的优化策略&#xff1a; 代码层面…