您现在正在浏览:首页 > 职教文章 > 职教论文 > 有限状态机设计策略

有限状态机设计策略

日期: 2012/1/14 浏览: 4 来源: 学海网收集整理 作者: 佚名

有 限状态机设计策略

王 巍 高德远

西 北 工 业 大 学 , 航空微 电子 中心 西 安

摘 要 作为一个数字逻样工程师 , 经 常会碰到设计一个有限状 态机的 问题 。 该 文讨论 了 设计的一 些 注 意事

项 和相应 的 编 程风格 。

关键词 有限状态机 硬件描述语言 编码风格

, , , ’

邵 , ,

,

七 , 加 ,

状态机结构

最一般意义上的时序逻辑可 以用两种逻辑模块予 以定

义 组合逻辑块 用 表示 和寄存器逻辑块 用 表示 。 那

么时序逻辑有 、 、 和 几种类 型 这些类型

定义中信号从左向右流动 , 其中寄存器逻辑块包含沿触发

的触发器和电平触发的锁存器 。 虽然它们都不能称为有限

状态机 , 但可 以利用它们来将复杂设计分解为更简单 、 更可

控的模块 。 一个同步 邢 的一般结构如下图 。





别 丫 勺 二

舟 夕 产

状态转移的描述 ④输出的描述 ⑤复位条件 同步或异步 。

在 描述 中 , 当前状态和输人的所有组合都被编

码 , 再针对每种编码给出对应的下一状态和输出值 。 上图中

的状态机既可 以被编码为两个独立的 语句 , 也可以

仅使用一个来描述 。 吻 型状态机适用于单个 语句

描述 , 因为它的输出不仅仅依赖于状态转移 , 而且还依赖于

当前状态 。

下面是一般规则 , 可供参考

· 每个模块只描述一个状态机

· 将无关逻辑减至最少 比如 不要往状态机描述模块

中加人其它无关代码

·

将状态触发器从其他逻辑中分离开来

型状态机示例









型状态机示例

的当前状态保存在状态存储器中 , 这里的状态存

储器指的是 由同一时钟锁存的一组触发器 。 状态向量 , 也称

为当前状态 , 就是状态存储器中的当前存储值 。 状态机下一

状态是状态 向量和输入的函数 。 街 型状态机的输 出是

状态 向量和输人的函数 而 型状态机的输出仅仅是

状态向量的函数 。

并没有对状态机描述规定一般格式 , 但为 了让

综合工具从 描述识别并综合出状态机来 , 还是要遵

循一定的编码风格 , 基本的 编码风格就是用 语

句或其他的等价方法 比如 一汀 一 玲 来描述 。

状态机描述必须包含以下 内容

①状态变量 , 用于指明状态机所处的状态 ②时钟 ③

状态编码

通常 , 设计状态机时所须作出的最重要 的决定是如何

进行状态编码 。 编码方式不 当会导致状态机 占用过多 的逻

辑 , 或速度太慢 。 目前 已经开发 了一些工具来形成优化的状

态编码 , 典型 的方法有 最少状态位或用类似于 的两

级逻辑来实现 。

·

压缩状态编码 该编码方式中用于存储状态向量的触

发器数量较少 , 但是状态的编码和译码需要额外逻辑 。 常用

的编码方式有 码 、 二进制码和随机码 。

一 编码 在这种编码方式中 , 对应于任何给定状

态的状态 向量各位 中仅有一位置位 , 其它位全为 。 因此 ,

状态的状态机需要 位触发器 。 由于状态 向量中的状态位

直接表示机器状态 , 所以状态译码很简单 , 不需要额外的逻

辑 。 另外 , 它还有其它一些优点 速度快 , 它的速度独立于

状态数量 , 而仅与转移到特定状态的转移数量有关 , 与之相

比 , 压缩状态编码在状态增加时速度会明显下降 不用在

寻找优化的状态编码上花费精力 , 这在修改状态机时显得

