在 Verilog 中对组合电路使用 assign 和 always block 有什么区别?
What is the difference between using assign and always block for combinational circuit in Verilog?
比如我想为Program Counter写一个+4单元。我必须将输出分配为输入+4,我最好使用哪种分配值模式?
module multiplexer_add4(in, out);
input in;
output out;
assign out=in+4;
endmodule
或
module multiplexer_add4(in, out);
input in;
output reg out;
always@(*)
out<=in+4;
endmodule
连续赋值只是一种更简单的表达方式,与 always
块的表达方式相同。 assign
语句只允许您使用一个方程一次写入一个信号。你不能使用像 for
循环这样的程序代码,除非你将它包装在一个函数中。
基本上assign
语句用于通过nets
连接不同的设备。 Always 块用于表达这些设备的行为。
一般来说,'assign' 语句用于为网络赋值。始终块处理为寄存器分配值。
赋值语句不允许代码块(除非您使用函数)。 always 块允许以算法方式表达硬件行为。
有些 always 块需要敏感列表,assign 不需要。
比如我想为Program Counter写一个+4单元。我必须将输出分配为输入+4,我最好使用哪种分配值模式?
module multiplexer_add4(in, out);
input in;
output out;
assign out=in+4;
endmodule
或
module multiplexer_add4(in, out);
input in;
output reg out;
always@(*)
out<=in+4;
endmodule
连续赋值只是一种更简单的表达方式,与 always
块的表达方式相同。 assign
语句只允许您使用一个方程一次写入一个信号。你不能使用像 for
循环这样的程序代码,除非你将它包装在一个函数中。
基本上assign
语句用于通过nets
连接不同的设备。 Always 块用于表达这些设备的行为。
一般来说,'assign' 语句用于为网络赋值。始终块处理为寄存器分配值。
赋值语句不允许代码块(除非您使用函数)。 always 块允许以算法方式表达硬件行为。
有些 always 块需要敏感列表,assign 不需要。