网站大量收购独家精品文档,联系QQ:2885784924

状态机性能考察.docxVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[技术笔记] 状态机性能考察(1) 最近对状态机产生了兴趣。看了老外的文章才知道这个领域真是旷阔无边,他们做学问的态度实在是扎实。所以先做个读书笔记。 状态机的性能指标太多,我能力有限,目前在考察范围内的只有所需的逻辑资源和简单的时序特性两项指标。 影响一个状态机的性能有多个因素,包括状态集合的编码、状态机的 HDL 编写方式、所采用的器件结构,以及其他应用相关的因素。 状态编码 常见的状态编码包括顺序二进制编码、one-hot 及改进的 one-hot 编码、Gray 码等。 顺序二进制编码,即将状态依次编码为顺序的二进制数。顺序二进制编码是最紧密的编码,优点在于它使用状态向量的位数最少。例如对于 6 个状态,只需要 3 位二进制数来进行编码,因此只需要 3 个触发器来实现,节约了逻辑资源。(在实际应用中,往往需要较多组合逻辑对状态向量进行解码以产生输出,因此实际节约资源的效果并不明显。) 在上面的例子中,3 位二进制数总共有 8 种可能的编码模式,其中 6 种用来表示有效状态,剩下的 2 种是无效编码。 有人认为顺序二进制编码还有一个好处。当芯片受到粒子辐射或者由于异步输入等问题可能会造成状态跳转失常。如果失常中状态机跳转到无效的编码状态则可能会出现死机,除非复位否则永远无法回到 Idle 状态。因为顺序二进制编码最紧密,所以无效编码最少。失常时有更大的概率跳转到的有效状态,并最终回到 Idle 状态。 这种预想的好处并不会发生在实际中。首先,失常的跳转到有效状态并不意味着能够最终回到 Idle 状态。例如在某个有效状态,状态机循环等待某输入信号,并作出应答。如果状态机失常的跳转到该状态,同样会陷入死等,因为输入信号并不会到来。其次,失常的跳转到有效状态,意味着可能在不正确的时机产生输出,这样会将故障传播到其他模块。在很多应用中人们宁愿死机不输出任何信号也不愿意输出错误的信号。 可见使用顺序二进制编码并不能使得状态机具有所想象的容错能力。 [技术笔记] 状态机性能考察(2) 在上面提高的失常跳转情况下,one-hot 编码往往工作得更好。有趣的是,它恰恰是最不紧密的编码。 在 one-hot 编码中,对于任何给定状态,状态向量只有 1 位置 1,所有其它的状态位都为0。one-hot 编码最长,因为 n 个状态就需要 n 位的状态向量。 one-hot 编码的状态机最大的优势是它的速度。one-hot 状态机的速度与状态的数量无关,仅仅取决于到某特定状态的跳转的数量。而相对的,状态增加时使用顺序二进制编码的状态机速度会急剧下降。 one-hot 编码其他的优点还有易于综合、易于寻找关键路径、易于进行静态时序分析等。具体来说,要判断当前是否在某一状态,只需要判断状态向量的对应位是 1 还是 0 即可。考虑一个典型的输出,它在某些状态输出 1,剩下的状态输出 0。只需要将状态向量中的对应位 OR 起来即可产生该输出。也就说输出很容易产生,并且从状态稳定到输出稳定的延时很确定(一个 OR 门的延时),因此易于综合以及进行静态时序分析。 应当注意的是 one-hot 编码有很多无效状态,因此在编写状态机时应该确保一旦进入无效状态可以立即跳转到确定的已知状态(通常是 Idle)。(简单的说就是生成下一状态的 case 语句要加 default;或者在 case 之前先赋上默认值,到 case 里再覆盖。) 当发生失常跳转时 one-hot 编码有很大的概率跳转到无效状态,而它的无效状态现象很明显(比如将状态向量都接到灯上,一旦同时亮多个灯就表明工作失常),即使不加处理也很容易被外部逻辑检测到,从而可以说是易于调试的。 one-hot 状态机有很多变体。比如将 Idle 状态编码为 0,其他状态按照正常的 one-hot 编码。即对于除 Idle 外的每个给定状态,对应的状态向量中有 1 位置 1,其他位为 0。这种变体的好处是在复位时可简单的将状态向量的各个触发器清 0。 另一种常见的变体称为almost one-hot编码。假设状态机有功能几乎相同的两组状态(例如,处理对某设备的读访问和写访问),可以使用 1 个状态位来指示状态机当前正处在两组状态中的哪一组,而剩下的状态位采用普通的 one-hot 编码。(例如一组状态为 4b0001, 4b0010, 4b0100,另一组为 4b1001, 4b1010, 4b1100。)因此要对给定状态进行完整的解码需要考察两个状态位。这种机制具有使用纯 one-hot 编码的大多数好处,但逻辑更小。 one-hot 状态机有一个缺点,它的状态每次发生跳转,所有的状态位都会发生变化。首先,状态机的输出往往是由状态位组合生成的。同时变化的状态位越多,组合输出稳定前所需的时间就越长,

文档评论(0)

zsmfjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档