LaTeX 渲染有问题。将就着看吧。

类型

  • 芯片内部总线

  • 系统总线

  • 通信总线

# 总线结构

# 数据线

系统组件之间传输数据

数据线的数量决定了一次可以传输的数据的大小

# 地址线

在数据线和地址 I/O 端口上指定数据的来源和去向

地址线的数量决定了寻址空间的大小

即:如果寻址空间为 2^32,那么地址线有 32 根

两台地址线数量相同的计算机,寻址空间的大小一样吗?

其理论寻址空间是相同的,但 实际寻址空间大小使用方式 可能不同,取决于多种其他因素。

# 控制线

控制对数据线和地址线的存取和使用

・时钟(clock):用于总线同步操作

・总线请求(bus request):表示模块需要获得对总线的控制

・总线允许(bus grant):发出请求的设备已经被允许控制总线

・中断请求(interrupt request):表示某个中断正在悬而未决

・中断响应(interrupt ACK):未决的终端请求被响应

・存储器读(memory read):从存储器读数据到总线

・存储器写(memory write):将数据从总线写入存储器

・I/O 读(I/O read):从 I/O 端口读数据到总线

・I/O 写(I/O write):将数据从总线写入 I/O 端口

• ……

# 总线上数据传输的特点

总线可以被多个设备监听,但同一时刻只能由一个设备发送数据

当总线在被使用过程中,其它设备不可以抢占

如果设备想发送数据 / 请求数据,需要先获得总线的使用权

# 设计要素

# 用途

专用(dedicated)总线:始终只负责一项功能,或始终分配给特定的计算 机组件

复用(multiplexed)总线:将同一线路用于多种用途

# 仲裁与仲裁方案

当多个设备需要与总线通信时,通过某种策略选择一个设备

仲裁方案:

  • 集中式(centralized):由仲裁器(arbiter)或总线控制器(bus controller)负责分配总线使用权

    • 链式查询 / 菊花链

    • 计数器查询

    • 独立请求

  • 分布式(distributed):每个设备都包含访问控制逻辑,各设备共同作用分享总线

    • 自举式

    • 冲突检测

# 链式查询

所有的设备都是串行连接的,并将允许信号优先级最高的设备下发到优先级最低的设备。

总线仲裁器收到请求后,在总线不忙的前提下,发起允许信号

如果某个设备收到了允许信号并且发起了总线请求,该设备将总线设置为繁忙状态,允许信号将不再被进一步传递

197144221c5fbc9c6e686b852fcca5b9.png

确定优先级简单,可以灵活添加设备,但是不能保证公平性,限制总线的速度。

# 计数器查询

将总线允许线替换为设备 ID(地址)线

当总线仲裁器收到总线请求信号,判断总线空闲时,计数器开始计数,计数值通过设备 ID 线发向各个部件

如果当前发送请求的设备 ID 等于裁决器当前的计数,裁决器将停止计数,设备将总线设置为繁忙

人话就是仲裁器依次从高往低询问每个设备要不要使用总线,如果当前设备请求总线,则赋予其总线控制权,如果没有请求,则继续查询下一个设备。

一旦某个设备获得总线控制权,其他设备需要等待其释放总线后才能竞争。

强调优先级和公平性,但是限制总线的速度。

345f37f2276b2624abadc1b28b3391b8.png

# 独立请求

每个设备都有自己的总线请求线和总线允许线

总线仲裁器决定哪个设备可以使用总线

有很多确定策略:固定优先级,公平链式,LRU,FIFO,…

快速响应,可编程的优先级,但是逻辑更复杂,线路更多

73c85b510ec39c44c344c7417ce262a1.png

# 自举式

  • 固定优先级

  • 每个设备在其总线请求线上发送请求

    • 最低优先级的设备没有请求线
  • 每个设备自行判断自己是否在请求总线的设备中优先级最高

2c0ae01f5a75dd975a3a5a5d22d8dc25.png

# 时序

确定每个总线事务的开始和结束时间

# 同步时序

b373550f1d75534e4ddb603ba8c8ebf5.png

所有设备共享同一个时钟

# 异步时序

异步时序(Asynchronous Timing)是指总线通信过程中不依赖全局时钟,而是通过 握手信号 来协调各设备之间的操作。

分为非互锁、半互锁、全互锁。

e62bf4b220c06f86733747af020b0ad7.png

ef04e187ba71f25f4caee9e79fa29068.png

# 半同步时序

为了减少噪声的影响,在异步计时中使用时钟

准备和响应信号在时钟上升沿有效

# 分离事务

将一个总线事件分离为两个过程

# 总线带宽和数据传输速率

总线带宽(bus bandwidth):总线的最大数据传输速率

不要考虑总线仲裁、地址传输等因素

数据传输速率

考虑地址传输、握手等因素

# 同步总线和异步总线的数据传输速率

** 例题 1:** 假设同步总线的时钟周期为 50ns,每次传输需要一个时钟周期,异步 总线每次握手需要 40ns。两个总线都是 32 位宽,内存的数据准备时间为 200ns。 当从存储器中读出一个 32 位的字时,计算两个总线的数据传输速率。

