我已经在这里完成了搜索并找到了一些见解,但是有些使用这种循环的概念让我感到不舒服。以下是Half-Adder和Full-Adder的模块:
module HalfAdder( A, B, Cout, S );
input A, B;
output Cout, S;
assign Cout = A & B;
assign S = A ^ B;
endmodule
module FullAdder(FA_A, FA_B, Cin, FA_S, Cout);
input FA_A, FA_B, Cin;
output FA_S, Cout;
wire ha0_S, ha0_C, ha1_C;
HalfAdder ha0( .A( FA_A ),
.B( FA_B ),
.Cout(ha0_C ),
.S( ha0_S )
);
HalfAdder ha1( .A( Cin ),
.B( ha0_S ),
.Cout(ha1_C ),
.S( FA_S )
);
assign Cout = ha0_C | ha1_C;
endmodule
这是我的RCA代码:
module RCA8(A_8, B_8, Cin, Cout, S_8);
input [7:0] A_8, B_8;
input Cin;
output Cout;
output [7:0] S_8;
wire [8:0] c;
assign c[0] = Cin;
genvar i;
generate
for (i = 0; i < 8; i=i+1)
begin : make_fadders
FullAdder fa( .FA_A( A_8[i] ),
.FA_B( B_8[i] ),
.Cin( c[i] ),
.FA_S( S_8[i] ),
.Cout( c[i+1] )
);
end
endgenerate
assign Cout = c[8];
endmodule
我试图让模拟器(iSim)运行。当我检查语法时它可以工作,但是当我尝试生成一个编程文件时它失败了,当我运行Mapping时它会返回一堆警告。 iSim说错误861:未能链接设计。没有映射与此有关吗?
我真正理解的一件事是,在实现和/或模拟视图中,它只在RCA的下拉树中显示一个fullAdder模块。它应该显示8吗?或者这不是如何工作的?
我真的想做这项工作,因为替代方法是手工制作8个fadders(如作业所示......),而不是学习如何使用这个有用的工具。
其他细节:Windows 10,使用32位Project Navigator Xilinx 14.7
感谢您的帮助!
答案 0 :(得分:0)
查看此链接。重命名名为collect2.exe的文件可能会解决您的问题。
答案 1 :(得分:0)
您的代码是正确的。在详细说明之后,模拟树应该如下所示:
RCA8
make_fadder[0]
fa
make_fadder[1]
fa
.
.
.
make_fadder[7]
fa
我用Vivado模拟器和Aldec Riviera-PRO检查了它。