Несколько всегда блокировать, используя для цикла - PullRequest
1 голос
/ 26 февраля 2020

Можно ли сгенерировать несколько операторов всегда, используя для l oop в Verilog

В качестве примера. Допустим, мы хотим создать 4-битный Ripple / Asynchronous Counter.

Мы можем сделать это следующим образом

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

Я точно знаю, что первые методы работают, потому что я их проверял. Второй метод не работает, я его протестировал. Есть ли другой способ сделать это?

1 Ответ

2 голосов
/ 26 февраля 2020

Вы можете использовать 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

...