当存在异步信号时,如何写异步信号的语句值得关注。
值得注意的是,与异步信号搭配的往往是置数信号,而一个variable型变量只能在一个always块中被赋值,不能通过列写两个always块的方式来实现异步置数,这个时候就需要注意,在always块中,可以传入多个信号的边沿(注意不能够传入同一个信号的两个边沿)。我们可以通过传入clk和异步置数信号的上升沿来实现异步信号的功能,此时使用符号 or或者用逗号将二者隔开。
例:HDLBits中一个含有异步置零信号的移位寄存器的代码
module top_module(
input clk,
input areset, // async active-high reset to zero
input load,
input ena,
input [3:0] data,
output reg [3:0] q);
always @(posedge clk or posedge areset)
begin
if (areset)
q<=4'b0;
else if (load)
q <= data;
else if (ena)
q <= {1'b0, q[3], q[2], q[1]};
else q<=q;
end
endmodule