计组与微机控制
5.4 总线结构和时序
5.4 总线结构和时序

一.总线的结构:


二.总线周期:
一次总线传输通常包括:
1. 总线请求与仲裁阶段;
2. 寻址阶段;
3. 数据传输阶段;
4. 结束阶段。
总线时序要解决的问题:
> 发送方什么时候把数据放到总线上,接收方什么时候采样数据。
常见控制信号:
- 读信号;
- 写信号;
- 地址锁存信号;
- 准备好/等待信号;
- 中断请求;
- DMA 请求。(也就是之前操作系统的直接DMA来内存分配来的)

三.总线性能
总线带宽表示单位时间内总线最大数据传输能力。
公式:总线带宽 = 数据宽度 / 总线周期
例如:
数据宽度 = 2 Byte
时钟频率 = 10 MHz
若每周期传一次,则带宽约为 20 MB/s
如果一次传输需要 2 个时钟周期,则带宽约减半。

PCXT总线:
PC XT 总线是 IBM PC XT 中使用的总线,后来扩展为 ISA 总线。
特点:
- 8 位数据总线;
- 包含地址线、数据线、控制线;
- 支持存储器读写、I/O 读写;
- 支持中断和 DMA;
- 有电源、时钟、复位等信号。
典型信号:
- 地址:`SA0-SA19`;
- 数据:`SD0-SD7`;
- I/O 读写:`IOR#`、`IOW#`;
- 存储器读写:`MEMR#`、`MEMW#`;
- 中断:`IRQ`;
- DMA:`DRQ/DACK`。


