微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 针对状态机的综合优化策略

针对状态机的综合优化策略

时间:06-05 来源:互联网 点击:

按照一定的顺序用二进制序列或者格雷码序列来表示状态机的状态,这两种编码方式可以降低所需的触发器的数目,但速度不及one2hot编码方式。自动编码方式使用一种随机的风格产生状态编码,这种编码能在使用最短编码长度的情况下最大限度地降低组合逻辑的复杂度。采用什么样的编码风格,要根据设计需要进行选择。

  2 状态机优化策略及实施

状态机的优化包括两步,首先是提取状态机逻辑,然后是优化基于内部状态表表示的状态机。这个过程既可以完全自动进行,也可以手工进行。自动优化策略需要DC2Ultra的许可证(license) ,手动优化策略需要DC2Expert的许可证。

2.1 基于DC Ultra的自动优化策略

自动优化策略由读和编译两个阶段组成。

a) 读阶段:读进HDL或者以状态表描述的设计;自动侦测状态机的触发器;标明状态机的状态向量和状态编码特性。

b) 编译阶段:重新划分包含状态机的设计层次;从划分后的设计中提取状态机;确定编码风格;如果可能,减小转态数;分派状态;基于状态机的逻辑网表产生DC内部数据结构的状态分派;展平新创建的设计层次;继续其他DC优化步骤。

图2是自动优化的流程,其中列出了不同的可选命令,可以根据不同的设计进行取舍。

图2 基于DC Ultra的有限状态机自动优化流程

2.2 基于DC2Expert的手动优化策略

当输入设计文件不是以HDL描述的,或者DC不能从HDL文件中自动识别出状态机时,就要采用手动优化策略。

图3为手动优化策略的基本流程,其中展示了使用的命令、描述状态机的状态表和网表之间的关系。

图3 FSM 手机优化命令算法

从图3中可以看出,手动优化包括网表生成、状态表提取、基于状态表的优化和网表映射4 个阶段。Compile命令基于输入的HDL 文件生成网表, Extract命令基于网表生成状态表, Compile命令再基于状态机优化的状态表生成映射的网表。可选命令reduce_fsm和minimize_fsm基于状态表操作, reduce _fsm试图降低状态机相关的组合逻辑的复杂度, minimize_fsm则试图减少状态数目。

手动优化包含如下步骤:

(b)将设计读入DC。

如果设计不是以状态表格式给出的,按如下步骤提取状态表:

运行comp ile2map_effort low得到一个输入文件的网表;

根据需要使用set_fsm_state_vector指定状态向量;

使用group2fsm 将状态机逻辑划分到一个单独的模块,并将该模块设为当前设计;

使用set_fsm_encoding分派状态机状态;

使用extract从设计中提取状态机逻辑;

根据需要使用reduce_fsm降低状态机相关的组合逻辑的复杂度;

根据需要使用minimize_fsm,则试图减少状态数目;使用minimize_fsm,则试图减少状态数目。

c) 根据需要选用适当的命令,修改基于状态表的状态机的属性,如状态向量、状态编码、编码风格等。

d) 指定电路级约束条件和属性。

e) 编译整个设计。

图4是提取状态机的流程。

图5是基于状态表的优化流程。  

  3 应注意的问题

并非所有的有限状态机都可以使用本文所介绍的优化策略,原始的设计文件应该满足下列条件:

a) 所有的端口应该仅为输入或者输出端口,不支持输入输出端口。

b) 当一个模块中有多个状态机时,每次编译时只能提取出1个状态机,而提取哪个状态机是随机的,所以推荐每个模块仅包含1个有限状态机。

c) 状态机只能包含1个时钟。

  4 结束语

采用本文介绍的优化策略,在不改变源代码的前提下,较之标准编译过程可以有效地提高状态机的性能。但因为在优化过程中特别是手动优化过程中对状态重新进行了编码,如果新的编码与原来的编码不一致,会导致逻辑错误,所以在使用这一策略时还要辅以其他手段进行逻辑验证。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top