Verilog 中 Always 块中的递归

Pra*_*han 2 recursion verilog

我有一个 verilog 代码,我希望在其中使用递归。但是,每当我在 always 块中尝试此操作时,都会出现错误,提示不是任务。

有什么办法可以在 always 块中实现模块吗?还有无论如何我可以在 always 块中使用递归吗?

tot*_*dli 5

您可以使用 generate 块编写递归模块:

module unary_and
#(parameter WIDTH = 32)
(input [WIDTH-1:0] in_and,
output            out_and)

generate
 if(WIDTH == 1) begin
   assign out_and = in_and;
 end
 else if(WIDTH == 2) begin
   assign out_and = in_and[0] & in_and[1];
 end
 else begin
   unary_and #(.WIDTH (WIDTH/2))
     unary_and_low
       (.in_and  (in_and[WIDTH/2-1:0]),
        .out_and (out_and_low));

   unary_and #(.WIDTH (WIDTH - WIDTH/2))
     unary_and_high
       (.in_and  (in_and[WIDTH-1:WIDTH/2]),
        .out_and (out_and_high));

   assign out_and = out_and_low & out_and_high;
 end
endgenerate
endmodule
Run Code Online (Sandbox Code Playgroud)

这是来自Verilog中的递归和迭代设计,您也可以其中找到其他解决方案。您也可以查看递归模块

也许你也应该看看这些问题和答案:
我们可以在一个 always 块中生成吗?
始终块中的 Verilog generate/genvar