如何在另一模块内使用模块?
问题描述:
我想设计一个简单的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.
我怎样才能解决呢?
答
我想你可以消除你的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
我的设计应该是分割成8点相同的模块;每一个补足每一位然后加1.作为最终设计的一个例子:如果输入是11011100,输出将是00100100.谢谢你的回应顺便说一句! – 2012-02-09 15:02:27
@ Eng.Fouad,使用8个相同模块的约束似乎是任意的,就像作业问题一样。一般来说,Verilog最适合像@toolic写的一维向量。使用2D矢量会产生记忆,这些记忆不容易通过模块边界传递。使用'generate'语句来实例化多个1位模块是笨重的,容易出错,应该避免,除非没有其他方式。这些主要是Verilog语言的限制。但是,当在罗马,像罗马人那样做。 – 2012-02-09 15:45:14
根据要求,我用'generate'模块更新了答案,以使用8个模块。它为该输入提供所需的输出。 – toolic 2012-02-09 16:39:30