特别有效 , 因为对某一特定设计是优化的状态编码 , 在增加

或修改状态后便不能保证是优化的了 , 而 一 编码在

刚燮

作者简介 王巍 , 在职博士 , 助教 , 主要研究方向为 系统设计和电子设计 自动化 。

计算机工程与应用

? 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

任何情况下都是同样优化 的 一 编码的 易于

设计 , 代码可 以直接从状态转换 图得到 , 而无须再画

一个状态表 易于修改 , 增减状态或改变状态转换条件都

可 以在不影 响状态机的其它部分的情况下很方便 地实现

易于从 综合 与压缩状态编码相 比 , 付出的面

积代价不大 在静态时序分析时 , 容易寻找关键路径

易于调试 , 错误的状态转移和 当前状态的显示都很清晰 。

·

伪 一 编码 如果有两组状态的功能几乎完全相

同 比如控制一个器件 的读写访 问 , 那么 就可 以使用伪

一 编码 , 此时 , 可用一个标志位或状态位来 区别状态

机 目前在哪一组状态 中 , 其余状态位则采用 一 编码 。

因此译码一个状态必须考察两个状态位 。 这种方法在保留

了 一 编码的所有优点的情况下减少 了状态位 。 尽管

标志位是状态 向量的一部分 , 但也可 以将状态触发器的输

出看作状态机的输人之一 。 另一种伪 一 编码将全零

编码为初始状态 , 这样 , 状态机的复位就简化为将所有触发

器清零 , 这一需要 同步复位的情况下非常有用 。

妙 ’ ’

妙 ’ ‘



’ ’

匕 ’ ’

下状态 的缺省赋值为全 , 然后在状态转移时某一位

被置位 。 该种编码的好处就是行为级和 门级的仿真情况完

全一致 。

·

伪 一 编码 该种编码与 一 编码 的唯一

区 别在 于要考察 了一个 以 上 的状态位后 方能确定 当前状

态 。

错误恢复与非法状态

有一种观点认为状态机 的状态触发器数量应该最少

即采用压缩状态编码 , 因为这样 , 非法状态 的数量可 以减

至最少 。

但是 , 需要解决一个问题 。 人们希望 , 在状态机失灵产

生非法转移时 , 至少转移的 目标应该是一个合法状态 , 这

样 , 状态机便能恢复工作 。 但通常情况下并非如此 , 因为状

态机结束在一个“ 合法 ”状态上并不意味着它就可 以从错误

中恢复工作 。 假设有这样一种情况 状态机在 状态下

循环 , 直到接收到一个特定信号才退出循环 。 如果在偶然情

况下 , 状态机进人 状态 , 便被挂起而无法恢复工作 ,

因为该特定信号无法产生 。

另一种观点则认为 , 也许应该使用最大数量的状态触

发器 即 一 编码 。 因为在此情况下 , 如果出现错误转

移 , 则状态机几乎一定进人非法状态 由于合法状态仅 占状

态总数的很小一部分 , 一旦外部逻辑检测到非法状态 , 便

可 以采取一些措施 比如将状态机复位 让状态机恢复工作 。

输出的编码

输出的编码方法与状态转移的编码方法类似 , 也是在

语句 中根据状态值或状态转移情况决定输出值 。

如果在某些情况下 , 输出可 以是任意值 , 那么便应该给

它赋值“ ’’ , 这样可 以得到优化的综合结果 。 如果在

语句之前给输出赋一个缺省值 , 那么便可 以保证在状态与

输人所组合形成的任何条件下均有确定的输出值 。 这种缺

省赋值可 以避免在输出上形成锁存 , 而且编码也简化为仅

在需要时修改输出值即可 。 缺省值可 以是 ,’” 、 “ ’’或“ ’’ , 最

好将缺省值赋为 ‘ ,’, , 哪怕需要外加反相器 。 为什么 呢 假

