6 / 24 · 概念
用 FSM 调度共享资源
使用一个加法器累加四个数值,同时明确状态转换和采集行为。
课时内容可免费阅读,选课后可保存学习进度。
控制状态描述操作调度
共享资源需要按时间安排各项操作。考虑用一个加法器和十位累加器对 x0 到 x3 求和。请求被接收时,采集全部四个操作数。之后外部输入的变化不应影响尚未完成的请求。控制器选择操作数、使能累加,并决定结果何时变为有效。
使用 IDLE、ADD0、ADD1、ADD2、ADD3 和 DONE 状态。处于 IDLE 时的接收时钟沿采集输入并清零 acc。接下来四个时钟沿分别加上一个已存储的操作数。ADD3 时钟沿之后,最终和立即被存储,状态变为 DONE。DONE 保持结果,直到使用方接收它。这个简单版本在交付时钟沿返回 IDLE,不会同时接收新请求。
| 时钟沿 | 旧状态 | 动作 | 新 acc |
|---|---|---|---|
| 0 | IDLE | 采集 3,5,7,9,并清零 acc | 0 |
| 1 | ADD0 | 加 3 | 3 |
| 2 | ADD1 | 加 5 | 8 |
| 3 | ADD2 | 加 7 | 15 |
| 4 | ADD3 | 加 9,进入 DONE | 24 |
| 5 | DONE | 使用方接收结果 | 24 |
要区分时钟沿 4 之后结果可用,与时钟沿 5 发生传送。使用方停顿可能使 DONE 无限延长。资源复用减少了算术硬件,但与每周期都能接收输入的流水线相比,吞吐率受到限制。若要支持完成事务的同时接收新请求,必须明确旧结果交付与新请求初始化之间的优先级。
- 空闲(IDLE): 接收并采集全部四个数值
- 累加(ADD0..ADD3): 在四个时钟沿复用一个加法器
- 完成(DONE): 保持结果,直到被使用方接收
从状态推导控制信号:ADD 状态使能累加器,操作数选择与状态匹配,DONE 状态使结果有效。组合控制输出应具有默认值。明确接收条件,防止持续有效的请求被意外重复处理。复位返回 IDLE 并丢弃未完成工作。采用计数器的实现可以减少状态编码,但仍需要相同的逐时钟沿调度。
自己试试
四个输入均为 255 时,ADD0 到 ADD3 之后的 acc 分别是多少?如果时钟沿 5 的 output ready 为零,应该怎样处理?
阅读解释
数值依次为 255、510、765 和 1020,均可用十位表示。ready=0 时不发生交付;保持 DONE、acc=1020 和 valid=1。