Altifigence Academy

6 / 24 · 概念

用 FSM 调度共享资源

使用一个加法器累加四个数值,同时明确状态转换和采集行为。

控制状态描述操作调度

共享资源需要按时间安排各项操作。考虑用一个加法器和十位累加器对 x0 到 x3 求和。请求被接收时,采集全部四个操作数。之后外部输入的变化不应影响尚未完成的请求。控制器选择操作数、使能累加,并决定结果何时变为有效。

使用 IDLE、ADD0、ADD1、ADD2、ADD3 和 DONE 状态。处于 IDLE 时的接收时钟沿采集输入并清零 acc。接下来四个时钟沿分别加上一个已存储的操作数。ADD3 时钟沿之后,最终和立即被存储,状态变为 DONE。DONE 保持结果,直到使用方接收它。这个简单版本在交付时钟沿返回 IDLE,不会同时接收新请求。

时钟沿旧状态动作新 acc
0IDLE采集 3,5,7,9,并清零 acc0
1ADD0加 33
2ADD1加 58
3ADD2加 715
4ADD3加 9,进入 DONE24
5DONE使用方接收结果24

要区分时钟沿 4 之后结果可用,与时钟沿 5 发生传送。使用方停顿可能使 DONE 无限延长。资源复用减少了算术硬件,但与每周期都能接收输入的流水线相比,吞吐率受到限制。若要支持完成事务的同时接收新请求,必须明确旧结果交付与新请求初始化之间的优先级。

四输入累加器
  1. 空闲(IDLE): 接收并采集全部四个数值
  2. 累加(ADD0..ADD3): 在四个时钟沿复用一个加法器
  3. 完成(DONE): 保持结果,直到被使用方接收

从状态推导控制信号:ADD 状态使能累加器,操作数选择与状态匹配,DONE 状态使结果有效。组合控制输出应具有默认值。明确接收条件,防止持续有效的请求被意外重复处理。复位返回 IDLE 并丢弃未完成工作。采用计数器的实现可以减少状态编码,但仍需要相同的逐时钟沿调度。

自己试试

四个输入均为 255 时,ADD0 到 ADD3 之后的 acc 分别是多少?如果时钟沿 5 的 output ready 为零,应该怎样处理?

阅读解释

数值依次为 255、510、765 和 1020,均可用十位表示。ready=0 时不发生交付;保持 DONE、acc=1020 和 valid=1。

你的选择适用于此浏览器,可随时在页脚更改。