设某个输出仅在一个状态下输出为“ ” , 其余均为 “ ’’ , 那么

综合器会让这个输出就等于某个状态 。 那么再假设某个输

出仅在一个状态下输出为“ ’’ , 其余均为 “ ” , 那么综合器会

让这个输出等于其余所有状态位的或运算 。

对于 一 编码的状态机 , 如果输出恰在某个状态

有效 , 那么便可以让状态位本身作为输 出 。 而且有时 , 将输

出编码为下状态的函数要 比作为当前状态的函数容易些 。

状态转移的编码

状态转移 的编码方法是用 语句来指 明下状态

值 。

· 压缩状态编码 的状态机 这种情况下 , 语句使

用状态 向量作为表达式 。 在 中 , 状态编码被声明为枚

举类型 , 枚举元素的实际值由 预先定义 第一个元素

为 , 然后 , 二 依次类推 。 在 中预先定义状态编码

较为麻烦 , 为了改善这种情况 , 有 的 工具提供 了给枚

举类型规定其实际编码值的方法 。 但并不是所有 的

仿真器都支持这种扩展 , 这意味着行为级和 门级的仿真要

采用不同的编码方式 。

· 一 编码的状态机 在使用 一 编码的状态

机时 , 只须查看状态 向量的一位便可确定状态值 。 在如下

例子中

一 少 ’ , 今



’ ’

锁存后 的输出

状态机的输 出可 以被锁存 , 用 简单的 触发器或

触发器均可实现 。 触发器的输出再反馈到状态机作为输人 ,

下一次输出的缺省值就是触发器的当前输 出值 。 如果没有

进一步的赋值 , 则输 出值保存 当然 , 也可 以根据需要来置

位 、 清零或取反 。 型 的锁存输出在使用伪状态位的情况

下特别有效 , 比如在用伪 一 编码时 。

输入

异步输入

有 时 , 状态机 的某些输人信号与时钟异步 , 这就需要

用一个触发器来同步 。 最简单的方法就是在状态机的外部

加同步触发器 , 然后在输人上加足够延时 以确保足够 的触

发器建立时间 。 但这需要将状态机和触发器分别编译 。

不确定输入

当输人在某些确定的时间有效而在其它情况下 是不

确定或异步的话 , 状态机也会出现问题 。 即使在编码时能保

证是在输人稳定时使用信号 , 综合器也可能在编译形成电

路时 , 使得该信号会引发一些状态机误动作 。 唯一的解决方

吓转 页

计算机工程与应用

? 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

主要侧重对面向对象嵌套结构索引技术的探讨 。

索引是面 向对象数据 中进行快速查询的一项 重要技

术 , 采用合理高效的索引技术 , 可减少磁盘访 问 , 对复杂对

象的 查询而言 , 索引技术对提高查询性能更具有重要

的意义 。 与传统的关系数据库在一个属性或一组属性上建

一个索引有所不同 , 中至少引人了三类新的索引 继

承类层次索引 , 嵌套属性索引及复杂的二维索引 。

· 继承类层次索引 一个继 承类层次索引建立在一个

继承类层次中的类的某个属性上 。 在探讨继承类层次索引

方面 , 传统做法是在继 承层次的每个类上都建一索引 , 这就

是单类索引 。 类层次索引则是在继承类层次上只建一个索

引 , 该索引的索引属性值与继承层次中实例的对象标志符

有关 。 总的说来 , 如果继承层次中有两个以上的类 , 则类层

次索引优于单类索引 。 此外还有 树 一 索引 , 它是

一种根据继承层次而构造的层次索引 。

·

嵌套属性索引 一个嵌套属性索引是建立在 一个聚

集类层次上 。 嵌套属性索引方面已提出的有 多索引

讼 、 路径索引勿 、嵌套索引 及路径

字典索引 等 。 其中路径字典索引存

储开销小 , 而且能提供沿聚集类层次的高效遍历 , 具有较优