同步总线:

从存储器中读出一个 32 位的字,三个流程:

  1. CPU 发送指令和地址到内存:50ns

  2. 内存准备数据:200ns

  3. 将数据传输回 CPU:50ns

由于一次传递 32 位,速率单位为 bps

所以:数据传输速率 = 32bit / (50 + 200 + 50) ns = 106.7Mbps

(1 ns 等于 10910^{-9} s)

异步总线:

步骤 1:40 ns

步骤 2、3、4 / 数据准备:max (40ns* 3,200ns) = 200ns

步骤 5、6、7:40ns * 3 = 120ns

数据传输速率 = 32bit / (40 + 200 + 120) ns = 88.9Mbps

1f44d4181a9237b28d969db2c6151274.png

每一步的解释看上面

** 例题 2:** 假设同步总线的时钟周期为 50ns,每次传输需要一个时钟周期,异步 总线每次握手需要 40ns。两个总线都是 32 位宽,存储器的数据准备时间为 230ns。当从存储器中读出一个 32 位的字时,计算两个总线的数据传输速率。

同步总线

数据传输速率 = 32bit / (50 + 250 + 50)ns = 91.4Mbps

250 是因为需要是时钟周期的倍数

异步总线

数据传输速率 = 32bit / (40 + 230 + 120) ns = 82.1Mbps

40:步骤 1

230:max(40*3,230)

120:40*3

# 不同数据块大小的数据传输速率

** 例题 3:** 假设系统具有以下特征:

  1. 它支持访问大小为 4 到 16 个字(每个字 32 位)的块

  2. 同步总线具有 64 位宽 200MHz 时钟频率,需要 1 个时钟周期来传输地址或 64 位数据

  3. 在两个总线事务之间有 2 个空闲时钟周期

  4. 内存访问时准备前 4 个字需要 200ns,后面每 4 个字准备需要 20ns

  5. 当前面的数据在总线上传输时,内存可以同时读取后面的数据

如果读取 256 个字,分别计算每次传输 4 个字和 16 个字时的数据传输速率、 传输时间和每秒总线事务数

每次传输 4 个字:

200MHz 时钟频率 → 5ns 一个时钟周期

先计算总共的时间周期:

总线事务:传地址+传 4 个字

地址传输:需要 1 个时钟周期

数据准备:需要 200ns (40 个时钟周期)

数据传输:2 个时钟周期(一个时钟周期传输 64 位,4*32/64=2)

空闲:2 个时钟周期

总共传 256 个字,256/4=64,传 64 次

因此总共:64*(1+40+2+2)=2880 个时钟周期

传输时间:2880 * 5 ns = 14400 ns

每秒总线事务数:

单次时间:(1+40+2+2)*5=225ns

每秒总线事务数 = 1s / 225ns = 4.44M

数据传输速率:总传输数据量 / 总时间

256 * 32bit / 14400ns = 568.9Mbps

每次传输 16 个字:

先计算总共的时间周期:

总线事务:传地址+传 16 个字

地址传输:需要 1 个时钟周期

数据准备(前四个字):需要 200ns (40 个时钟周期)

数据传输:2 个时钟周期(同时读取后 4 个字:20ns,4 个时钟周期)

空闲:2 个时钟周期

总共传 256 个字,256/16=16,传 64 次

因此总共:16 *(1+40+ 3 * max(2 , 4)+ 2+2)= 912 个时钟周期

解释一下,还是一次传 4 个字,16 个字传 4 组。在传第 1 组时,同时读取第 2 组数据,4>2 所以耗费 4 个时钟周期,同理传第 2 组读第 3 组,传第 3 组读第 4 组,都是 4 个时钟周期。传第 4 组时,不用读数据了,因此 2 个时钟周期即可。

传输时间: 912 * 5 ns = 4560 ns

每秒总线事务数:

单次时间:(1+40+ 3 * max(2 , 4)+ 2+2)*5=285ns

每秒总线事务数 = 1s / 285ns = 4.44M

数据传输速率:总传输数据量 / 总时间

256 * 32bit / 4560ns = 1796.5Mbps

# 提高总线的数据传输率

  1. 提高时钟频率(时钟周期数不变的情况下)

  2. 增加数据总线宽度,每次传输更多的数据

  3. 块传输,传输一次地址就传输一块数据

  4. 分离总线事务,减少总线空闲时间

  5. 分离地址线和数据线,同时传输地址和数据

# 总线层次结构

# 单总线结构

CPU、存储器和 I/O 模块都连接到一条系统总线

# 双总线结构 I

04a72126603bd6219207a1f08cb3edf8.png

在 CPU 和存储器中间增加一个存储器总线

增加 CPU 和存储器之间的传输效率,同时降低系统总线的负担

# 双总线结构 II

将系统总线分为存储器总线I/O 总线IOP(input/output processer)

降低 I/O 对总线的负担

image.png

# 多总线结构

都是增加 I/O 交互效率的。略

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

北沐清 微信支付

微信支付

北沐清 支付宝

支付宝