2014-10-19 89 views
-2

變量聲明:Verilog的錯誤 - 精時間常數

output reg a, b, c; 

有什麼不對的下面,用Verilog編碼:

generate 

if (!a && !b && !c) 
    call call1(param1, param2, param3); 

endgenerate 

我上if陳述線以下錯誤:

Error - unknown or bad value for genvar 
Elaboration time unknown or bad value encountered for generate if-statement 
condition expression. 
Please make sure it is elaboration time constant. 

我甚至試過以下內容:

always @* begin 

if (!a && !b && !c) 
    call call1(param1, param2, param3); 

end 

當我做什麼的正上方(always塊),我得到以下語法錯誤:

Token is '(' 

call call1(param1, param2, param3); 
        ^
+0

是A,B,C genvars?你能否展開這個例子來涵蓋變量聲明。注意,沒有調用它們是實例,您描述的物理硬件不是編程例程。 – Morgan 2014-10-20 05:20:12

+0

基本上我只想在幾個模塊中包含一個if語句,但是當我不包含'always @ *'頭文件時,我得到了闡述時間未知錯誤。當我包含'always @ *'頭部時,我得到不正確的輸出(x's)。附:我如何確定是否是genvar? NB代表什麼? – thetypist 2014-10-20 07:03:22

+0

注意:[在wikipeida]上(http://en.wikipedia.org/wiki/Nota_bene),只是表示注意。 – Morgan 2014-10-20 08:14:32

回答

3

有看起來是一些混淆您使用Verilog的方式,尤其是來自命名慣例你已經使用。

使用示例的編譯版本生成on EDA Playground

module test; 

    localparam a = 0; 
    localparam b = 0; 
    localparam c = 0; 

    generate 
    if (!a && !b && !c) begin 
     call call1(param1, param2, param3); 
    end 
    endgenerate 

endmodule 

module call(
    input param1, 
    input param2, 
    input param3 
); 
endmodule 

此實例調用,即創建硬件如果a,b和c爲0。由於我們不能創建和銷燬硬件A,B, c必須是常數。

你已經打電話給你的模塊呼叫,這聽起來像你看它是一個軟件功能調用。這不是硬件塊。

您的端口被命名爲param,端口不是參數,它們表示硬件中將模塊相互連接的物理連線。

這聽起來像你實際上試圖有選擇性的邏輯,在這種情況下,你需要組合硬件來選擇使用哪個輸出。

wire out1,out2,result; 

call   call1  (input1, input2, out1); //<-- Hardware always exists 
othercall instance_2(input1, input2, out2); 

always @* begin 
    if (!a && !b && !c) 
    result = out1;  //<-- Output from different modules selected 
    else 
    result = out2; 
end 

如果不是兩個輸出之間進行選擇:

call   call1  (input1, input2, out1); //<-- Hardware always exists 

always @* begin 
    if (!a && !b && !c) 
    result = out1;  //<-- Output from module selected 
    else 
    result = 'b0;  // Otherwise drive 0 
end 
+0

初始開始工作嗎?我得到兩個不同的輸出,每個輸出一個。我應該如何知道使用哪一個? – thetypist 2014-10-20 07:34:24

+1

@thetypist不,初始只評估一次,所以選擇是靜態的。即結果永遠不會改變。我不明白你的2個不同的輸出。結果應該總是被驅動。 – Morgan 2014-10-20 07:44:26