三段式状态机的写法稀松平常,网上到处可以搜到,不再赘述。
当一个模块很大功能很多,状态机也非常庞大的时候,如果把所有的信号控制都放在状态机里,这个状态机会成为面积和关键路径优化的痛点,信号太多控制逻辑复杂,组合逻辑综合下来就非常大。
因此在写状态机的时候,最好把能拉出来可以不放在状态机的信号单独写在一个always块中,这样可以减少这个信号相关的组合逻辑。
状态机的状态最好不要超过8~10个,如果状态实在太多可以把一个大的状态机拆成几个状态机的嵌套。
if和case最好不要嵌套太多,直接把if和case的条件拉出去,是他们assign成为一个新的信号,再if或case这个信号,工具综合的时候更容易优化。
不同的信号不要放在一个always块进行控制,每个信号的控制单独一个always块,这样工具插入gating的时候,一些没有变化的信号可以gating掉,这样可以节省功耗,如果都放在一个always块中没有办法对每个信号单独gating。