2014-10-16 10 views
-3
module adder4(
output[3:0] sum, 
output c_out,  // carry out 
input[3:0] a, b, // operands 
input c_in);  // carry in 

wire [2:0] c_o; 
full_adder fa1(c_o[0],sum[0],a[0],b[0],c_in); 
full_adder fa2(c_o[1],sum[1],a[1],b[1],c_o[0]); 
full_adder fa3(c_o[2],sum[2],a[2],b[2],c_o[1]); 
full_adder fa4(c_out,sum[3],a[3],b[3],c_o[2]); 

endmodule 

module full_adder(
    output sum, 
    output c_out, // carry out 
    input a, 
    input b, 
    input c_in); // carry in 

wire sum1; 
wire c_in1; 
wire c_out2; 
    half_adder ha1(sum1,c_in1,a,b); 
    half_adder ha2(sum,c_out2,sum1,c_in); 
    or(c_out,c_out2,c_in1); 
endmodule 


module half_adder(
    output sum, 
    output c_out, // carry out 
    input a, 
    input b); 

assign sum=a^b; 
assign c_out=a&&b; 

endmodule 

嗨,夥計們!我試圖從4個完整的加法器中創建一個4位加法器,但是我一直得到錯誤的結果。當a = 3和b = 8時,我得到的總和是9而不是11.我沒有看到這個錯誤。有人知道我在這裏做錯了什麼嗎?4位加法器返回錯誤結果

回答

0

您的一些連接錯誤。您正在連接c_o[0]sum端口full_adder(對c_o[2:1]c_out也是如此)。按位置實例化時,端口順序非常重要。最快的解決方法是使用:

module full_adder(
    output c_out, // carry out 
    output sum, 

通過名稱而不是位置實例化通常是更好的做法。顯然,這是更詳細的,但它確實有助於避免您的接線錯誤的類型:

full_adder fa1 (.c_out(c_o[0]) , .sum(sum[0]), .a(a[0]), .b(b[0]), .c_in(c_in)); 

更新:您還可以採取例如陣列的優勢:

full_adder fa[3:0] (
    .c_out ({c_out, c_o}), 
    .sum (sum), 
    .a  (a), 
    .b  (b), 
    .c_in ({c_o, c_in}) 
); 
+0

感謝:d,我沒有意識到,直到現在。 – 2014-10-16 20:13:48

+0

現在我得到12當a = 8,b = 3和c_in = 1時 – 2014-10-16 20:23:15

+0

@lulia Dobra:1)不客氣。 2)你應該得到12。 – toolic 2014-10-16 20:24:31