Vivado综合设置选项分析:-fsm_extraction
- 2019 年 10 月 31 日
- 筆記

-fsm_extraction用于设定状态机的编码方式,其可选值为one_hot, sequential, johnson, gray, auto和off。默认值为auto,此时Vivado会自行决定最佳的编码方式。
以Vivado自带的例子工程Wavegen为例,该工程中正好有一个状态机,在模块cmd_parse中且采用了sequential编码方式,如下图所示。

如果将-fsm_extraction设定为one_hot,则最终结果如下图所示(在综合log文件中搜索Synth 8-3354即可找到),可见最终状态机采用了one_hot的编码方式。这印证了-fsm_extraction优先级高于RTL代码指定的编码方式。

对于状态机,还有一个综合属性FSM_ENCODING,其值可以是one_hot, sequential, johnson, gray, auto和none。其优先级则高于-fsm_extraction设定的编码方式。如果使用了FSM_ENCODING,在综合报告中会显示工具检查到FSM_ENCODING设定的编码方式,如下图所示。

结论
-综合选项-fsm_extraction优先级高于RTL代码中指定的编码方式
-综合属性FSM_ENCODING优先级则高于-fsm_extraction指定的编码方式
-在综合log文件中,搜索encoding或Synth 8-3354可查看状态机对应的编码方式