FPGA中和Verilog中always@(*)和assign 的理解

如题所述

第1个回答  2024-11-17
在FPGA与Verilog设计中,理解always@(*)与assign的用法至关重要。assign被视为直接连线,而always@(*)则表示只有在内部数据变化,尤其是输入变化时才开始执行。

二者主要区别在于触发机制:assign在任何时候都保持更新,而always@(*)则仅在特定条件触发时执行。这可能导致一些未知态出现,即在输入未变化时,输出结果未被正确更新。

例如,考虑以下模块设计,通过仿真来展示其运行效果。

图一展示的是初始阶段,在此阶段输入in未发生变化,导致输出a、b、c均处于不确定态。同样,如果always语句内包含if语句未使用else分支,或case语句未配置default分支,也可能产生不确定态,从而导致设计出现错误。

通过图二的仿真结果,我们可以观察到在in未变化的情况下,输出a、b、c均为不定态的现象。这表明在设计中正确使用always@(*)和assign是至关重要的,避免产生不确定态,确保设计的正确性与稳定性。
相似回答