关于两段式同步清零D触发器中syn_clr采样时机的疑问
两段式同步清零D触发器中同步清零的采样逻辑解惑
先拆解两段式编码的核心结构:
- 时序always块:仅在时钟上升沿将
r_next的值加载到寄存器r_reg,这是唯一能改变寄存器输出的时机。 always_comb组合逻辑块:实时计算r_next的取值,syn_clr的变化会立刻触发这个块更新r_next,但这个更新不会直接影响寄存器r_reg。
你疑惑的核心点,关键逻辑在这里:
虽然syn_clr的变化会实时修改r_next,但寄存器r_reg只会在时钟上升沿那一刻,把当时的r_next值读入。换句话说,只有时钟上升沿瞬间的syn_clr状态,才会最终决定r_next当时的取值,进而决定寄存器是否被清零。
举个实际场景理解:假设在一个时钟周期内,syn_clr先从0变1,然后在时钟上升沿到来前又变回0。组合块里r_next会先变成清零值0,随后又变回输入d。但时钟上升沿触发时,只会采样最后那个r_next(也就是d),寄存器不会被清零。这就说明,只有时钟上升沿那一刻的syn_clr状态才是有效的——本质上就是在时钟上升沿对syn_clr进行了采样,和一段式的逻辑完全一致,只是两段式把组合逻辑和时序逻辑做了拆分。
对比一段式来看:一段式是在时序块里直接判断syn_clr,本质是时钟沿到来时,同时采样syn_clr和输入d,再决定寄存器的新值。两段式只是把“根据syn_clr和d计算新值”的步骤放到组合块提前计算,但最终还是要等时钟沿来把这个预计算的值加载到寄存器,所以syn_clr的有效采样时刻依然是时钟上升沿。
内容的提问来源于stack exchange,提问作者fpd011
相关产品推荐
相关产品推荐

