2017-08-07 37 views
-2

我在systemverilog中有這個代碼,我必須在for循環中使用十六進制數。我正在嘗試下面的語法和代碼。十六進制值在verilog循環中生成

genvar i,j; 

localparam int i_d = 1; 

localparam int j_d = 134; 

generate 

for (i = 8'h01; i <= MAX1; i = i + INCR) 

begin 

    add_bit[i_d] = (creg_add == i); 

    i_d = i_d + 1; 

end 

for (j = 8'h86; j <= MAX2; j = j + INCR) 

begin 

    add_bit[j_d] = (creg_add == j); 

    j_d = j_d + 1; 

end 

endgenerate 

但是我正面臨着這個錯誤。有人可以幫我嗎?

Error-[SE] Syntax error 
Following verilog source has syntax error : 
    "creg.vs", 
    715: token is '[' 
       add_bit[i_d] = (creg_add == i); 
      ^
+0

什麼是'add_bit'?你可能需要'assign ad_bit [i_d] = ....'。我認爲這是一個重複的:https://stackoverflow.com/questions/45491164/getting-the-invalid-module-instantiation-in-my-fir-verilog-code – Serge

+0

你有什麼定義'add_bit'爲? –

+0

add_bit被定義爲邏輯 –

回答

0

這應該解決問題。

genvar i,j; 

localparam int i_d = 1; 

localparam int j_d = 134; 

generate 

for (i = 8'h01; i <= MAX1; i = i + INCR) 

begin 

    assign add_bit[i_d] = (creg_add == i); 

    i_d = i_d + 1; 

end 

for (j = 8'h86; j <= MAX2; j = j + INCR) 

begin 

    assign add_bit[j_d] = (creg_add == j); 

    j_d = j_d + 1; 

end 

endgenerate 
+1

由於'i_d' /'j_d'遞增,所以不會編譯。添加'assign'將不起作用,因爲它們是localparams(又名常量)。 – Greg

+0

這不會編譯? –

2

generate塊在加工時(預模擬)被評估。您可以在其中包含always塊,assign語句,模塊實例和本地範圍的變量deescalation。不允許直接指定將在always塊或assign語句之外不斷更新的值。

localparam s是常數,因此行i_d = i_d + 1是非法的。

一個更簡單的解決方案是在組合總是塊中使用程序分配。

int i,j; 
int i_d, j_d; 
logic [WIDTH:0] add_bit; 

always_comb begin 
    i_d = 1; 
    j_d = 134; 
    add_bit = '0; // fill zeros in case of gap between last i_d and first j_d 
    for (i = 8'h01; i <= MAX1; i = i + INCR) 
    begin 
    add_bit[i_d] = (creg_add == i); 
    i_d = i_d + 1; 
    end 
    for (j = 8'h86; j <= MAX2; j = j + INCR) 
    begin 
    add_bit[j_d] = (creg_add == j); 
    j_d = j_d + 1; 
    end 
end 
+0

感謝您的幫助;而不是使用add_bit [i_d],我可以使用add_bit [i]嗎?將能夠理解索引中的十六進制值嗎? –

+0

基數無關緊要(十六進制,十進制,二進制,十進制)。使用任何基數更容易處理。 '134'和'8'h86'是相同的,大多可以互換。我猜「INCR」大於1,這可以解釋爲什麼'i'和'i_d'不是同一個變量。 – Greg