有没有办法在Verilog中进行嵌套的生成语句?

too*_*e21 5 verilog

我试图通过使用generate语句来减少一些代码,但是我只能通过嵌套来弄清楚该怎么做,但是我不认为这是允许的。

我所拥有的基本上是一些for循环(需要生成),在其中,我想根据代码生成时设置的值运行代码的三个部分之一(然后需要第二个生成) 。有没有办法做到这一点并使工具满意?

这是我正在尝试的简单照片:

    //TAPS_PER_CHAN is a value defined when the code is built
genvar srcNode, dstNode, tapIdx;
 generate
  for (dstNode=0; dstNode<NODES; dstNode=dstNode+1)
    begin: dstForLoop
    generate
        if(TAPS_PER_CHAN <= 4)
        begin
            call module one
        end    
        else if (TAPS_PER_CHAN <= 8)
        begin
            call module two
        end      
       else if (TAPS_PER_CHAN <= 16)
       begin  
            call module three
        end
    endgenerate
    end
endgenerate
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 5

是的,只需删除然后嵌套的generate/endgenerate关键字即可。
请参阅IEEE Std 1800-2012 § 27生成构造

    //TAPS_PER_CHAN is a value defined when the code is built
genvar srcNode, dstNode, tapIdx;
 generate
  for (dstNode=0; dstNode<NODES; dstNode=dstNode+1)
    begin: dstForLoop
    // generate <-- remove this
        if(TAPS_PER_CHAN <= 4)
        begin
            call module one
        end    
        else if (TAPS_PER_CHAN <= 8)
        begin
            call module two
        end      
       else if (TAPS_PER_CHAN <= 16)
       begin  
            call module three
        end
    // endgenerate <-- remove this
    end
endgenerate
Run Code Online (Sandbox Code Playgroud)

例子在这里