我是靠谱客的博主 稳重月饼,最近开发中收集的这篇文章主要介绍谈谈系统总线,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

谈到系统总线,那么第一个问题肯定就是系统总线是什么?

在我的理解里面,系统总线**就是用于连接 CPU , 存储器 , IO 设备等,并且能够让这些设备通过系统总线来联络和传输数据等。**系统总线分了很多个类别,每个类别都各自完成自己的任务,它的分类多样也造就了总线传输信息的多样性。

第二个问题就是总线有什么分类?

  • 片内总线

简单来说就是连接 CPU 内部的寄存器,ALU,CU等的总线

  • 系统总线

①数据总线:就是用于传输的数据的总线,可以串行或者并行传输。

串行其实是一位一位bit来传输,而并行就是多个bit同时传输。

②地址总线:主要是传输内存单元的地址,让 CPU 与其他设备进行沟通,可以传输到内存的指定位置。也可以是用于指明 CPU 要访问的IO接口等。

③控制总线:发出各种控制信号,比如读写命令,总线管理等。

接下来就是总线的特性和性能指标

(1)机械特性:指的是总线的几何形状,管脚个数,引脚个数等。
(2) 电气特性:其实就是规定了什么样的电平范围是高电平,什么范围是低电平。也规定了低电平有效还是高电平有效等。还有的就是信号传输的方向是单向还是双向的。
(3)功能特性:总线的作用与功能
(4)时间特性:规定了总线什么时候有效,什么时候无效

性能指标

  • 总线宽度:其实就是有多少根总线,一下子可以传输多少位二进制数
  • 总线带宽:1s中可以传输多少个字节Mbps
  • 时钟同步/异步:数据与时钟同步,或者异步执行(后面会说)。
  • 总线复用:地址线和数据线可能会复用。或者是别的总线会有多种功能复用
  • 信号线数:总线类型
  • 总线控制方式
  • 其它指标

总线有什么样的结构?

①单总线结构

单总线结构其实就是把所有的设备包括 CPU 都连到一条总线上面,实现起来非常简单,但是问题其实也是而非常明显的,如果这个时候IO设备占用了总线传输数据,而CPU刚好也需要访问内存但是总线被占用了,那么是不是就要登上好一段时间?所以单总线的瓶颈也在这个地方

②多总线结构

多总线结构的好处就是可以用多条总线来分担任务。比如现在如果有两条总线,那么是不是就可以把CPU与内存连一条,CPU与内存和IO再连一条。那么这个时候CPU就能够和内存单独访问,但是问题就是距离CPU很远的IO设备传输速度就会相对比较慢。这个时候可以改善一下这个2条连接的总线,CPU与内内存和通道(相当于是专门处理IO系统的一种处理器)连一条,IO设备自己连一条。还有很多种连接方式,条数增加合理,搭配合理,高速设备和低速设备分开等,都能提高通信的速率。

再来谈谈总线的判优处理

什么是判优处理呢?它是做什么的?其实就是多个IO设备同时请求总线应该谁优先的问题。判优算法不同或者硬件逻辑组织处理不同都会导致处理效率不同

BG:查询IO设备是否有发出请求的总线
BS:通知总线是否被占用的总线
BR:IO设备发出请求的总线

①链式查询

其实有点类似于链表的结构。可以想象成它是固定一条链表,由BG连接这些设备,并且每次有设备发出请求,那么就会通过BG来一个一个往下面查询所有的设备的请求状况,如果某设备发出了请求,那么就会让这个设备占用总线,越在后面的设备优先级越低。这种判优方式公平度并不是很高。而且如果某个设备出现问题,那么就会影响整个过程

②计数器定时查询

这种用到了一个设备地址线,BS和BR。这种不同地方就是加上了一个计数器,比如从0开始,0,1,2,3,4,5。。这样子的循环查询。并且通过计算器来计算设备地址号来决定查询的目标设备。并循坏计算新地址不断查询。这种的好处是可以设置谁先开始。优先级也是被固定的。

③独立请求

这种其实就是每个设备都有自己的BR和BG,能够独立发出请求,如果同一时间发出请求那么就由CPU的算法来决定由谁先执行。但是用到了庞大的线组合。每个设备都有自己的一组线

最后一个问题是总线有什么样的通信控制?

①同步通信

这种其实就是规定了某个命令一定要某一段时间内执行完,而且这个时候CPU和IO设备的时标是同步的。比如现在有四个周期t1 ,t2, t3 ,t4。t1传输地址,t2传输读命令,t3准备数据并传输,并且在t3结束后结束读命令和数据的传输,t4结束地址线的传输。他们都是在规定时间内完成对应的任务。但是问题就是CPU速度快,而设备速度慢,这个时候需要同步,那么总线等待设备准备数据传输数据,准备数据的时候总线是空闲的没有被充分利用到。

②异步通信
这种方式是为了解决同步方式带来的问题。如果设备速度不一致,那么就是用请求与应答这样的异步形式,来完成数据的传输。主模块发出请求之后就会一直旋转等待设备的回应。收到回应之后才会结束。

补充,异步分了三种方式,一种是不互锁,其实就是主设备发送请求信号后不管是否能够传输成功是否有应答都不会再发送了。从设备也一样发送应答之后也不管主设备是否收到。第二种是半互锁,这种就是主设备一直发送请求,直到接收到应答,而从设备只会发送一次应答之后就不管了。最后一种就是互锁,主设备一直发送请求直到收到应答,从设备发送应答直到主设备结束发送请求。

异步传输的问题是很多冗余的bit,传输速度也很慢。

③半同步通信
这种其实就是上面两种的这种。使用了同步的规定时间做完某操作,比如t1传输地址,t2传输读命令,t3传输数据。但是如果t2和t3之间准备数据时间很长,那么就可以使用异步方式增加一些tw间隔时间来顶替这些等待时间。而在这个时候CPU会一直循环等待,直到tw间隔结束,tw间隔可以有多个,比如 t1 ,t2 ,tw,tw ,t3这样的。

④分离式通信
假设现在有两个模块A和B。A发送地址和命令给B模块,这个时候就会放弃总线的使用权。交给别的需要使用的模块。而B接收到之后就开始准备数据,准备完之后就会发出申请总线的请求,最后把数据传输给A模块。这种的好处是能让总线充分利用,上面的操作都是会有一段准备数据的等待时间,总线空闲,这段时间就被浪费了。所以这个通信方式更能充分利用总线。

最后

以上就是稳重月饼为你收集整理的谈谈系统总线的全部内容,希望文章能够帮你解决谈谈系统总线所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部