Verilog:使用assign和always

use*_*334 1 binary verilog

module circuit_1 (a, b, c);
input [1:0J a,b;
output [3:0J c;
assign c = a + b;
Run Code Online (Sandbox Code Playgroud)

如果输入 a = 2'b11 并且输入 b = 2'b10,

输出 c 有什么值?请给出一个描述性的答案。

还请告诉我分配和始终的功能。我有点困惑。

chi*_*nna 8

c = 4'b0101      // Output, implicitly a wire
Run Code Online (Sandbox Code Playgroud)

“assign”用于网络类型声明(Wire、Tri 等)。由于连线根据驱动它们的值更改值,因此每当 RHS 上的操作数发生变化时,都会评估该值并将其分配给 LHS(模拟连线)

always - 用于寄存器 + 组合逻辑。如果是 always(@posedge clk)- 事件posedge clk 会触发always 块,并评估和分配块内的逻辑。

always @ (*) - 如果 always 块的 RHS 中的某些内容发生变化,则计算并分配该特定表达式。

想象一下分配为线并始终阻止为寄存器 (For now) ,因为它们的行为是相同的。

  • `always @*` 用于 `reg` 类型而不是寄存器,`assign` 暗示与 `always @*` 相同的组合逻辑。`always @(posedge clk)` 意味着触发器(寄存器)。 (5认同)