2014-03-01 401 views
-3

這裏是我的verilog代碼,我不斷收到錯誤信息,我必須將輸出(s和carry)連接到結構網絡表達式。下面的代碼:verilog中的8位累加器,輸出數據類型

module p2(SW,KEY0,KEY1,LEDR,HEX0,HEX1,HEX2); 
input [7:0] SW; 
input [7:0] LEDR; 
input KEY1,KEY0; 

output[6:0] HEX0,HEX1,HEX2; 

reg[7:0] s; 
reg carry; 

accumulator acm (SW[7:0],s,carry,KEY0,KEY1); 

endmodule 

module accumulator (A, accum,overflow, clk, clr); 

input [7:0] A; 
input clk, clr; 
output [7:0] accum; 
output reg overflow; 

reg [7:0] accum; 

[email protected](clk) begin 
    if(clk) begin 
     {overflow,accum} <= accum + A; 
    end 
    else if(~clr) begin 
     accum = 8'b00000000; 
    end 
end 

endmodule 
+0

你能展示頂級模塊代碼嗎?! –

+0

嗨,這就是我擁有的所有代碼。頂級模塊代碼是p2 –

+0

哦,好的。所以你錯過了HEX0,HEX1,HEX2輸出。他們必須連接到某個東西。 (我也是Verilog的新手,但我認爲所有東西都必須連接到某個東西)。 –

回答

2

你的編譯器可能說是這樣的:

輸出或INOUT端口 「ACCUM」/ 「溢出」 必須連接到一個結構性淨表達

這意味着scarry應該被定義爲導線,而不是regs。

順便說一句,我會建議你改變accumulator碼一點點:

[email protected](posedge clk or negedge clr) begin 
    if(~clr) begin 
     accum <= 'b0; 
     overflow <= 'b0; 
    end else begin 
     {overflow,accum} <= accum + A; 
    end 
end 

@Filipe:它可以定義一個沒有驅動器的輸出端口。但在這種情況下(如這裏),所有的邏輯可能會被合成掉,因爲根據每個輸入信號將不會有輸出。

+0

但我需要把它加到S上,而且我不能用電線做這個 –

+0

p2是主要模塊,它傳入值並稍後顯示它 –

+0

感謝啓蒙,就像我所說的,仍然是新手和學習。 –