1. 变量赋值或比较需要等位宽,进行严格约束,如 reg [7:0] param; initial param = 8'h87; (最好不要写 param = 135;)
2. verilog 中使用case ,if else , 或其他逻辑语句时需要保证语句的完整性,如 if 后需要跟随 else ; case 内需要包含default,保证程序块执行分支完整,否则可能会造成造成块内赋值语句执行错误(仿真正确,片上实际执行错误)
3.Verilog 需要仔细检查变量是否在仅在一个always块中进行赋值,多个always块中赋值在block design 设计中并不会倍检测出来,仿真时可能功能正常,实际片上执行功能异常
4.在非时钟同步情况下,条件语句内赋值,所有分支最好都包含该赋值语句,即使保持原值也需要写入,防止赋值语句引发问题。
如三段式状态机。红色框内语句必须存在,保证next_state可以稳定在当前状态,如果缺失会造成状态机跳转不正确,状态机多跳状态。
5. ila 调试vhdl只能监控输入或buf,不能监控out端口
6.组合逻辑,即没有时钟约束的process,不能做计数器操作,只能进行逻辑组合,赋值;时序逻辑可以根据组合逻辑的信号量跳变进行计数器操作。