2012-09-01 16 views
4

爲什麼我們不得不採取相同的輸出變量名稱,也爲了獲取值而連線?例如:爲什麼輸出網絡也需要重新聲明爲'wire'或'reg'?

module TEST(INP1,INP2,CIN,COUT,SUM); 
input [31:0] INP1; 
input [31:0] INP2; 
output [31:0] SUM; 
input CIN; 
output COUT; 

wire [31:0] SUM;// Again redefined 
wire COUT; // Again Redefined 
assign {COUT,SUM} = INP1 + INP2 + CIN ; 

獲取進行輸出的例子以及兩個數字和進位的和作爲輸入。

+0

你爲什麼認爲他們必須是? – toolic

回答

4

的Verilog 1995年確實需要進行上市後的端口方向。輸出線類型是隱含的,並且regs可以在方向上聲明爲內聯。

module TEST(A,B,C,D); 
    input  [31:0] A; 
    input  [31:0] B; 
    output  [31:0] C; 
    output reg  D; //Only declared twice 

自2001年的Verilog額外的定義不再需要它們可以被聲明爲inline(ANSI風格):

module TEST(A,B,C,D); 
    input [31:0] A; 
    input [31:0] B; 
    output [31:0] C; 
    output  D; 

    reg D; 

如可以寫。

module TEST(
    input  [31:0] A, 
    input  [31:0] B, 
    output  [31:0] C, 
    output reg  D // Declared Once 
); 

的SystemVerilog(2009年),我們的邏輯類型,您再也不用爲REG和線類型之間進行切換。唯一的要求是,如果你需要三態使用導線或tri。

module TEST(
    input  [31:0] A, 
    input  [31:0] B, 
    output logic [31:0] C, 
    output logic  D 
); 

我對具有reg和wire類型的原始要求的理解是模擬速度或模擬器設計的簡易性。每根模擬增量循環評估一根導線的值,而僅在由靈敏度列表觸發時評估一個導線。

-1

因爲只聲明一個網絡爲output不會描述它是reg類型還是wire類型。

一個輸出可以由一個導線或reg驅動,你必須告訴它驅動器將會是什麼類型。

4

沒有必要聲明output也作爲wire。此外,還可以通過避免使用ANSI-stlye端口聲明覆制端口列表:

module TEST (
    input [31:0] INP1, 
    input [31:0] INP2, 
    output [31:0] SUM, 
    input CIN, 
    output COUT 
); 

    assign {COUT,SUM} = INP1 + INP2 + CIN ; 
endmodule 

在你的榜樣,你不需要申報輸出作爲reg。但是,如果你需要爲另一個電路,可以在同一行聲明的類型,如:

output reg [31:0] Q; 
相關問題