Поддерживает ли SystemVerilog Generate задержки?

Я подумал о создании часов с использованием genvar, как показано ниже:

        reg [7:0]clk;  
      
     genvar i;
        generate
          for (i=0; i < 7; i++) begin
              #1 clk[i]=~clk[i];
            end
        endgenerate

Я получаю сообщение об ошибке:

ошибка: около #: синтаксическая ошибка, неожиданный '#'

Как мы можем решить эту проблему? Могу ли я использовать задержки внутри блока generate?


person SUNODH    schedule 24.07.2020    source источник
comment
Вы можете поместить в блок генерации все, что вы можете поместить между module и endmodule. То, что вы пытаетесь поместить в свой блок генерации, будет недопустимым между module и endmodule.   -  person Matthew Taylor    schedule 24.07.2020


Ответы (3)


Да, блоки generate поддерживают задержки. Чтобы решить вашу проблему, используйте процедурный блок always:

reg [7:0] clk;  

genvar i;
generate
    for (i=0; i < 7; i++) begin
        always #1 clk[i]=~clk[i];
    end
endgenerate
person toolic    schedule 24.07.2020

Я чувствую, что нет необходимости генерировать, вы можете использовать цикл for непосредственно в всегда блоке:

reg [7:0] clk;
integer i;
always begin
  #1;
  for(i = 0; i < 7; i = i + 1)
    clk[i] = ~clk[i];
end

Тем не менее, если все биты переключаются одновременно, вы можете упростить это с помощью:

always
  #1 clk = ~clk; //..bitwise invert the array
person m4j0rt0m    schedule 24.07.2020

Похоже, OP хотел иметь последовательную модель задержки. В этом случае код должен выглядеть так:

always begin
  for(i = 0; i < 7; i = i + 1)
    #1 clk[i] = ~clk[i];
end
person Serge    schedule 24.07.2020