Использование Generate Block/Loop для создания сумматора Ripple Carry

Я уже провел здесь поиск и нашел некоторые идеи, но некоторые концепции использования такого рода циклов ускользают от меня. Вот мои модули для 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.

Спасибо за любую помощь!


person rub3z    schedule 11.09.2016    source источник


Ответы (2)


Проверьте эту ссылку. Переименование файла с именем collect2.exe может решить вашу проблему.

Установка Xilinx и устранение неполадок

person Rich Maes    schedule 11.09.2016
comment
Большое спасибо! Мне все еще нужны некоторые ответы о том, как работает блок генерации, хотя ... есть ли какие-либо потенциальные проблемы с моей реализацией? - person rub3z; 11.09.2016
comment
Основываясь на вашем коде, я ожидаю увидеть 8 экземпляров make_fadder. В каждом экземпляре make_fadder будет 1 FullAdder. Разве это не то, что вы видите? - person Rich Maes; 11.09.2016
comment
@ rub3z Посмотрите на ответ KamilRymarz. - person Dave Grabowski; 13.09.2016

Ваш код правильный. После проработки дерево моделирования должно выглядеть так:

RCA8
  make_fadder[0]
    fa
  make_fadder[1]
    fa
  .
  .
  .
  make_fadder[7]
    fa    

Проверял на симуляторе Vivado и Aldec Riviera-PRO.

person Kamil Rymarz    schedule 11.09.2016