Xilinx的官方代码库入口
之前以为FSM是状态机的简写,但是其实FSM是Finite-state machine(有限状态机)
"="和"<="的区别
这两种赋值方式的区别即为Verilog中阻塞和非阻塞赋值的区别
阻塞赋值,顾名思义,即在一个always块中,后面的语句会受到前面语句的影响,即阻塞赋值是一种顺序执行的关系。
比如:
module test ( input a, output reg c ); reg b; always @(*) begin b = 1b0; b = a; c = b; end endmodule
非阻塞赋值中,我们需要了解触发器的工作原理。再时钟到来的时候,触发器会将输入端的数据打到输出端,这是受时钟节拍控制的。
比如
module test ( input a, output reg c ); reg b; always @(*) begin b = 1b0; b <= a; c <= b; end endmodule // test 上面程序的RTL电路映射
module test ( input a, output reg c ); reg b; always @(*) begin b = 1b0; b <= a; c <= b; end endmodule // test
非阻塞赋值是由时钟节拍决定,再时钟上升沿到来时,执行赋值语句右边,然后将begin-end之间的所有赋值语句时赋值到赋值语句的左边。(注:是begin-end之间的所有语句,一起执行,且一个时钟只执行一次。)
总结: