2012-02-09 81 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

相关问题