我试图获得输入向量的最大值。我假设所有输入都是无符号的,并且它应该适用于一系列位宽和数组长度。 我必须保持参数和输入输出逻辑的方式。这是我的,但我在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
也许使用案例陈述会更好?我不知道。任何帮助都会很好!
答案 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