Я уже провел здесь поиск и нашел некоторые идеи, но некоторые концепции использования такого рода циклов ускользают от меня. Вот мои модули для 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: не удалось связать дизайн. Разве Mapping не имеет к этому отношения?
Одна вещь, которую я действительно не понимаю, заключается в том, что в представлении реализации и/или моделирования он показывает только один модуль fullAdder в раскрывающемся дереве RCA. Должен ли он показывать 8? Или это не так работает?
Я действительно хочу, чтобы это работало, потому что альтернативой является изготовление 8 фейдеров вручную (как показано в задании...), а не изучение того, как использовать этот полезный инструмент.
Прочие сведения: Windows 10 с использованием 32-разрядной версии Project Navigator Xilinx 14.7.
Спасибо за любую помощь!