一、“x段式”描述的由来。 riple
考虑了时序优化的FSM的描述由两部分组成:状态寄存器及其更新逻辑和输出寄存器及其更新逻辑。如果把寄存器和更新逻辑分开描述,一个FSM可以最多采用四段代码进行描述: riple
如果从编码方便和易于阅读的角度考虑,可以把上述组成部分任意合并,得到不同的“n段式”描述方式。(我在学习数字电路时总结出了这样一个公式:组合逻辑 + 时序逻辑 = 时序逻辑,时序逻辑和组合逻辑的界限并不是那么清晰。) riple
二、输出采用寄存器驱动可以优化FSM的时序性能。 riple
影响一个时序电路运行速度的主要因素是该电路中两个寄存器之间组合逻辑路径的长度。越长的组合逻辑路径,其时序性能越差。一个电路中最长的组合逻辑路径决定了该电路最高运行频率,该路径就是该电路的“关键路径”(critical path)。所以,切断最长的组合逻辑路径可以提高局部电路的运行频率,切断多个较长的组合逻辑路径可以提高整体电路的运行频率。切断组合逻辑路径的工具就是寄存器。所以,添加寄存器可以提高电路的性能,但是会带来资源(面积)的增长。这也就是速度(speed)和面积(area)互为矛盾的原因。 riple
由上面的分析,也就不难得出输出采用寄存器驱动可以优化FSM时序性能的原因。在考虑FSM的时序问题时,不能独立地考虑FSM本身,需要综合考虑FSM模块和其下游模块构成的电路。在FSM不采用输出寄存时,在FSM模块和其下游模块的接口处,组合逻辑路径由两部分组合逻辑直接相连组成: riple
关键路径 = FSM的状态寄存器输出端(Q)到FSM模块输出端口之间的组合逻辑com1 + 下游模块的输入端口到下游模块第一级寄存器输入端(D)之间的组合逻辑com2 riple
与此相反,在FSM采用输出寄存时,这两部分组合逻辑之间不是直接相连,而是通过FSM的输出寄存器连接,也就是说:两个模块之间的组合逻辑路径被切断成了两段,可能的关键路径被切断了。 riple
三、输出采用寄存器驱动会减慢输出对输入信号变化的响应速度? riple
输出采用寄存器驱动可以带来电路运行速度的提升,但是会导致电路对输入信号响应速度的下降。这是令人困惑的:到底该不该采用FSM输出寄存器?是否必须要在时序性能和响应速度之间做出取舍?在同步电路设计中,答案是必须牺牲一定的响应速度以换取最佳的时序性能,只考虑电路的响应速度会带来潜在的时序性能损失。 riple
在考虑FSM的响应速度问题时,不能独立地考虑FSM本身,需要综合考虑FSM模块和其上、下游模块构成的电路。 riple
去除FSM模块的输出寄存器后,关键路径由下面公式构成: riple
关键路径 = 上游模块的输出寄存器输出端(Q1)到FSM模块输出端口之间的组合逻辑com1 + FSM模块输出端口到下游模块的输入寄存器输入端(D3)之间的组合逻辑com2 riple
与上面对电路时序性能的分析相同,添加输出寄存器后,该关键路径也被切断成为两部分,电路的运行频率得到了提高。 riple
在上图中,由于采用了输出寄存器,上侧电路的运行频率高于下侧电路的运行频率。当仅考虑局部路径上的传播差异时,上侧电路的响应时间比下侧电路的响应时间长Tsu+Tco;如果上侧电路降低运行频率,运行在下侧电路的运行频率时,上侧电路需要两个时钟周期,下侧电路仅需一个时钟周期即可完成对输入信号的响应,上侧电路的响应时间比下侧电路的响应时间长一个时钟周期;如果下侧电路提高运行频率,强行运行在上侧电路的最高运行频率时,下侧电路不能在一个时钟周期内完成com1+com2所需的传播时间(该路径成为multi-cylcle path),需要两个时钟周期才能完成,上下两个电路的响应时间相同。 riple
所以,采用输出寄存器的电路可以运行在更高的时钟频率下,所引入的响应延时与更高的运行频率相比是可以牺牲的。 riple
文章评论(0条评论)
登录后参与讨论