基于RTL综合策略的状态机优化方案
图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 结束语
采用本文介绍的优化策略,在不改变源代码的前提下,较之标准编译过程可以有效地提高状态机的性能。但因为在优化过程中特别是手动优化过程中对状态重新进行了编码,如果新的编码与原来的编码不一致,会导致逻辑错误,所以在使用这一策略时还要辅以其他手段进行逻辑验证。
评论