的查询性能 。 另外 , 把支持文本检索的签名方法用来 支持

查询是 中索引技术的新研究方向 。

· 二维索引 一个二维索引即一个嵌套属性索引 , 再加

上索引类与索引属性实际所属类之间所有类 的一个类层次

索引 。 嵌套继承索引 一 就是综合考虑

了聚集和继承两方面的一种二维索引 。 实际上它是对路径

索引的扩展 , 增加 了类之间的继承关系 。 对二维索引进行探

讨的文献和书籍 目前还较少 , 然而可 以肯定的是 , 作为对应

于聚集类层次和继承类层次这种可视为正交的二维层次结

构 , 二维索引的研究有重大意义 , 它将随着继承类层次索引

和嵌套属性索引研究的不断深人和成熟而提上 日程 。

逻辑优化与物理优化的结合

查询优化的逻辑层和物理层 的优化是紧密联 系的 , 把

二者截然分开 , 则优化效果就不够好 , 所以应 当在逻辑优化

的同时综合考虑物理优化 , 以达到更好的优化效果 。 文献

【 中就在逻辑优化的同时还考虑了路径索引 、 对象聚集以

及反向属性 、类 中对象个数 、 类 中对象选择谓词 的选择率 ,

谓词的复杂度分类等物理信息进行综合优化 。 这种优化途

径具有较高的实用价值 。

结束语

查询优化和查询处理是数据库系统效率的关键所在 ,

也是今后要发展和完善 必须解决的重大难题之一 。

国内外 己有一些原型系统和商品化的 系统 , 并在研

制和试验这些系统的过程中 , 提出了一 些有价值和有新意

的查询策略 , 有的思想 已 在系统 中得到 了实现 , 有 的则存在

不少 尚待解决的问题 。 查询技术方面的研究虽然成

果不断 , 但问题也不少 , 颇具挑战性 。 参考有关 查询的

文献资料后 , 了解到 查询的研究工作尚处于探讨阶段 ,

但随着研究的不断深入 , 查询的研究必将 日臻完善 。

淀稿 日期 年 月

参考文 献

汪成为 , 郑小军 , 彭木 昌 面 向对象分析 、 设计及应用 北京 国防

工业出版社 ,

肖伟器 , 冯玉才 , 王元珍 面向对象数据库 与关系数据库

之 比较研究 计算机研究与发展 , 犯 一 一

何炎祥等 面 向对象数据库 武汉 武汉大学 出版社 ,

, , 叮 一

,



叮 , 、

一 』‘

, 一

, 罗 、。 ,

, ,



昊胜利 , 王能斌 面 向对象数据库中基于有向图的联系代数

计算机学报 , 一

高级 功能委员会 第三代数据库系统宣 言 , 计算机科学 ,



, , 一

即 罗 部

廖 ‘ , , 一

张成洪 , 施伯乐 , 胡运发 面 向对象数据库的推理查询语言

软件学报 , 赠 刊 一

冯玉才 , 冯铃 面向对象数据库系统的查询处理 计算机研究

与发展 , 一

, 伍。 洲 川 呷 而

一 即 , 滋

, 一

其它参考文献略

上接 页

法就是给这类输人信号加上 门控使能 陈门控信号通 常 由

状态向量译码得到 , 这样便只有在使能信号有效时才会有

可用输人 , 而不会出现不确定情况 。 但有时这种技术会在模

块中形成冗余逻辑 , 导致一些节点不可测 , 于是在形成测试

向量时便会有问题 。

结束语

以上只是作者在工程设计实践中总结 的一些经 验与

体会 , 希望能抛砖引玉 , 共同提高 。 淀稿 日期 年 月

参考文献

以 , 几 著 , 周祖成译 “ 电子设计硬件描述语言 —” 学苑出版社 , 年

计算机工程与应用

? 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net


有限状态机设计策略.pdf

返回顶部