在verilog中找到输入向量的最大值

时间:2017-05-04 04:36:24

标签: max verilog system-verilog

我试图获得输入向量的最大值。我假设所有输入都是无符号的,并且它应该适用于一系列位宽和数组长度。 我必须保持参数和输入输出逻辑的方式。这是我的,但我在if语句中得到语法错误:

module max
 #(parameter int bW=16,
   parameter int eC=8)
  (input logic [bW-1:0] a[eC-1:0],
   output logic [bW-1:0] z);

 logic i=0;

 always @* begin

   for (i=0; i<size; i++) {
         if(a[i] >z)
             z = a[i];
       }
 end
endmodule

也许使用案例陈述会更好?我不知道。任何帮助都会很好!

3 个答案:

答案 0 :(得分:1)

两个简单的问题。

您使用括号{/}代替begin / end来包装循环语句。无论如何都不需要包装单个语句。

您将i定义为一位。使用int

答案 1 :(得分:0)

您还需要使用默认值作为初始值,然后从那里计算最大值。

例如:

module max
 #(parameter int bW=16,
   parameter int eC=8)
  (input logic [bW-1:0] a[eC-1:0],
   output logic [bW-1:0] z);

 always @(*) begin
   // defaults 
   z = 0;

   for (int i=0; i<size; i++) begin
       if (a[i] > z)
           z = a[i];
   end
 end
endmodule

答案 2 :(得分:0)

除了其他评论之外,我认为比较值应该是&#39; eC&#39;而不是&#39; size&#39;。这为我编译(当然用sverilog标志):

module max #(
    parameter int bW = 16,
    parameter int eC = 8
)
(
    input  logic [bW-1:0] a [eC-1:0],
    output logic [bW-1:0] z
);

always @* begin

    z = a[0];
    for (int i=1; i<eC; i++) begin
        if(a[i] > z) begin
            z = a[i];
        end
    end
end
endmodule