1) 最简单的assign: 要求a必须为wire,必须使用 = ,综合后为组合逻辑
assign a = b;
2)不能综合的initial语句:要求a必须为reg,使用 = 或 <= 都可以,但一般使用 =
initial a = b;
非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一个语句块中后面语句的执行。
3)花样最多的always:
3.1) 不可综合且不含@的always语句,要求clk为reg,使用 =
always #5 clk = ~clk;
3.2)生成组合逻辑的always @ (*),要求a为reg,必须使用 =
always @ (*)
a = b
3.3)生成时序逻辑的always @ (posedge clk or negedge nRst),a必须为reg,且必须使用 <=
always @ (posedge clk or negedge nRst)
a <= b;
总结:
- 使用wire的关键词只有assign ;
- 使用 <= 的关键词只有always @ (posedge clk or negedge nRst) 和initial,且initial一般也是用 = ;
参考资料:
https://www.runoob.com/w3cnote/verilog-timing-control.html