2017-05-04 2531 views
0

我试图获取输入向量的最大值。我假设所有的输入都是无符号的,它应该在一系列的位宽和数组长度上工作。 我必须保持参数和输入输出逻辑的方式。下面是我的,但我在if语句出现语法错误:在Verilog中查找输入向量的最大值

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 

也许使用case语句会更好?我不知道。你能帮忙的话,我会很高兴!

回答

1

两个简单的问题。

您使用了括号{/}而不是begin/end来包装循环语句。无需反复包装单个语句。

您将i定义为单个位。使用int

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 
0

除了其他意见,我认为比较值应为'欧共体,而不是“大小”。这为我编译(当然与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