Verilog always@用法
时间: 2023-11-26 07:02:24 浏览: 344
`always@` 是 Verilog 中一个重要的关键字,用于描述一个组合逻辑或时序逻辑的行为。它有两种形式:
1. `always@ ( * )`:这种形式的 `always` 块会在其敏感列表中的所有信号发生变化时重新计算,相当于一个组合逻辑块。
2. `always @(posedge clock or negedge reset)`:这种形式的 `always` 块会在时钟上升沿或下降沿以及复位信号变为高电平时重新计算,相当于一个时序逻辑块。
下面是一个简单的例子,其中使用了 `always@` 块来描述一个8位加法器的行为:
```verilog
module adder8bit(
input [7:0] a,
input [7:0] b,
output [7:0] sum
);
reg [8:0] temp_sum;
always@ (a or b) begin
temp_sum = {1'b0, a} + {1'b0, b};
end
always@(posedge clk) begin
if (reset) begin
temp_sum <= 0;
end else begin
temp_sum <= temp_sum;
end
end
assign sum = temp_sum[7:0];
endmodule
```
在上面的例子中,第一个 `always@` 块用于计算两个8位输入数的和,而第二个 `always@(posedge clk)` 块用于在时钟上升沿时将 `temp_sum` 寄存器中的值传递给 `sum` 输出端口。
阅读全文