Уровень 35: 8-битный сумматор (Verilog)

Задание

Напишите 8-битный сумматор (Adder8) на Verilog. Он складывает две 8-битные шины a[7:0] и b[7:0] с учётом входного переноса c_in. Результат — sum[7:0] и выходной перенос c_out.

Используйте 8 экземпляров модуля FullAdder из уровня 34, соединённых цепочкой переноса (ripple carry).

Материалы по теме

Решение

8-битный сумматор — это цепочка из 8 полных сумматоров, где выходной перенос каждого подаётся на c_in следующего. Перенос «пробегает» от младшего бита к старшему (ripple carry).

Порядок портов FullAdder: (sum, c_out, a, b, c_in).

  1. В бойлерплейте уже объявлена шина промежуточных переносов: wire [7:0] c;. Добавьте wire w; для буфера.
  2. Младший разряд (бит 0) принимает внешний c_in: FullAdder fa0(sum[0], c[0], a[0], b[0], c_in);
  3. Разряды 1–7: каждый следующий FA берёт перенос предыдущего: FullAdder fa1(sum[1], c[1], a[1], b[1], c[0]); FullAdder fa2(sum[2], c[2], a[2], b[2], c[1]); и так далее до fa7.
  4. Выходной перенос — c[7], но его нужно пробросить через два последовательных NOT (буфер — двойное отрицание не меняет сигнал, но даёт нужную задержку): not g1(w, c[7]); not g2(c_out, w);

Доступ к отдельным битам шины — через квадратные скобки: a[0], b[3]. Все 8 сумматоров работают одновременно — цепочка существует в железе, а не в порядке строк.