2012-02-09 84 views
0

我想設計一個簡單的8位2的補碼。這裏是我的代碼:如何在另一模塊內使用模塊?

twos_complement_of_8bits.v

//`include "complementor.v" 

module twos_complement_of_8bits(output [7:0] out, input [7:0] in); 
integer i; 
initial 
    begin 
    for(i = 0; i <= 7; i = i + 1) 
     complementor C(out[i], in[i]); 
    end 
    assign out = out + 1; 
endmodule 

我在這行得到了一個錯誤:

complementor C(out[i], in[i]); 
Syntax error near 'C' found. 

我怎樣才能解決呢?

回答

2

我想你可以消除你的complementor模塊,然後改變你的twos_complement_of_8bits如下:

module twos_complement_of_8bits (output [7:0] out, input [7:0] in); 
    assign out = ~in + 1; 
endmodule 

如果不給你你想要的輸出,請出示一些預期輸出值。

在更復雜的情況下,可以放置模塊實例的數組或使用generate塊。

UPDATE:下面是如何使用generate塊的例子:

module twos_complement_of_8bits (output [7:0] out, input [7:0] in); 
    wire [7:0] out_ones; 
    genvar i; 
    generate 
     for (i=0; i<=7; i=i+1) begin 
      complementor C[i] (out_ones[i], in[i]); 
     end 
    endgenerate 
    assign out = out_ones + 1; 
endmodule 
+1

我的設計應該是分割成8點相同的模塊;每一個補足每一位然後加1.作爲最終設計的一個例子:如果輸入是11011100,輸出將是00100100.謝謝你的迴應順便說一句! – 2012-02-09 15:02:27

+1

@ Eng.Fouad,使用8個相同模塊的約束似乎是任意的,就像作業問題一樣。一般來說,Verilog最適合像@toolic寫的一維向量。使用2D矢量會產生記憶,這些記憶不容易通過模塊邊界傳遞。使用'generate'語句來實例化多個1位模塊是笨重的,容易出錯,應該避免,除非沒有其他方式。這些主要是Verilog語言的限制。但是,當在羅馬,像羅馬人那樣做。 – 2012-02-09 15:45:14

+1

根據要求,我用'generate'模塊更新了答案,以使用8個模塊。它爲該輸入提供所需的輸出。 – toolic 2012-02-09 16:39:30

相關問題