2013-09-29 54 views
2

我是一個初學者,通過xilinx編寫verilog。xilinx中位置聲明變量有什麼區別?

我已經學會端口聲明必須像下面

module mealy(
    nReset, 
    clk, 
    in, 
    out 
); 

    input nReset; 
    input clk; 
    input in; 
    output out; 
endmodule 

當我使用賽靈思,它的默認選項來設置變量,它似乎是這樣的:

module mealy(
    input nReset, 
    input clk, 
    input in, 
    output out 
); 

endmodule 

有時候,當我使用第二種方式,它會產生一個錯誤。兩種風格有什麼區別?


一個次要問題,聲明輸出作爲reg S中的第一個樣式時可以正常工作,即

module mealy(
    in, 
    out 
); 

    output out; 
    input in; 
    reg out; 
endmodule 

當使用第二種風格,它會產生一個錯誤,指出不能聲明兩次。

module mealy(
    input in, 
    output out 
); 
    reg out; 
endmodule 

這是怎麼回事?我只是初學者,我不知道爲什麼我必須申報'reg'。

回答

3

Verilog 1995通常被稱爲verilog-95(IEEE 1364-1995),用於將端口聲明與指示分開並再次與reg類型分開。

由於Verilog 2001(IEEE 1364-2001)可以使用更緊湊的版本。

如果您的工具只符合95標準,他們會針對2001或更高版本的代碼發生錯誤。

當使用新的端口聲明,包括方向時,如果不是導線,還應該聲明類型。

module mealy(
    input in,    // Inputs are implicitly wires (reg would not make sense) 
    output  [1:0] out_x, // 2 bit wire type as output 
    output reg [1:0] out_y // 2 Bit reg type as output 
); 
endmodule 

reg和導線類型之間的區別應該查找,基本上它是一個模擬優化。如果使用SystemVerilog,則它們都可以用logic類型替換。

Wire s由端口驅動或分配語句。 reg分配在alwaysinitial塊內。 reg確實不是意味着觸發器。

+0

感謝摩根的幫助。另一個問題是爲什麼它不能以相同的方式聲明。我爲我的代碼添加了另一個問題。請幫助解決一個問題。 – dskim

+0

你問了兩個問題;您需要爲兩者提供錯誤消息。第二個錯誤很容易;你不能混用舊式和新式的聲明。第一個錯誤並不明顯。你說'有時'它會產生一個錯誤。什麼時候?什麼是錯誤? 「出去」是一條電線嗎?你有'default_nettype'設置某處? – EML

+0

@EML我認爲你打算評論這個問題而不是答案。主要問題是「有什麼區別」,而不是如何使錯誤消失,在這方面,確切的工具錯誤並不相關。 – Morgan

相關問題