四.总线的时序与仲裁:从请求总线到完成总线使用的操作序列称为总线事务。
一次总线事务就是一次完整的总线操作。
比如 CPU 从内存读一个数据,这不是一瞬间完成的,而是有一连串步骤:
申请总线获得总线放出地址和命令传输数据释放总线
这一整套过程就叫 总线事务。
典型总线事务的五个阶段:
请求阶段 仲裁阶段 寻址阶段 传输阶段 释放阶段
请求阶段: 主设备想使用总线时,不能直接抢。
因为总线是公共资源,同一时刻通常只能一个主设备使用。
比如 CPU 想访问内存,DMA 控制器也想访问内存,它们都想用总线。
这时候主设备会发出请求:这个阶段叫 请求阶段。
5.2 仲裁阶段:决定谁先用
如果只有一个主设备请求总线,那很简单,直接给它用。
但如果多个主设备同时请求总线,就需要一个机构决定谁先使用。
这个过程叫 总线仲裁。
总线仲裁就像老师点名:CPU 举手。DMA 也举手。老师决定先让谁发言。
谁被允许,谁就获得总线控制权。
仲裁就是多个设备抢总线时,决定谁先用。
5.3 寻址阶段:告诉从设备“我要访问你”
主设备拿到总线使用权后,会把目标地址放到地址总线上。
同时,还会通过控制总线发出读/写命令。
比如 CPU 想读内存地址 1000H:
地址总线:1000H控制总线:读命令数据总线:暂时还没有有效数据
这个阶段叫 寻址阶段。
寻址阶段的核心是:主设备告诉系统:我要访问哪个从设备、哪个地址、做什么操作。
5.4 传输阶段:真正交换数据
寻址完成后,从设备开始响应。
如果是读操作:CPU 发地址和读命令。内存找到对应数据。内存把数据放到数据总线上。CPU 从数据总线上取走数据。
如果是写操作:CPU 发地址和写命令。CPU 把数据放到数据总线上。内存把数据写入对应地址。
所以传输阶段才是真正的数据交换阶段。
5.5 释放阶段:总线用完了,让给别人
一次操作完成后,主设备要撤销相关信号,释放总线。
释放之后,其他设备才可以申请使用总线。
所以完整过程是:
申请 → 分配 → 给地址/命令 → 传数据 → 释放
五.总线的数据传送方式
非突发传送方式:每个传送周期内都先传送地址,再传送数据,每次只能传输一个数据。
这个很好理解。
假设 CPU 要从内存连续读 3 个数据:
地址1 → 数据1地址2 → 数据2地址3 → 数据3
每传一个数据,都要重新给一次地址。
所以非突发传送的特点是:
一个地址对应一个数据。
它的好处是简单。缺点是效率低,因为每传一次数据都要重新传地址。
突发,也叫猝发传送方式
突发传送方式:寻址阶段发送连续数据单元的首地址,在传输阶段传送多个连续单元的数据,直到全部数据传完后才释放总线。
突发传送的核心是:
只给一次首地址,然后连续传多个数据。
比如 CPU 要读地址 1000、1004、1008、100C 这几个连续地址中的数据。
非突发方式:
地址1000 → 数据1地址1004 → 数据2地址1008 → 数据3地址100C → 数据4
突发方式:
首地址1000 → 数据1 → 数据2 → 数据3 → 数据4
也就是说,后面的地址不用一个一个传,因为它们是连续的。
从设备知道:
你给我首地址 1000,接下来连续传 4 个数据,那我就自动按顺序取:
100010041008100C
突发传送为什么快?
因为它减少了地址传送次数。
非突发传 4 个数据,需要:
地址1 + 数据1地址2 + 数据2地址3 + 数据3地址4 + 数据4
如果地址和数据各占 1 个时钟周期,那就是 8 个周期。突发传 4 个数据,需要:
首地址 + 数据1 + 数据2 + 数据3 + 数据4 只需要 5 个周期。
所以突发传送适合连续数据块传输,比如:
从内存连续读一段数据。CPU取一段连续指令。Cache和主存之间传送一个块。DMA连续搬运数据。
练习题:题目大意:
总线时钟频率 100MHz,宽度 32位,地址/数据线复用。每传一个地址或数据占用一个时钟周期。总线支持突发传送。一次“主存写”总线事务传输 128位数据,问至少需要多少时间。
先算一个时钟周期多长:100MHz = 每秒 100,000,000 次。
所以周期:T = 1 / 100MHz = 10ns 所以一个时钟周期是 10ns。
数据总线宽度 32位,说明一次最多传 32位数据。
现在要传 128位数据。128 / 32 = 4 所以数据要传 4 次。
题目说 地址/数据线复用。这句话很重要。地址/数据线复用的意思是:
地址和数据使用同一组线。同一时刻这组线不能既传地址又传数据。
所以必须分时使用:先用这组线传地址。然后再用这组线传数据。
因为是突发传送,所以只需要传一次首地址。
于是总周期数是:
首地址:1 个周期 数据1:1 个周期数据2:1 个周期 数据3:1 个周期数据4:1 个周期 总共 5 个周期。
每个周期 10ns,所以:5 × 10ns = 50ns9.2 再看总线宽度 32位
数据总线宽度 32位,说明一次最多传 32位数据。
现在要传 128位数据。
需要传几次?
128 / 32 = 4
所以数据要传 4 次。
9.3 为什么还要加一次地址?
题目说 地址/数据线复用。
这句话很重要。
地址/数据线复用的意思是:
地址和数据使用同一组线。
同一时刻这组线不能既传地址又传数据。
所以必须分时使用:
先用这组线传地址。然后再用这组线传数据。
因为是突发传送,所以只需要传一次首地址。
于是总周期数是:
首地址:1 个周期数据1:1 个周期数据2:1 个周期数据3:1 个周期数据4:1 个周期
总共 5 个周期。
每个周期 10ns,所以:
5 × 10ns = 50ns答案就是 50ns,选 C。
9.4 为什么不是 40ns?
40ns 只算了 4 次数据传输,没有算首地址。
但题目明确说地址/数据线复用,并且每传一个地址或数据占一个周期。
所以地址必须占 1 个周期。
9.5 为什么不是 80ns?
80ns 是非突发传送的思路。
如果不用突发,每传一个 32位数据都要传一次地址:
地址1 + 数据1地址2 + 数据2地址3 + 数据3地址4 + 数据4一共 8 个周期。
8 × 10ns = 80ns。但是题目说支持突发传送,所以最少时间是 50ns。
10. 总线定时是什么意思?
总线定时就是研究:
总线上的每个信号什么时候出现,什么时候有效,什么时候撤销。
比如 CPU 读内存时:什么时候把地址放到地址总线上?什么时候发读命令?内存什么时候把数据放到数据总线上?CPU什么时候取数据?什么时候释放总线?
这些时序安排就叫总线定时。
可以把总线定时理解成“大家按照什么节奏配合”。
11. 同步定时方式
同步定时方式的核心是:
所有操作都跟着统一的总线时钟走。
就像全班同学做广播体操,所有人听同一个口令。
T1:CPU放地址。T2:CPU发读命令。T3:内存准备数据。T4:CPU读取数据。
所有阶段都是提前规定好的。
11.1 同步方式的优点
同步方式速度快。因为大家都知道什么时候该做什么,不需要反复确认。
控制逻辑也简单。比如规定好:
第一个时钟周期放地址。第二个时钟周期发读命令。第四个时钟周期数据一定有效。
那 CPU 到第四个周期直接取数据就行。
11.2 同步方式的缺点
缺点是可靠性差一些,适应性差。为什么?
因为同步方式假设从设备一定能按规定时间准备好数据。
比如 CPU 规定:第 4 个周期我来取数据。
可是如果内存慢了一点,第 4 个周期数据还没准备好,那 CPU 就可能读到错误数据。所以同步方式适合:总线比较短。设备速度差不多。传输延迟比较稳定。系统内部部件配合紧密。
