Recursion Verilog中的递归在Always块中

Recursion Verilog中的递归在Always块中,recursion,verilog,Recursion,Verilog,我有一个verilog代码,希望在其中使用递归。但是,每当我在always块中尝试此操作时,它都会给出一个错误,说明这不是一项任务 是否有任何方法可以在always块中实现模块?还有,我可以在always块中使用递归吗?您可以使用generate块编写递归模块: module unary_and #(parameter WIDTH = 32) (input [WIDTH-1:0] in_and, output out_and) generate if(WIDTH ==

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


是否有任何方法可以在always块中实现模块?还有,我可以在always块中使用递归吗?

您可以使用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
这也是您可以找到其他解决方案的地方。你也可以退房

也许你也应该看看这些问题和答案:


您能举一个代码示例吗?或者解释您试图使用递归实现的算法?您不能将模块实例放在always块中。该模块使用复杂算法将2个数字相乘。算法中的一个步骤是将2个输入分解成更小的数字并相乘。我需要对同样的问题使用递归。