2017-05-04 2530 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