Verilog 多个始终块用于循环

Verilog 多个始终块用于循环,verilog,fpga,Verilog,Fpga,是否可以在Verilog中使用for循环生成多个always语句 举个例子。假设我们想要创建一个4位涟波/异步计数器 我们可以这样做 always @(posedge MainClock) begin Q[0] = ~Q[0]; end always @(posedge Q[0]) begin Q[1] = ~Q[1]; end always @(posedge Q[1]) begin Q[2] = ~Q[2]; end always @(posedge Q[2])

是否可以在Verilog中使用for循环生成多个always语句

举个例子。假设我们想要创建一个4位涟波/异步计数器

我们可以这样做

always @(posedge MainClock)
begin
    Q[0] = ~Q[0];
end

always @(posedge Q[0])
begin
    Q[1] = ~Q[1];
end

always @(posedge Q[1])
begin
    Q[2] = ~Q[2];
end

always @(posedge Q[2])
begin
    Q[3] = ~Q[3];
end
是否可以这样做:

always @(posedge MainClock)
begin
    Q[0] = ~Q[0];
end

for (i = 1; i <= 3; i = i+1)
begin
   always @(posedge Q[i-1])
   begin
       Q[i] = ~Q[i];
   end
end
始终@(posedge主时钟)
开始
Q[0]=~Q[0];
结束

对于(i=1;i您可以使用
generate
来执行此操作:

genvar i;
generate
    for (i = 1; i <= 3; i = i+1) begin : ripple
        always @(posedge Q[i-1])
            Q[i] = ~Q[i];
    end
endgenerate

genvari;
生成

对于(i=1;i如果你要为FPGA合成它,你可能会遇到这样的逻辑和时钟混合问题。我模糊地记得在灵敏度列表中使用索引名称时收到警告消息。但这可能是特定于模拟器的…这对于学术研究来说是可以的,但如果你使用非时钟信号作为触发器中的时钟。您应该改用时钟。