数字硬件与有限状态机相关知识解析
1. 数字硬件基础要点
1.1 轮询改进与中断驱动
为了改进轮询方式,可以利用定时器周期性触发中断线,将轮询的简单性与中断驱动 I/O 的效率相结合。在中断服务例程中,CPU 依次对各个外围设备进行轮询,若设备有未处理的请求,则分支到相应的特定服务例程。
1.2 数字硬件特性
- 位模式处理 :数字硬件处理的是位模式,而非数字。只有根据设计者所设想的特定数字表示方案进行解释时,这些位模式才具有数字的意义。
- 零延迟循环 :零延迟循环可能会导致不可预测的行为,因此最好避免使用。
- 组合逻辑输出 :除非有证据表明不会出现,否则要做好在任何组合逻辑输出端观察到意外瞬态脉冲的准备。
- 污染延迟概念 :虽然所有的数据手册和教科书都提到了建立时间、保持时间和传播延迟,但如果不引入污染延迟的概念,就无法理解简单移位寄存器的工作原理。
- 双稳态类型 :任何双稳态元件要么是边沿触发的触发器,要么是电平敏感的锁存器,要么是无时钟的双稳态元件。在技术和语言上,必须将它们区分开来。
- 电子设计自动化工具使用 :在启动任何类型的电子设计自动化工具之前,需要:
- 了解其优化标准和限制。
- 确定它是否确实适用于当前的问题。
- 深入理解可用的选项和控制,以便将所有选项和控制旋钮设置为合适的值。
1.3 数据传输协议
有三种基本协议可用于组织外围设备和微型计算机之间的数据传输:
-
周期性轮询
:在程序循环中定期轮询外围设备以获取服务请求。
-
中断驱动
:外围设备发出特殊信号中断常规程序执行。
-
直接内存访问
:借助额外的直接内存访问控制器绕过 CPU 进行数据传输。
2. 有限状态机概述
2.1 研究动机
自动机理论与离散计算的基本问题相关,如形式语言和语法、解析、可判定性和可计算性。虽然其基础形式模型对计算设备进行了简化抽象,忽略了许多与数字设计相关的问题,但在电子设计中研究它仍有以下三个方面的动机:
-
功能规范
:描述数字系统的功能并非易事,自动机理论通常有助于以更正式的方式指定电路输入和输出之间的关系,特别是对于控制和协议导向的任务。
-
建模和验证
:从外部看,整个系统的行为可以建模为一个单一的有限状态机。虽然这通常不是构建电路的高效方法,但这种抽象对于通过仿真和测试验证系统的行为很有用。
-
综合
:几乎任何实际系统都是由多个协作的子系统组成的,每个子系统又可以建模为有限状态机。在一定的细节层面上,任何同步电路都是按照特定类型的自动机构建的。
2.2 有限状态机定义
一个确定性自动机是一个系统,在离散时刻 (t = 0, T, 2T, 3T, \cdots, kT, (k + 1)T, \cdots) 满足以下条件:
1. 系统的输入可以从一组可能的刺激 (I) 中选择。
2. 受到输入 (i) 作用的系统只能处于一组可能状态 (S) 中的一个,并输出一组可能响应 (O) 中的一个。
3. 系统的当前状态和输入唯一地确定了系统在下一时刻将进入的状态。
我们将讨论限制在有限状态机(FSM),其中集合 (I)、(S) 和 (O) 都被限制为有限个元素。一般来说,(I)、(S) 和 (O) 的基数不一定相同。
3. 有限状态机类型
3.1 Mealy 机
Mealy 机使用以下两个方程来描述其行为:
[
\begin{cases}
o(k) = g(i(k), s(k)) \
s(k + 1) = f(i(k), s(k))
\end{cases}
]
其中 (i \in I),(s \in S),(o \in O)。(g) 称为输出函数,(f) 称为转移函数或下一状态函数。在 (k = 0) 时,自动机处于特殊状态 (s_0 \in S),称为起始状态。
Mealy 机的当前输出取决于当前输入。可以通过列出所有当前状态和输入组合的下一状态和输出值来完全描述一个有限状态机,这种列表称为状态表。状态图(也称为状态转移图)是状态表的图形表示,每个状态用一个顶点表示,每个转移用一条有向边表示,短箭头标识起始状态。
下面是一个 Mealy 机的示例:
| (i(k)) | (s(k)) | (o(k)) | (s(k + 1)) |
| ---- | ---- | ---- | ---- |
| (a) | (p) | (1) | (r) |
| (b) | (p) | (0) | (t) |
| (a) | (q) | (0) | (p) |
| (b) | (q) | (1) | (q) |
| (a) | (r) | (1) | (q) |
| (b) | (r) | (0) | (r) |
| (a) | (t) | (0) | (r) |
| (b) | (t) | (1) | (p) |
其状态图如下:
graph LR
classDef state fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
p([p]):::state -->|a/1| r([r]):::state
p -->|b/0| t([t])::state
q([q]):::state -->|a/0| p
q -->|b/1| q
r -->|a/1| q
r -->|b/0| r
t -->|a/0| r
t -->|b/1| p
style p fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style q fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style r fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style t fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
3.2 Moore 机
Moore 机的输出函数仅取决于当前状态,即:
[
\begin{cases}
o(k) = g(s(k)) \
s(k + 1) = f(i(k), s(k))
\end{cases}
]
这意味着输出只有在状态转移时才会改变。
下面是一个 Moore 机的示例:
| (i(k)) | (s(k)) | (o(k)) | (s(k + 1)) |
| ---- | ---- | ---- | ---- |
| (a) | (u) | (1) | (z) |
| (b) | (u) | (1) | (w) |
| (a) | (v) | (0) | (z) |
| (b) | (v) | (0) | (w) |
| (a) | (w) | (0) | (x) |
| (b) | (w) | (0) | (u) |
| (a) | (x) | (0) | (y) |
| (b) | (x) | (0) | (x) |
| (a) | (y) | (1) | (v) |
| (b) | (y) | (1) | (y) |
| (a) | (z) | (1) | (y) |
| (b) | (z) | (1) | (x) |
其状态图如下:
graph LR
classDef state fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
u([u]):::state -->|a/1| z([z]):::state
u -->|b/1| w([w]):::state
v([v]):::state -->|a/0| z
v -->|b/0| w
w -->|a/0| x([x]):::state
w -->|b/0| u
x -->|a/0| y([y]):::state
x -->|b/0| x
y -->|a/1| v
y -->|b/1| y
z -->|a/1| y
z -->|b/1| x
style u fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style v fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style w fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style x fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style y fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style z fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
3.3 Medvedev 机
在电子硬件设计的某些特定情况下,输出函数中禁止进行逻辑运算。数学家使用 Medvedev 来表示 Moore 机的一个子类,其中输出函数 (g) 退化为恒等函数,即 (o(k) = s(k)),转移函数仍为 (s(k + 1) = f(i(k), s(k)))。
在数字电路中,当状态和输出符号被编码为二进制向量时,可以稍微放宽这个定义。只要状态和输出向量的差异只是布线问题,不涉及逻辑门,就可以认为是 Medvedev 自动机。大多数计数器都是 Medvedev 自动机的实际例子。
下面是一个 Medvedev 机的示例:
| (i(k)) | (s(k)) | (o(k)) | (s(k + 1)) |
| ---- | ---- | ---- | ---- |
| (a) | (1c) | (1) | (1e) |
| (b) | (1c) | (1) | (0d) |
| (a) | (0d) | (0) | (1e) |
| (b) | (0d) | (0) | (0d) |
| (a) | (0e) | (0) | (1d) |
| (b) | (0e) | (0) | (0e) |
| (a) | (1d) | (1) | (0c) |
| (b) | (1d) | (1) | (1e) |
| (a) | (1e) | (1) | (1d) |
| (b) | (1e) | (1) | (0e) |
其状态图如下:
graph LR
classDef state fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
1c([1c]):::state -->|a/1| 1e([1e]):::state
1c -->|b/1| 0d([0d]):::state
0d -->|a/0| 1e
0d -->|b/0| 0d
0e([0e]):::state -->|a/0| 1d([1d]):::state
0e -->|b/0| 0e
1d -->|a/1| 0c([0c]):::state
1d -->|b/1| 1e
1e -->|a/1| 1d
1e -->|b/1| 0e
style 1c fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style 0d fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style 0e fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style 1d fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style 1e fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
style 0c fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
4. 有限状态机模型之间的关系
4.1 功能等价定义
两个自动机被认为是等价的,如果对于任何相同的输入符号串,它们总是产生相同的输出符号串。需要注意的是,等价自动机的状态图不一定是同构的,因为上述定义仅涉及输入和输出量,在等价的上下文中,自动机被抽象为黑盒。
4.2 Mealy 机和 Moore 机的等价性
4.2.1 自动机理论中的等价性
在自动机理论中,Mealy 机可以随时响应输入变化,而 Moore 机的响应必须延迟到下一个有效时钟边缘之后。Moore 机的输出有 1 个时钟周期的延迟,而 Mealy 机的输出延迟为 0。为了解决这个问题,在自动机理论中放宽了等价性的要求:如果从 Moore 机的输出串中删除与起始状态相关的第一个输出符号后,对于任何相同的输入符号串,Mealy 机和 Moore 机总是产生相同的输出符号串,则认为它们是等价的。
可以证明,对于任何 Mealy 自动机,在上述广义定义下存在一个等价的 Moore 自动机,反之亦然。将 Moore 机转换为等价的 Mealy 机很简单,只需删除状态图中与顶点相关的输出符号,并将其附加到进入该顶点的所有边上,状态数量不变。而将 Mealy 机转换为 Moore 机时,当尝试为顶点分配与其入边相关的输出符号时可能会发生冲突,此时需要将顶点拆分为多个副本,每个副本对应一个不同的输出符号。这个过程可能会导致状态数量大幅增加。
4.2.2 硬件设计中的等价性
从工程角度来看,Moore 机额外的输出符号 (o(0)) 和后续符号的时间偏移不能被忽略。除非延迟对于当前应用确实无关紧要,否则在硬件设计中,Mealy 自动机和 Moore 自动机在更严格的等价定义下永远不可能等价。
4.3 Moore 机和 Medvedev 机的等价性
对于任何 Moore 自动机,在更严格的等价定义下存在一个等价的 Medvedev 自动机,反之亦然。将 Moore 机转换为等价的 Medvedev 自动机的方法是:考虑 Moore 自动机的状态图,将每个状态的输出符号分配为其状态符号的左部分。如果所有状态都有唯一的标签,则右部分为空,转换完成;否则,为每个状态分配一个右部分以使其唯一。转换后得到的 Medvedev 自动机的状态数量与原始 Moore 模型相同,但需要更多的位来编码更宽的 Medvedev 状态符号。
下面是 Mealy 机和 Moore 机在不同输入下输出字符串的对比:
| (k) | (0) | (1) | (2) | (3) | (4) | (7) | (8) |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
|
输入 (a,b,b)
| | | | | | | |
| Mealy 机输出 | (1) | (0) | (0) | | | | |
| Moore 机输出 | ([1]) | (1) | (0) | (0) | | | |
|
输入 (b,b,a,a,b,a)
| | | | | | | |
| Mealy 机输出 | (0) | (1) | (1) | (1) | (1) | (0) | |
| Moore 机输出 | ([1]) | (0) | (1) | (1) | (1) | (1) | (0) |
通过对这些有限状态机类型及其关系的研究,我们可以更好地理解和设计数字电路,根据不同的应用需求选择合适的模型。在实际设计中,需要综合考虑延迟、状态数量、硬件复杂度等因素,以实现最优的设计方案。
5. 有限状态机的应用与实际考量
5.1 有限状态机在电子电路中的应用场景
有限状态机在电子电路中有着广泛的应用,尤其是在控制器中,用于管理顺序数据处理和数据交换操作。例如,在通信协议中,有限状态机可以用于控制数据的发送和接收过程,确保数据的正确传输。在处理器的流水线控制中,有限状态机可以协调各个阶段的操作,提高处理器的性能。
5.2 实际设计中的考量因素
在实际设计有限状态机时,需要考虑以下几个重要因素:
-
延迟问题
:如前文所述,Mealy 机和 Moore 机的输出延迟不同。在对延迟敏感的应用中,需要谨慎选择合适的模型。例如,在实时控制系统中,Mealy 机由于其输出延迟为 0,可能更适合;而在对时序要求严格且可以容忍一个时钟周期延迟的系统中,Moore 机可能是更好的选择。
-
状态数量
:从 Mealy 机转换到 Moore 机时,状态数量可能会大幅增加。过多的状态会增加硬件的复杂度和成本,同时也会增加设计和调试的难度。因此,在设计过程中,需要权衡状态数量和功能实现的需求。
-
硬件复杂度
:不同类型的有限状态机对应的硬件结构不同。例如,Mealy 机的输出与输入和当前状态都有关,其硬件实现可能相对复杂;而 Moore 机的输出仅取决于当前状态,硬件实现可能相对简单。在设计时,需要根据硬件资源和性能要求选择合适的模型。
5.3 设计流程建议
为了设计出高效、可靠的有限状态机,建议遵循以下设计流程:
1.
功能分析
:明确系统的功能需求,确定输入、输出和状态集合。
2.
模型选择
:根据延迟要求、状态数量和硬件复杂度等因素,选择合适的有限状态机模型(Mealy 机、Moore 机或 Medvedev 机)。
3.
状态图绘制
:根据系统的行为,绘制状态图,清晰地表示状态之间的转换和输出。
4.
状态表生成
:根据状态图,生成状态表,列出所有可能的输入、当前状态、输出和下一状态。
5.
硬件实现
:根据状态表,设计相应的硬件电路。可以使用逻辑门、触发器等基本元件,也可以使用可编程逻辑器件(如 FPGA)进行实现。
6.
仿真和测试
:使用仿真工具对设计进行仿真,验证其功能的正确性。然后进行实际测试,确保系统在实际环境中能够正常工作。
6. 总结与展望
6.1 有限状态机知识总结
本文详细介绍了数字硬件基础要点和有限状态机的相关知识。在数字硬件方面,我们了解了轮询改进、数字硬件特性和数据传输协议等内容。在有限状态机方面,我们介绍了 Mealy 机、Moore 机和 Medvedev 机三种类型,以及它们之间的功能等价关系。
有限状态机的不同类型各有特点:
| 类型 | 输出函数特点 | 延迟情况 | 状态转换特点 | 应用场景 |
| ---- | ---- | ---- | ---- | ---- |
| Mealy 机 | 输出取决于输入和当前状态 | 输出延迟为 0 | 状态转换和输出受输入即时影响 | 实时控制、对延迟敏感的系统 |
| Moore 机 | 输出仅取决于当前状态 | 输出有 1 个时钟周期延迟 | 状态转换后输出才改变 | 时序要求严格、可容忍延迟的系统 |
| Medvedev 机 | 输出函数退化为恒等函数 | 类似 Moore 机 | 状态和输出紧密关联 | 计数器等应用 |
同时,我们还探讨了在自动机理论和硬件设计中 Mealy 机和 Moore 机的等价性问题,以及如何进行它们之间的转换。
6.2 未来发展展望
随着电子技术的不断发展,有限状态机的应用领域将不断扩大。例如,在人工智能和机器学习领域,有限状态机可以用于设计智能控制器和状态监测系统。在物联网领域,有限状态机可以用于管理设备之间的通信和交互。
未来,有限状态机的设计方法和工具也将不断改进。例如,将更加注重自动化设计和优化,减少人工设计的工作量和错误率。同时,随着硬件技术的发展,有限状态机的实现将更加高效、低功耗,以满足不断增长的应用需求。
通过深入理解有限状态机的原理和应用,我们可以更好地应对未来电子设计中的挑战,设计出更加高效、可靠的系统。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(功能分析):::process --> B(模型选择):::process
B --> C(状态图绘制):::process
C --> D(状态表生成):::process
D --> E(硬件实现):::process
E --> F(仿真和测试):::process
在实际应用中,我们需要不断学习和实践,结合具体的需求和场景,灵活运用有限状态机的知识,以实现最优的设计方案。同时,关注行业的最新发展动态,不断探索有限状态机在新领域的应用,为电子技术的发展做出贡献。
超级会员免费看

被折叠的 条评论
为什么被折叠?



