Verilog中的assign语句

发布时间:2023-05-17

一、Verilog assign 的用法

在 Verilog 中,使用 assign 语句将一个或多个输入信号赋值给一个输出信号,在电路中极为常见。assign 语句使用格式如下:

assign [name_of_output_signal] = [expression];

其中,name_of_output_signal 是你想要分配的输出信号的名称,expression 是赋值表达式。 如下面的代码示例所示,将数据输入信号 D 和时钟信号 CLK 分配给输出信号 Q

module d_ff(q, clk, d);
   output q;
   input  clk, d;
   // assign D and CLK to Q
   assign q = (clk & d);
endmodule

二、Verilog assign 语句四选一

Verilog 中 assign 语句有四种形式,包括 assignforcedeassignreleaseassign 语句是最基本的形式,其余三个形式是分别用于强制赋值、取消分配和解除强制分配。 下面对这四种形式做一简要介绍:

  • assign:用于将一个逻辑表达式赋值给一个输出信号,其中逻辑表达式是由一个或多个输入信号组成。assign 语句最早被用于分配连续逻辑电路中的输出信号,但也可以用于分配组合逻辑电路中的输出信号。
  • force:用于强制更改一个信号的值。如果用 force 语句强制更改一个信号,就会暂时取代 assign 或其他类型的分配语句,并在模拟过程结束时释放信号。
  • deassign:用于取消指令的强制分配,将信号恢复为原始的分配指令。在 deassign 之后,模拟器将以正常的原始赋值方式处理信号。
  • release:用于取消分配指令,但不像 deassign 一样恢复到原始值。如果一个信号被强制分配,但没有使用 deassign 语句进行释放,可以使用 release 语句释放。而且信号结束后,不恢复到原始值,而是保留在其最后强制分配的状态。

三、assign 语句如何使用

在 Verilog 中,assign 语句被广泛应用于通过组合逻辑电路来实现简单的功能逻辑。assign 语句使用的示例代码如下:

module and2 (Y, A, B);
   output Y;
   input  A, B;
   // assigning A and B to Y
   assign Y = A & B;
endmodule

在这个例子中,我们实现了一个简单的 2 输入 AND 门,其中输入信号 AB 被分配给输出信号 Y

四、Verilog assign 语句在仿真中不执行

需要注意的是,在 Verilog 模拟中,assign 语句不会被运行。在模拟中,assign 语句仅仅是将逻辑电路的连接一次性描述出来,形成一个完整的电路模型。在仿真中,assign 语句不会被执行,只有模块实例中的赋值和硬件行为才会执行。

五、assign 用法

如前所述,用 assign 来定义组合逻辑电路是 Verilog 语言中很常见的方法。下面是一个更复杂的例子,展示了如何使用 assign 语句来描述一个通过与门实现的加法器。

module adder (sum, carry_out, a, b);
   output sum, carry_out;
   input  a, b, carry_in;
   // assigning carry-in signal
   assign c1 = (a & b);
   assign c2 = (a ^ b);
   assign carry_out = (c1 | (c2 & carry_in));
   // assigning sum signal
   assign sum = (a ^ b ^ carry_in);
endmodule

在这个例子中,我们使用三个 assign 语句来将两个输入信号 ab 分配给输出信号 sum,同时将所有逻辑电路的连接一次性描述出来。

六、assign 语句

assign 语句被广泛用于设置 Verilog 设计中的输入和输出引脚,但也可以用于描述组合逻辑电路或锁定状态逻辑电路。下面是 assign 语句的一个简单示例,将三个输入信号 xyz 分配给一个输出信号 out

module assign_example (out, x, y, z);
   output out;
   input  x, y, z;
   // assigning signals
   assign out = (x | y) & (~z);
endmodule

在这个例子中,我们使用一条 assign 语句将 xy 的或值与 z 的非值进行与运算,并将结果分配给输出信号 out

七、Verilog 中的 assign 语句

在 Verilog 中,assign 语句是连接组合逻辑电路电线的主要方法,除了用于模块中为输入输出引脚分配信号以外,还可以用于描述一些简单的逻辑电路。 下面是一个例子,演示了如何使用 assign 语句实现一个四输入的 OR 门:

module or4 (out, in1, in2, in3, in4);
   output out;
   input  in1, in2, in3, in4;
   // assigning signals
   assign out = (in1 | in2 | in3 | in4);
endmodule

在这个例子中,我们使用了一条 assign 语句将 4 个输入信号的或值赋值给输出信号 out